PDF – это стандартный формат для обмена документами в Интернете. Его глобальная поддержка и последовательная компоновка делают его идеальным выбором для таких сценариев. Однако иногда размер файлов PDF имеет тенденцию к увеличению из-за содержимого, такого как изображения, рисунки и т. д. В таких случаях вы можете легко оптимизировать или сжать файлы PDF, чтобы уменьшить их размер без ущерба для их качества. С этой целью в этой статье вы узнаете о различных методах сжатия и оптимизации PDF-файлов для уменьшения их размера с помощью C++.

C++ API для сжатия и оптимизации PDF-файлов

Aspose.PDF for C++ — это библиотека C++, позволяющая создавать, читать и обновлять PDF-документы. Вы можете использовать этот API для сжатия и оптимизации больших PDF-файлов, чтобы уменьшить их размер при сохранении их качества. Вы можете либо установить API через NuGet, либо загрузить его напрямую из раздела загрузки.

PM> Install-Package Aspose.PDF.Cpp

Оптимизация PDF-документов для Интернета с помощью C++

Если вы хотите отображать PDF-документы в Интернете, их оптимизация повысит скорость их загрузки и, таким образом, улучшит взаимодействие с пользователем. Чтобы оптимизировать PDF-документы, выполните следующие действия.

В следующем примере кода показано, как оптимизировать документы PDF для Интернета с помощью C++.

// Откройте PDF-документ
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Оптимизируйте документ PDF
pdfDocument->Optimize();

// Сохраните PDF-документ
pdfDocument->Save(u"OutputDirectory\\Optimized_output.pdf");

Сжатие и изменение размера изображений в файлах PDF с помощью C++

Если файлы PDF содержат большое количество изображений, это может привести к значительному размеру файла. В таких файлах изображения играют значительную роль в увеличении их размера. Сжатие и изменение размера изображений в этих файлах приведет к заметному уменьшению их размеров. Ниже приведены шаги по сжатию и изменению размера изображений в файле PDF.

В следующем примере кода показано, как сжимать изображения и изменять их размер, чтобы уменьшить размер файла PDF с помощью C++.

// Откройте PDF-документ
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Создайте экземпляр класса OptimizationOptions.
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// Сжимайте и изменяйте размер изображений, а также устанавливайте их качество и разрешение.
options->get_ImageCompressionOptions()->set_CompressImages(true);
options->get_ImageCompressionOptions()->set_ImageQuality(10);
options->get_ImageCompressionOptions()->set_MaxResolution(150);
options->get_ImageCompressionOptions()->set_ResizeImages(true);

// Оптимизация ресурсов в документе
pdfDocument->OptimizeResources(options);

// Сохраните PDF-документ
pdfDocument->Save(u"OutputDirectory\\Compressed_PDF_With_Images.pdf");

Чтобы еще больше уменьшить размер файла, вы также можете удалить встроенные шрифты из файла. Есть две стратегии удаления встроенных шрифтов; во-первых, вы удаляете все встроенные шрифты, а во-вторых, вы удаляете только подмножество неиспользуемых шрифтов. Кроме того, вы также можете удалить неиспользуемые потоки и связать повторяющиеся потоки, чтобы уменьшить дополнительный размер. Ниже приведены шаги для применения ранее обсужденных изменений к файлу PDF.

В следующем примере кода показано, как уменьшить размер файла PDF путем отключения шрифтов и удаления неиспользуемых потоков и объектов с помощью C++.

// Откройте PDF-документ
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// Создайте экземпляр класса OptimizationOptions.
System::SharedPtr<Aspose::Pdf::Optimization::OptimizationOptions> options = MakeObject<Aspose::Pdf::Optimization::OptimizationOptions>();

// Либо
// Отключить все шрифты в PDF
options->set_UnembedFonts(true);

// ИЛИ ЖЕ
// Сохраняйте встроенные шрифты только для используемых символов
options->set_SubsetFonts(true);

// Связать повторяющиеся потоки
options->set_LinkDuplcateStreams(false);

// Удалить неиспользуемые потоки
options->set_RemoveUnusedStreams(false);

// Удалить неиспользуемые объекты
options->set_RemoveUnusedObjects(false);

// Оптимизация ресурсов в документе
pdfDocument->OptimizeResources(options);

// Сохраните PDF-документ
pdfDocument->Save(u"OutputDirectory\\Remove_Embedded_Fonts_Output.pdf");

Удалить или сгладить аннотации с помощью C++

