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-файл за допомогою класу Document.
  • Перевірте наявність полів форми.
  • Перебирайте поля форми та вирівнюйте кожне поле.
  • Збережіть PDF-файл за допомогою методу Document->Save(System::String outputFileName).

Наведений нижче зразок коду показує, як звести поля форми у файли 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 for C++ надає багато додаткових функцій для роботи з файлами PDF. Ви можете детально вивчити API, відвідавши офіційну документацію. У разі будь-яких запитань зв’яжіться з нами на нашому безкоштовному форумі підтримки.

Дивись також