Оптимизация PDF-файлов в Java
Aspose.PDF for Java предоставляет функции оптимизации через Document.optimize, optimizeResources и OptimizationOptions.
Оптимизация PDF с помощью общей оптимизации документа
Используйте этот пример, когда вы хотите, чтобы Aspose.PDF применил встроенную процедуру оптимизации всего документа.
- Откройте исходный PDF в объекте Document.
- Вызовите
optimize()на документе. - Сохраните оптимизированный файл и сравните размеры оригинального и полученного.
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);
}
Уменьшение размера PDF с помощью оптимизации ресурсов
Этот пример сосредоточен на оптимизации на уровне ресурсов без ручной настройки отдельных параметров.
- Откройте исходный PDF в объекте Document.
- Запустите
optimizeResources()для оптимизации внутренних ресурсов. - Сохраните результат и выведите размеры входного и выходного файлов.
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);
}
Сжатие всех изображений в PDF
Используйте этот подход, когда документы с большим количеством изображений требуют меньшего размера файла, и небольшое ухудшение качества изображений допустимо.
- Откройте исходный PDF в объекте Document.
- Создайте OptimizationOptions и включите сжатие изображений с требуемым уровнем качества.
- Оптимизируйте ресурсы документа с помощью этих настроек.
- Сохраните оптимизированный файл и сравните размеры файлов.
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);
}
Удаление неиспользуемых объектов из PDF
Этот пример удаляет неиспользуемые объекты, которые могут оставаться в структуре документа после правок или слияний.
- Откройте исходный PDF в объекте Document.
- Создайте OptimizationOptions и включите удаление неиспользуемых объектов.
- Оптимизируйте ресурсы и сохраните обновлённый файл.
- Выведите оригинальные и уменьшенные размеры файлов.
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);
}
Удаление неиспользуемых потоков из PDF
Используйте этот подход, когда хотите удалить данные потоков, на которые документ больше не ссылается.
- Откройте исходный PDF в объекте Document.
- Настройте OptimizationOptions для удаления неиспользуемых потоков.
- Оптимизируйте ресурсы, сохраните выходной документ и сравните размеры файлов.
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);
}
Связывание дублирующих потоков в PDF
В этом примере происходит дедупликация повторяющихся потоков, чтобы одинаковый контент мог храниться только один раз.
- Откройте исходный PDF в объекте Document.
- Создайте OptimizationOptions и включите связывание дублирующих потоков.
- Оптимизируйте ресурсы, сохраните документ вывода и выведите размеры файлов.
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);
}
Удаление встроенных шрифтов из PDF
Используйте эту опцию, когда уменьшение размера файла важнее, чем сохранение встроенных данных шрифтов в выводе.
- Откройте исходный PDF в объекте Document.
- Настройте OptimizationOptions, чтобы удалить встраивание шрифтов.
- Оптимизируйте ресурсы, сохраните документ и сравните размеры файлов.
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);
}
Фиксация аннотаций в PDF
Этот пример преобразует аннотации в статическое содержимое страницы, поэтому они больше не остаются интерактивными объектами.
- Откройте исходный PDF в объекте Document.
- Переберите каждую страницу Page и её коллекцию аннотаций Annotation.
- Преобразуйте все аннотации в статическое содержимое страницы и сохраните обновлённый документ.
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());
}
}
Преобразование полей PDF-формы в содержимое страницы
Используйте этот подход, когда заполняемые поля формы должны стать фиксированным содержимым перед распространением или архивированием.
- Откройте исходный PDF в объекте Document.
- Проверьте, содержит ли документ виджеты формы.
- Преобразуйте каждое поле Field, представленное аннотацией WidgetAnnotation, в статическое содержимое страницы.
- Сохраните выходной файл и выведите размеры файлов.
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);
}
Преобразование PDF в оттенки серого
Этот пример переводит каждую страницу в градации серого, что может помочь уменьшить сложность цвета и стандартизировать вывод для архивных или печатных рабочих процессов.
- Откройте исходный PDF в объекте Document.
- Переберите каждую страницу Page в документе.
- Вызовите
makeGrayscale()на каждой странице и сохраните выходной файл.
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());
}
}
Использование сжатия изображений FlateDecode
Используйте этот шаблон, когда хотите применить сжатие на основе Flate к изображениям при оптимизации ресурсов PDF.
- Откройте исходный PDF в объекте Document.
- Создайте OptimizationOptions и установите кодировку изображения ImageEncoding.
Flate. - Оптимизируйте ресурсы документа и сохраните выходной файл.
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());
}
}
Вывод размеров файлов до и после оптимизации
Этот вспомогательный метод сообщает о разнице в размере между исходным файлом и оптимизированным выходным файлом.
- Прочитайте размер входного файла.
- Прочитайте размер выходного файла.
- Выведите оба значения в одном статусном сообщении.
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));
}