В файлах PDF может быть несколько аннотаций, таких как текст, фигуры и т. д., которые увеличивают размер файла. Эти аннотации можно удалить, если они больше не нужны, или свести их к минимуму, если дальнейшие изменения не требуются. Это уменьшит размер файла PDF. Ниже приведены шаги по удалению или сведению аннотаций из PDF-файлов.

В следующем примере кода показано, как удалить или свести аннотации в файлах PDF с помощью C++.

// Создайте экземпляр класса PdfAnnotationEditor.
System::SharedPtr<Aspose::Pdf::Facades::PdfAnnotationEditor> annotationEditor = System::MakeObject<Aspose::Pdf::Facades::PdfAnnotationEditor>();

// Загрузите образец PDF-файла
annotationEditor->BindPdf(u"SourceDirectory\\PDF\\AnnotationSample.pdf");

// Либо
// Свести аннотации
annotationEditor->FlatteningAnnotations();

// Или же
// Удалить аннотации
//annotationEditor->DeleteAnnotations();

// Сохраните PDF-документ
annotationEditor->Save(u"OutputDirectory\\Remove_Annotations_Output.pdf");

Удаление полей формы из файлов PDF с помощью C++

Поля формы необходимы, когда вам нужно собрать данные. Если сбор данных больше не требуется, вы можете сгладить поля формы, чтобы уменьшить размер файла PDF. Ниже приведены шаги для выравнивания полей формы в файлах PDF.

В следующем примере кода показано, как свести поля форм в PDF-файлах с помощью C++.

// Откройте PDF-документ
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Fillable_PDF_Form.pdf");

if (pdfDocument->get_Form()->get_Fields()->get_Length() > 0)
{
	// Итерация по полям формы
	for (System::SharedPtr<Field> field : pdfDocument->get_Form()->get_Fields())
	{
		// Сгладить поле
		field->Flatten();
	}
}

// Сохраните PDF-документ
pdfDocument->Save(u"OutputDirectory\\Flatten_Form_Fields.pdf");

Преобразование цветового пространства RGB в оттенки серого для файлов PDF с использованием C++

Файлы PDF с текстовой информацией могут быть хорошо представлены в цветовом пространстве оттенков серого, поэтому, когда необходимо уменьшить размер файла, такие файлы PDF можно преобразовать в оттенки серого. Кроме того, предположим, что приоритетом является архивирование файлов и максимальное уменьшение их размера. В этом случае PDF-файлы с изображениями также можно преобразовать в оттенки серого, поскольку основная цель — сделать файлы как можно меньше. Чтобы изменить цветовое пространство файлов PDF с RGB на оттенки серого, выполните следующие действия:

В следующем примере кода показано, как преобразовать цветовое пространство файла PDF из RGB в оттенки серого с помощью C++.

// Откройте PDF-документ
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 1.pdf");

System::SharedPtr<RgbToDeviceGrayConversionStrategy> strategy = MakeObject<RgbToDeviceGrayConversionStrategy>();

for (int idxPage = 1; idxPage <= pdfDocument->get_Pages()->get_Count(); idxPage++) {
	System::SharedPtr<Page> page = pdfDocument->get_Pages()->idx_get(idxPage);

	// Преобразование цветового пространства каждой страницы в оттенки серого
	strategy->Convert(page);
}

// Сохраните PDF-документ
pdfDocument->Save(u"OutputDirectory\\Grayscale_PDF_Output.pdf");

Получить бесплатную лицензию

Вы можете попробовать API без ограничений по ознакомительной версии, запросив бесплатную временную лицензию.

Вывод

Целью этой статьи было рассмотреть различные способы сжатия и оптимизации PDF-файлов для уменьшения их размеров. Во-первых, мы рассмотрели, как оптимизировать файлы PDF для Интернета. Затем мы увидели, как сжимать и изменять размер изображений в файлах PDF. Кроме того, мы научились удалять встроенные шрифты и потоки из файлов PDF. В дополнение к этому мы научились сглаживать аннотации и формировать поля, а также преобразовывать цветовое пространство PDF-файлов в оттенки серого. Мы изучили все эти способы уменьшить размер PDF-файлов без ущерба для их качества. Aspose.PDF для C++ предоставляет множество дополнительных возможностей для работы с PDF-файлами. Вы можете подробно изучить API, посетив официальную документацию. Если у вас возникнут какие-либо вопросы, свяжитесь с нами на нашем бесплатном форуме поддержки.

Смотрите также