PDF 是一種用於在互聯網上共享文檔的標準格式。其全球支持和一致的佈局使其成為此類場景的理想選擇。然而,有時 PDF 文件的大小往往會由於圖像、繪圖等內容而變大。在這種情況下,您可以輕鬆地優化或壓縮 PDF 文件以減小其大小而不影響其質量。為此,本文將教您使用 C++ 壓縮和優化 PDF 文件以減小其大小的不同技術。
- 用於壓縮和優化 PDF 文件的 C++ API
- 使用 C++ 為 Web 優化 PDF 文檔
- 使用 C++ 壓縮和調整 PDF 文件中的圖像
- 使用 C++ 刪除嵌入字體、未使用的流和鏈接重複流
- 使用 C++ 刪除或展平註釋
- 使用 C++ 從 PDF 文件中刪除表單域
- 使用 C++ 將 PDF 文件的 RGB 顏色空間轉換為灰度
用於壓縮和優化 PDF 文件的 C++ API
Aspose.PDF for C++ 是一個 C++ 庫,允許您創建、閱讀和更新 PDF 文檔。您可以使用此 API 壓縮和優化大型 PDF 文件以減小其大小,同時仍保持其質量。您可以通過 NuGet 安裝 API 或直接從 下載 部分下載。
PM> Install-Package Aspose.PDF.Cpp
使用 C++ 為 Web 優化 PDF 文檔
如果您想在網絡上顯示 PDF 文檔,對其進行優化將提高其加載速度,從而增強用戶體驗。為了優化 PDF 文檔,請按照以下步驟操作。
- 使用 Document 類加載 PDF 文檔。
- 使用 Document->Optimize() 方法優化文檔。
- 使用 Document->Save(System::String outputFileName) 方法保存 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 文件中壓縮和調整圖像大小的步驟。
- 使用 Document 類加載 PDF 文件。
- 創建 OptimizationOptions 類的實例。
- 設置 OptimizationOptions 對象的壓縮、圖像質量和分辨率選項。
- 使用 Document->OptimizeResources(System::SharedPtrAspose::Pdf::Optimization::OptimizationOptions strategy) 優化資源的方法。
- 使用 Document->Save(System::String outputFileName) 方法保存 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");
使用 C++ 刪除嵌入字體、未使用的流和鏈接重複流
要進一步減小文件大小,您還可以從文件中刪除嵌入的字體。有兩種刪除嵌入字體的策略;第一個是刪除所有嵌入字體,第二個是只刪除未使用字體的子集。此外,您還可以刪除未使用的流並鏈接重複的流以減少額外的大小。以下是將先前討論的更改應用到 PDF 文件的步驟。
- 使用 Document 類加載 PDF 文件。
- 創建 OptimizationOptions 類的實例。
- 取消嵌入所有字體或字體子集。
- 鏈接重複的流。
- 刪除未使用的流和對象。
- 使用 Document->OptimizeResources(System::SharedPtrAspose::Pdf::Optimization::OptimizationOptions strategy) 優化資源的方法。
- 使用 Document->Save(System::String outputFileName) 方法保存 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 文件中刪除或拼合註釋的步驟。
- 創建 PdfAnnotationEditor 類的實例。
- 使用 PdfAnnotationEditor->BindPdf (System::SharedPtrAspose::Pdf::Document srcDoc) 方法。
- 展平或刪除註釋。
- 使用 PdfAnnotationEditor->Save(System::String destFile) 方法保存 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 文件中的表單域的步驟。
- 使用 Document 類加載 PDF 文件。
- 檢查表單字段是否存在。
- 遍歷表單字段並展平每個字段。
- 使用 Document->Save(System::String outputFileName) 方法保存 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 更改為灰度,請按照以下步驟操作:
- 使用 Document 類加載 PDF 文件。
- 創建 RgbToDeviceGrayConversionStrategy 類的實例。
- 遍歷 PDF 文件的頁面。
- 使用 RgbToDeviceGrayConversionStrategy->Convert (System::SharedPtr page) 方法將每個頁面轉換為灰度。
- 使用 Document->Save(System::String outputFileName) 方法保存 PDF 文件。
以下示例代碼顯示瞭如何使用 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。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。