PDF 是一種用於在互聯網上共享文檔的標準格式。其全球支持和一致的佈局使其成為此類場景的理想選擇。然而,有時 PDF 文件的大小往往會由於圖像、繪圖等內容而變大。在這種情況下,您可以輕鬆地優化或壓縮 PDF 文件以減小其大小而不影響其質量。為此,本文將教您使用 C++ 壓縮和優化 PDF 文件以減小其大小的不同技術。

用於壓縮和優化 PDF 文件的 C++ API

Aspose.PDF for C++ 是一個 C++ 庫,允許您創建、閱讀和更新 PDF 文檔。您可以使用此 API 壓縮和優化大型 PDF 文件以減小其大小,同時仍保持其質量。您可以通過 NuGet 安裝 API 或直接從 下載 部分下載。

PM> Install-Package Aspose.PDF.Cpp

使用 C++ 為 Web 優化 PDF 文檔

如果您想在網絡上顯示 PDF 文檔,對其進行優化將提高其加載速度,從而增強用戶體驗。為了優化 PDF 文檔,請按照以下步驟操作。

以下示例代碼顯示瞭如何使用 C++ 優化 PDF 文檔以用於 Web。

// 打開 PDF 文檔
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Sample 4.pdf");

// 優化PDF文檔
pdfDocument->Optimize();

// 保存 PDF 文檔
pdfDocument->Save(u"OutputDirectory\\Optimized_output.pdf");

使用 C++ 壓縮和調整 PDF 文件中的圖像

如果 PDF 文件包含大量圖像,則可能會導致文件大小過大。在此類文件中,圖像在增加文件大小方面起著重要作用。壓縮和調整這些文件中的圖像會導致它們的大小明顯減小。以下是在 PDF 文件中壓縮和調整圖像大小的步驟。

以下示例代碼演示瞭如何使用 C++ 壓縮和調整圖像大小以減小 PDF 文件大小。

// 打開 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 文件的步驟。

以下示例代碼顯示瞭如何使用 C++ 取消嵌入字體和刪除未使用的流和對象來減小 PDF 文件的大小。

// 打開 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 文件中刪除或拼合註釋的步驟。

以下示例代碼顯示瞭如何使用 C++ 刪除或展平 PDF 文件中的註釋。

// 創建 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");

使用 C++ 從 PDF 文件中刪除表單域

當您需要收集數據時,表單字段是必需的。如果不再需要收集數據,您可以展平表單域以減小 PDF 文件的大小。以下是拼合 PDF 文件中的表單域的步驟。

以下示例代碼顯示瞭如何使用 C++ 展平 PDF 文件中的表單域。

// 打開 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");

使用 C++ 將 PDF 文件的 RGB 顏色空間轉換為灰度

帶有文本信息的 PDF 文件可以在灰度顏色空間中很好地表示,因此當必須減小文件大小時,可以將此類 PDF 文件轉換為灰度。此外,假設優先級是存檔文件並儘可能減小大小。在這種情況下,帶有圖像的 PDF 文件也可以轉換為灰度,因為主要目的是使文件盡可能小。要將 PDF 文件的顏色空間從 RGB 更改為灰度,請按照以下步驟操作:

以下示例代碼顯示瞭如何使用 C++ 將 PDF 文件的顏色空間從 RGB 轉換為灰度。

// 打開 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。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。

也可以看看