Otimizar arquivos PDF em Java
Aspose.PDF for Java expõe recursos de otimização através Document.optimize, optimizeResources, e OptimizationOptions.
Otimizar um PDF com otimização geral de documento
Use este exemplo quando você quiser que o Aspose.PDF aplique a rotina de otimização de documento inteiro incorporada.
- Abra o PDF de origem em um objeto Document.
- Chame
optimize()no documento. - Salve o arquivo otimizado e compare os tamanhos original e de saída.
public static void optimizePdf(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
document.optimize();
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Reduza o tamanho do PDF otimizando recursos
Este exemplo foca na otimização ao nível de recurso sem configurar manualmente opções individuais.
- Abra o PDF de origem em um objeto Document.
- Execute
optimizeResources()para otimizar recursos internos. - Salve o resultado e imprima os tamanhos dos arquivos de entrada e saída.
public static void reduceSizePdf(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
document.optimizeResources();
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Compactar todas as imagens em um PDF
Use esta abordagem quando documentos com muitas imagens precisam de um tamanho de arquivo menor e alguma redução na qualidade da imagem é aceitável.
- Abra o PDF de origem em um objeto Document.
- Crie OptimizationOptions e habilite a compactação de imagem com o nível de qualidade necessário.
- Otimize os recursos do documento com essas configurações.
- Salve o arquivo otimizado e compare os tamanhos dos arquivos.
public static void shrinkingOrCompressingAllImages(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.getImageCompressionOptions().setCompressImages(true);
optimizeOptions.getImageCompressionOptions().setImageQuality(50);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Remover objetos não utilizados de um PDF
Este exemplo remove objetos não utilizados que podem permanecer na estrutura do documento após edições ou mesclagens.
- Abra o PDF de origem em um objeto Document.
- Crie OptimizationOptions e habilite a remoção de objetos não utilizados.
- Otimize os recursos e salve o arquivo atualizado.
- Imprima os tamanhos do arquivo original e do reduzido.
public static void removingUnusedObjects(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setRemoveUnusedObjects(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Remover fluxos não utilizados de um PDF
Use esta abordagem quando quiser descartar dados de fluxo que não são mais referenciados pelo documento.
- Abra o PDF de origem em um objeto Document.
- Configure OptimizationOptions para remover fluxos não utilizados.
- Otimize os recursos, salve o documento de saída e compare os tamanhos dos arquivos.
public static void removingUnusedStreams(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setRemoveUnusedStreams(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Vincular fluxos duplicados em um PDF
Este exemplo deduplica fluxos repetidos para que o conteúdo idêntico possa ser armazenado apenas uma vez.
- Abra o PDF de origem em um objeto Document.
- Crie OptimizationOptions e habilite o vínculo de fluxo duplicado.
- Otimize os recursos, salve o documento de saída e imprima os tamanhos dos arquivos.
public static void linkingDuplicateStreams(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setLinkDuplicateStreams(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Desincorporar fontes de um PDF
Use esta opção quando reduzir o tamanho do arquivo for mais importante do que manter os dados de fontes incorporadas na saída.
- Abra o PDF de origem em um objeto Document.
- Configure OptimizationOptions para desincorporar fontes.
- Otimize os recursos, salve o documento e compare os tamanhos dos arquivos.
public static void unembedFonts(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setUnembedFonts(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Achatar anotações em um PDF
Este exemplo converte anotações em conteúdo de página estático, de modo que elas não permanecem mais como objetos interativos.
- Abra o PDF de origem em um objeto Document.
- Itere através de cada Page e seu Annotation coleção.
- Aplanar todas as anotações e salvar o documento atualizado.
public static void flattenAnnotations(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
for (Page page : document.getPages()) {
for (Annotation annotation : page.getAnnotations()) {
annotation.flatten();
}
}
document.save(outputFile.toString());
}
}
Aplanar campos de formulário PDF
Use esta abordagem quando os campos de formulário preenchíveis devem se tornar conteúdo fixo antes da distribuição ou arquivamento.
- Abra o PDF de origem em um objeto Document.
- Verifique se o documento contém widgets de formulário.
- Achatar cada Field representado por um WidgetAnnotation.
- Salve o arquivo de saída e imprima os tamanhos dos arquivos.
public static void flattenForms(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
if (document.getForm() != null && document.getForm().size() > 0) {
for (WidgetAnnotation annotation : document.getForm()) {
if (annotation instanceof Field field) {
field.flatten();
}
}
}
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
Converter um PDF para escala de cinza
Este exemplo altera cada página para tons de cinza, o que pode ajudar a reduzir a complexidade de cores e padronizar a saída para fluxos de trabalho de arquivamento ou impressão.
- Abra o PDF de origem em um objeto Document.
- Itere através de cada Page no documento.
- Chame
makeGrayscale()em cada página e salve o arquivo de saída.
public static void convertPdfFromRgbColorspaceToGrayscale(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
for (Page page : document.getPages()) {
page.makeGrayscale();
}
document.save(outputFile.toString());
}
}
Usar compressão de imagem FlateDecode
Use este padrão quando quiser aplicar compressão baseada em Flate a imagens durante a otimização de recursos PDF.
- Abra o PDF de origem em um objeto Document.
- Crie OptimizationOptions e defina a codificação da imagem para ImageEncoding.
Flate. - Otimize os recursos do documento e salve o arquivo de saída.
public static void usingFlatedecodeCompression(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizationOptions = new OptimizationOptions();
optimizationOptions.getImageCompressionOptions().setEncoding(ImageEncoding.Flate);
document.optimizeResources(optimizationOptions);
document.save(outputFile.toString());
}
}
Imprimir tamanhos de arquivos original e otimizado
Este método auxiliar relata a diferença de tamanho entre o arquivo de origem e o arquivo de saída otimizado.
- Leia o tamanho do arquivo de entrada.
- Leia o tamanho do arquivo de saída.
- Imprima ambos os valores em uma única mensagem de status.
private static void printFileSizes(Path inputFile, Path outputFile) throws Exception {
System.out.println("Original file size: " + Files.size(inputFile)
+ ". Reduced file size: " + Files.size(outputFile));
}