目錄
安裝Python PDF庫
Python通過壓縮圖片來減小PDF文件大小
Python通過壓縮字體或取消嵌入字體來減小PDF文件大小
Python通過刪除不必要的內容如附件、注釋或表單來減小PDF文件大小
總結
PDF文件憑借其平臺無關性和便攜性,已經成為日常辦公和信息共享的首選格式。然而,很多PDF文件通常都體積較大,給存儲和傳輸帶來不少麻煩。尤其當需要頻繁發送、共享或備份大型PDF時,文件體積問題就會凸顯出來,不僅傳輸速度慢,還耗費大量存儲空間。壓縮PDF文檔可以有效減小PDF文件的大小,加快文件的傳輸和共享。在這篇博客中,我們將探討使用Python壓縮PDF文件的幾種方式:
- Python通過壓縮圖片來減小PDF文件大小
- Python通過壓縮字體或取消嵌入字體來減小PDF文件大小
- Python通過刪除不必要的內容如附件、注釋或表單來減小PDF文件大小
安裝Python PDF庫
要在Python中壓縮PDF文件,可以使用Spire.PDF for Python庫。它支持在Python應用程序中創建、讀取、操作和轉換PDF文檔。
你可以通過在終端運行以下命令來從PyPI安裝Spire.PDF for Python:
pip install Spire.PDF
Python通過壓縮圖片來減小PDF文件大小
很多大型PDF文件中通常包含大量的高分辨率的圖片,這些圖片是造成文件較大的主要原因。通過調整圖片的分辨率和質量可以達到減小PDF文件大小的目的。
壓縮PDF文件中的圖片的主要步驟如下:
- 創建PdfCompressor實例,用于壓縮指定的PDF文件。
- 設置壓縮選項,如設置圖片質量、啟用圖片大小調整和壓縮。
- 使用PdfCompressor.CompressToFile()方法壓縮PDF文檔并將結果保存為一個新的PDF。
下面是批量壓縮一個文件夾下的所有PDF文件中的圖片的實現代碼:
import os
from spire.pdf import *
from spire.pdf.common import *# 設置輸入和輸出文件夾
input_folder = "輸入PDF/"
output_folder = "輸出PDF/"# 創建輸出文件夾(如果不存在)
if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍歷輸入文件夾下的所有 PDF 文件
for filename in os.listdir(input_folder):if filename.endswith(".pdf"):input_pdf = os.path.join(input_folder, filename)output_pdf = os.path.join(output_folder, filename)# 創建 PdfCompressor 對象,并設置壓縮選項(設置圖片質量、啟用圖片大小調整和壓縮)compressor = PdfCompressor(input_pdf)compression_options = compressor.OptimizationOptionscompression_options.SetImageQuality(ImageQuality.Medium)compression_options.SetResizeImages(True)compression_options.SetIsCompressImage(True)# 壓縮 PDF 文件并保存到輸出文件夾compressor.CompressToFile(output_pdf)
Python通過壓縮字體或取消嵌入字體來減小PDF文件大小
PDF 中嵌入的字體也會導致文件大小增大。通過壓縮或取消嵌入這些字體有助于減小文件大小。
壓縮PDF文件中的字體或取消嵌入字體的主要步驟如下:
- 創建PdfCompressor實例,用于壓縮指定的PDF文件。
- 設置壓縮選項,如啟用字體壓縮或取消嵌入字體。
- 使用PdfCompressor.CompressToFile()方法壓縮PDF文檔并將結果保存為一個新的PDF。
下面是批量壓縮一個文件夾下的所有PDF文件中的字體或者取消這些PDF文件中的字體嵌入的實現代碼:
from spire.pdf import *
from spire.pdf.common import *
import os# 設置輸入和輸出文件夾
input_folder = "輸入PDF/"
output_folder = "輸出PDF/"# 創建輸出文件夾(如果不存在)
if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍歷輸入文件夾下的所有 PDF 文件
for filename in os.listdir(input_folder):if filename.endswith(".pdf"):input_pdf = os.path.join(input_folder, filename)output_pdf = os.path.join(output_folder, filename)# 創建 PdfCompressor 對象并設置壓縮選項compressor = PdfCompressor(input_pdf)compression_options = compressor.OptimizationOptions# 啟用字體壓縮compression_options.SetIsCompressFonts(True)# 或取消嵌入字體# compression_options.SetIsUnembedFonts(True)# 壓縮 PDF 文件并保存到輸出文件夾compressor.CompressToFile(output_pdf)
Python通過刪除不必要的內容如附件、注釋或表單來減小PDF文件大小
優化圖片或字體是壓縮PDF文檔的兩種主要方式。但有時候,PDF文件可能包含各種附件、注釋、或表單數據等附加信息,這些信息也會增加文件的大小。刪除掉文件中不需要的內容,也能減小文件的大小。
下面是從一個PDF文件中刪除附件的主要步驟:
- 創建?PdfDocument 實例并傳入要壓縮的 PDF 文件路徑。
- 將PdfDocument.FileInfo.IncrementalUpdate屬性設置為False來禁用增量更新。
- 使用PdfDocument.Attachments.Clear()方法刪除文件中所有的附件。
- 使用PdfDocument.SaveToFile()方法將結果保存為一個新的PDF。
實現代碼:
from spire.pdf import *
from spire.pdf.common import *# 創建PdfDocument 對象并傳入要壓縮的 PDF 文件路徑
input_pdf = "測試.pdf"
pdf = PdfDocument(input_pdf)
# 禁用增量更新
pdf.FileInfo.IncrementalUpdate = False# 從 PDF 文件中刪除所有附件
pdf.Attachments.Clear()# 將結果保存到一個新文件
output_pdf = "刪除附件.pdf"
pdf.SaveToFile(output_pdf)
pdf.Close()
下面是從一個PDF文件中刪除注釋的主要步驟:
- 創建一個 PdfDocument 實例并傳入要壓縮的 PDF 文件路徑。
- 將PdfDocument.FileInfo.IncrementalUpdate屬性設置為False來禁用增量更新。
- 遍歷PDF文件中的頁面。
- 使用PdfPageBase.Annotations.Clear()方法刪除頁面上的所有注釋。
- 使用PdfDocument.SaveToFile()方法將結果保存為一個新的PDF。
實現代碼:
from spire.pdf import *
from spire.pdf.common import *# 創建 PdfDocument 對象并指定要壓縮的 PDF 文件路徑
input_pdf = "測試.pdf"
pdf = PdfDocument(input_pdf)
# 禁用增量更新
pdf.FileInfo.IncrementalUpdate = False# 遍歷 PDF 文件的每一頁并從中刪除注釋
for i in range(pdf.Pages.Count):page = pdf.Pages[i]page.Annotations.Clear()# 將結果保存到一個新文件
output_pdf = "刪除注釋.pdf"
pdf.SaveToFile(output_pdf)
pdf.Close()
下面是扁平化或刪除一個PDF文件中的所有表單的主要步驟:
- 創建PdfDocument 實例并傳入要壓縮的 PDF 文件路徑。
- 將PdfDocument.FileInfo.IncrementalUpdate屬性設置為False來禁用增量更新。
- 使用PdfDocument.Form屬性獲取文件中的表單。
- 使用PdfForm.IsFlatten屬性扁平化所有表單。或使用PdfFormWidget.FieldsWidget.Clear()方法刪除所有表單。
- 使用PdfDocument.SaveToFile()方法將結果保存為一個新的PDF。
實現代碼:
from spire.pdf import *
from spire.pdf.common import *# 創建一個 PdfDocument 對象并指定要處理的 PDF 文件路徑
input_pdf = "測試.pdf"
pdf = PdfDocument(input_pdf)
# 禁用增量更新
pdf.FileInfo.IncrementalUpdate = False# 獲取 PDF 文件中的表單
form = pdf.Form
# 扁平化表單
# form.IsFlatten = True# 從 PDF 文件中刪除所有表單
formWidget = PdfFormWidget(form)
formWidget.FieldsWidget.Clear()# 將結果保存到一個新文件
output_pdf = "扁平化或刪除表單.pdf"
pdf.SaveToFile(output_pdf)
pdf.Close()
總結
這篇博客介紹了使用Python壓縮PDF文檔的幾種不同的方式。你可以根據自己的文檔結構,使用其中最適合的一種或者結合多種方式來實現最優壓縮效果。
感謝閱讀!