如何使用 Python 壓縮 PDF 檔案 | IronPDF

如何在 Python 中壓縮 PDF 檔案

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF 的 CompressImages 方法讓 Python 開發人員能透過可調整畫質設定來壓縮嵌入的圖片,從而縮小 PDF 檔案大小,有助於優化儲存空間並加速文件分享,同時不影響可讀性。

快速入門:在 Python 中壓縮 PDF 檔案

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/quickstart.py
from ironpdf import PdfDocument

# 1. Install IronPDF: pip install ironpdf
# 2. Load your PDF
pdf = PdfDocument("your-file.pdf")
# 3. Compress images (quality: 1-100)
pdf.CompressImages(60)
# 4. Save compressed PDF
pdf.SaveAs("compressed.pdf")
# 5. Adjust quality parameter to balance size vs quality
// 此程式碼片段無法顯示!
from ironpdf import PdfDocument

# 1. Install IronPDF: pip install ironpdf
# 2. Load your PDF
pdf = PdfDocument("your-file.pdf")
# 3. Compress images (quality: 1-100)
pdf.CompressImages(60)
# 4. Save compressed PDF
pdf.SaveAs("compressed.pdf")
# 5. Adjust quality parameter to balance size vs quality
PYTHON

PDF 檔案廣泛用於文件儲存與分享,但當檔案過大時,可能會變得難以處理。 上傳或透過電子郵件傳送一份 10 MB 的報告,其速度明顯慢於分享一份 2 MB 的等效文件;當文件數量龐大時,儲存成本也會隨之累積。 PDF 壓縮技術透過在維持內容可讀性的同時縮小檔案大小,來解決此問題。

本指南將說明如何在 Python 中使用 IronPDF 壓縮 PDF 檔案。 實用的程式碼範例涵蓋標準影像壓縮與進階的解析度導向壓縮,讓您能選擇最適合工作流程的方法。無論是處理 HTML 轉 PDF 轉換或現有文件,皆適用相同的壓縮 API。

什麼是 IronPDF,以及為何要使用它來壓縮 PDF?

IronPDF 是一款 Python PDF 函式庫,用於處理 PDF 文件的建立、讀取、編輯及最佳化。 它可處理從頭開始建立的檔案、由 HTML 轉換而來的檔案,或從磁碟載入的檔案。 其壓縮 API 針對圖像進行處理,而圖像正是導致 PDF 檔案體積龐大的主要因素。

CompressImages 方法接受 1 到 100 之間的整數參數,以及一個可選的布林值,用於將圖片縮放至其可見解析度。 此雙參數設計讓您能精確調整壓縮程度:高流量的報表儀表板可能採用品質等級 70 以保持視覺效果清晰,而內部歸檔系統則可能採用品質等級 40 以最大化儲存空間節省。 該函式庫在內部處理所有編碼,因此無需額外依賴項。

IronPDF 是 Iron Suite 套件的一部分,該套件涵蓋文件建立、BarCode 處理、OCR 及 ZIP 壓縮等功能,所有功能皆可透過單一的 Python 安裝環境運作。 對於已使用 IronPDF 從頭開始建立 PDF 的開發人員而言,壓縮功能是儲存或發佈檔案前自然而然的後續步驟。

如何在 Python 中安裝 IronPDF?

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/install.sh
:ProductInstall
// 此程式碼片段無法顯示!
:ProductInstall
SHELL

請注意IronPDF for Python 基於 IronPDF .NET 函式庫運行,該函式庫需要 .NET 6.0 SDK。 在執行 pip install 之前,請先從微軟官方網站下載 .NET 6.0 SDK。)}]

安裝完成後,請為生產環境設定您的授權金鑰。 IronPDF 提供 30 天試用,涵蓋所有功能(包括壓縮功能),且無需提供信用卡資訊。 PyPI 套件頁面列出了最新的發行說明與依賴項詳細資訊。

如何使用 IronPDF 壓縮 PDF 檔案?

將一個整數傳遞給 CompressImages,以縮小整個文件中嵌入圖片的尺寸。 較低的整數值會產生較小的檔案,但會犧牲影像的保真度; 較大的整數能保留更多細節。 以下範例同時展示了標準壓縮呼叫與進階呼叫,後者會將圖片縮放至其可見尺寸。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/compress-basic.py
from ironpdf import PdfDocument

# Load the PDF document from a file
pdf = PdfDocument("Image based PDF.pdf")

# Compress images to quality 60 (lower numbers increase compression)
pdf.CompressImages(60)
pdf.SaveAs("document_compressed.pdf")

# Advanced: also scale images down to their visible size in the PDF
# Note: scaling can affect image clarity if pages are resized later
pdf.CompressImages(90, True)
pdf.SaveAs("Compressed.pdf")
// 此程式碼片段無法顯示!
from ironpdf import PdfDocument

# Load the PDF document from a file
pdf = PdfDocument("Image based PDF.pdf")

# Compress images to quality 60 (lower numbers increase compression)
pdf.CompressImages(60)
pdf.SaveAs("document_compressed.pdf")

# Advanced: also scale images down to their visible size in the PDF
# Note: scaling can affect image clarity if pages are resized later
pdf.CompressImages(90, True)
pdf.SaveAs("Compressed.pdf")
PYTHON

壓縮參數代表什麼意思?

CompressImages 接受兩個參數:

  • 品質 (必填):1 至 100 之間的整數。數值 100 表示保留原始影像品質,不進行任何壓縮。 數值介於 40 至 80 之間可涵蓋多數實際應用情境,其中 60 通常是通用文件的一般起始點。
  • 調整至可見大小(可選):一個布林值,預設值為 False。 當 True 時,每張圖片都會重新取樣,以符合其在頁面上的渲染尺寸。 這在高品質壓縮的基礎上增加了第二輪壓縮處理,從而產生更小的檔案。 請注意,若後續將頁面放大或以較高 DPI 列印,可能會出現畫質瑕疵。

儲存後,請使用任何 PDF 檢視器將壓縮檔與原始檔進行比對,以確認翻譯品質符合您的要求。 如需更多範例,請參閱 PDF 壓縮範例頁面。

壓縮前的 PDF 檔案長什麼樣子?

在 Microsoft Edge 瀏覽器中開啟的 PDF 檔案,顯示檔案大小為 458 KB(尚未套用 IronPDF Python 壓縮)

壓縮後的 PDF 檔案會呈現什麼樣貌?

Windows 檔案總管中顯示的壓縮 PDF 檔案條目,檔案大小為 357 KB,相較於使用 IronPDF CompressImages 並設定 60% 品質時 458 KB 的原始大小,壓縮率達 22%

比較結果顯示,使用品質等級 60 時,檔案大小從 458 KB 減少至 357 KB(約 22%)。相較於以文字或向量圖形為主的檔案,照片內容比例較高的檔案通常能實現更大的壓縮效果。

如何對多個 PDF 檔案進行批次壓縮?

處理一整夾子的 PDF 檔案時,請遵循相同的 API:遍歷每個 .pdf 檔案,使用 PdfDocument 載入檔案,呼叫 CompressImages,並儲存結果。 以下函式將該模式封裝成可重複使用的實用工具。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/batch-compress.py
import os
from ironpdf import PdfDocument

def batch_compress_pdfs(input_folder, output_folder, quality=60):
    """
    Compress all PDF files in a folder.

    Args:
        input_folder: Path to folder containing source PDFs
        output_folder: Path where compressed PDFs will be saved
        quality: Compression quality (1–100); default is 60
    """
    # Create the output folder if it does not exist
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, f"compressed_{filename}")

            try:
                pdf = PdfDocument(input_path)
                pdf.CompressImages(quality)
                pdf.SaveAs(output_path)
                print(f"Compressed: {filename}")
            except Exception as e:
                print(f"Error compressing {filename}: {e}")
// 此程式碼片段無法顯示!
import os
from ironpdf import PdfDocument

def batch_compress_pdfs(input_folder, output_folder, quality=60):
    """
    Compress all PDF files in a folder.

    Args:
        input_folder: Path to folder containing source PDFs
        output_folder: Path where compressed PDFs will be saved
        quality: Compression quality (1–100); default is 60
    """
    # Create the output folder if it does not exist
    os.makedirs(output_folder, exist_ok=True)

    for filename in os.listdir(input_folder):
        if filename.endswith(".pdf"):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, f"compressed_{filename}")

            try:
                pdf = PdfDocument(input_path)
                pdf.CompressImages(quality)
                pdf.SaveAs(output_path)
                print(f"Compressed: {filename}")
            except Exception as e:
                print(f"Error compressing {filename}: {e}")
PYTHON

except 區塊可防止單一損壞或受密碼保護的檔案導致整個批次處理中斷。 在例外訊息中一併記錄檔案名稱,有助於更輕鬆地辨識哪些檔案需要人工審查。 對於處理量較大的工作流程,建議將資料夾分割成多個區塊,並透過並行執行緒進行處理。

提示對於同時包含照片與技術圖表的文件,請執行兩次處理:照片部分設定品質為 50,圖表較多的頁面則設定品質為 85。 使用"合併 PDF"API 進行提取與重新合併,以確保各區段維持最佳品質水準。

PDF 壓縮應採用哪些品質設定?

合適的品質設定取決於壓縮後的 PDF 將如何使用。 以下三個範疇涵蓋了最常見的使用情境。

高品質 (70–90):若文件將用於列印或正式發行,建議維持在此分數範圍內。 在標準列印解析度下,文字應保持清晰,圖表亦應清晰可辨。 檔案大小的壓縮幅度適中,通常為 10–25%,但對多數讀者而言,輸出內容與原始檔案幾乎無法區分。

中等品質 (50–70):此品質範圍適用於網頁發布及電子郵件附件。 仔細檢視照片內容時,會發現畫質略有柔化,但檔案大小的縮減(通常為 25–50%)能顯著提升載入速度與電子郵件送達率。 大多數文件管理系統和入口網站上傳功能在品質等級 60 時運作良好。

強力壓縮 (30–50):內部檔案庫、長期儲存備份,以及不會列印的文件皆可採用此壓縮範圍。 在品質等級 40 時,圖片明顯較為柔和,但由 PDF 引擎渲染的文字(而非以圖片形式嵌入)仍保持完全清晰。此方法也適用於在顯示前需轉換為圖片並調整尺寸的文件。

重要事項請務必保留原始未壓縮檔案的存取權限。 圖片壓縮屬於有損壓縮; (無法從壓縮後的 PDF/A 中恢復原始圖像資料。)}]

如何在 Python 中驗證壓縮結果?

透過程式化方式檢查輸出檔案大小,可確認壓縮效果已達到目標,再將檔案移至處理流程的下一階段。Python 的內建函式 os.path.getsize 可回傳任何檔案路徑的位元組數,因此驗證過程無需額外套件。

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/verify-compression.py
import os
from ironpdf import PdfDocument

# Load and compress the document
pdf = PdfDocument("report.pdf")
original_size = os.path.getsize("report.pdf")

pdf.CompressImages(60)
pdf.SaveAs("report_compressed.pdf")

compressed_size = os.path.getsize("report_compressed.pdf")
reduction_pct = (1 - compressed_size / original_size) * 100

# Report results to confirm compression was effective
print(f"Original:   {original_size / 1024:.1f} KB")
print(f"Compressed: {compressed_size / 1024:.1f} KB")
print(f"Reduction:  {reduction_pct:.1f}%")
// 此程式碼片段無法顯示!
import os
from ironpdf import PdfDocument

# Load and compress the document
pdf = PdfDocument("report.pdf")
original_size = os.path.getsize("report.pdf")

pdf.CompressImages(60)
pdf.SaveAs("report_compressed.pdf")

compressed_size = os.path.getsize("report_compressed.pdf")
reduction_pct = (1 - compressed_size / original_size) * 100

# Report results to confirm compression was effective
print(f"Original:   {original_size / 1024:.1f} KB")
print(f"Compressed: {compressed_size / 1024:.1f} KB")
print(f"Reduction:  {reduction_pct:.1f}%")
PYTHON

輸出結果會提供明確的減少百分比,該數值可供記錄或與閾值進行比對。 若縮減幅度低於預期,文件中可能僅含少量或完全沒有嵌入式圖片。 在這種情況下,無論品質設定為何,檔案大小都將大致保持不變,因為 CompressImages 僅針對點陣圖像。 文字與向量圖形不受此方法影響。

請注意IronPDF 的壓縮功能針對 PDF 中的點陣圖像採用 JPEG 編碼。 JPEG 壓縮標準定義了品質參數所控制的"品質與大小"權衡關係。 數值越低,JPEG 量化程度越高,既能減小檔案大小,也會降低影像細節。}}

Python 中的 PDF 壓縮下一步該怎麼做?

IronPDF 的 CompressImages 方法為 Python 開發人員提供了一個單一且範圍明確的 API,用於縮小 PDF 檔案大小。 調整品質參數以在儲存空間節省與視覺保真度之間取得平衡,並在輸出尺寸固定時,加入解析度縮放布林值以進行第二次壓縮處理。 如需更全面了解 IronPDF 的功能,請參閱 Python PDF 函式庫概覽頁面。

立即開始免費試用,體驗 IronPDF 的完整功能集,包括 HTML 轉 PDF、數位簽章、表單處理及文件合併,同時測試壓縮功能。 試用期結束後,請查看授權選項,以尋找適合您部署需求的方案。

準備好探索 IronPDF 的更多功能了嗎? 請參閱完整的 Python PDF 教學指南,深入了解 IronPDF 的核心功能。

常見問題

如何在 Python 中安裝 IronPDF 來壓縮 PDF 檔案?

請在終端機中執行 pip install ironpdf。IronPDF for Python 需先安裝 .NET 6.0 SDK。安裝完成後,從 ironpdf 套件導入 PdfDocument 即可開始壓縮 PDF 檔案。

在 Python 中壓縮 PDF 檔案的基本程式碼是什麼?

使用 PdfDocument("your-file.pdf") 載入檔案,呼叫 CompressImages(60) 並指定 1 至 100 之間的品質整數,最後透過 SaveAs("compressed.pdf") 儲存結果。請調整品質數值,以在檔案大小與影像保真度之間取得平衡。

品質參數如何影響 PDF 壓縮效果?

CompressImages 的品質參數範圍為 1 至 100。數值越低,產生的檔案越小,但影像模糊現象越明顯;數值越高,能保留更多細節,但檔案大小會隨之增加。40 至 80 之間的數值涵蓋了大多數實際應用情境,其中 60 通常是常見的起始點。

我可以向 CompressImages 傳遞第二個參數嗎?

是的。將 True 作為第二個參數傳入,會指示 IronPDF 在套用品質壓縮前,先將每張圖片重新取樣至其在頁面上的可見尺寸。此舉會增加第二輪壓縮處理,並產生更小的檔案,但若事後將頁面放大或以較高 DPI 列印,可能會出現壓縮失真現象。

PDF 壓縮會影響文字和向量圖形嗎?

CompressImages 針對 PDF 中嵌入的點陣圖像進行壓縮。PDF 引擎渲染的文字及向量圖形不受此方法影響,因此若文件中嵌入的圖像極少或完全沒有,檔案大小的減小幅度將微乎其微。

如何在 Python 中驗證檔案大小的減少?

使用 os.path.getsize("compressed.pdf") 取得儲存檔案的位元組數,並與原始檔案進行比較。將差異值除以原始檔案大小,即可得到以浮點數表示的壓縮百分比。

哪種品質等級最適合用於網頁發布?

品質設定在 50 至 70 之間,適用於大多數網頁發布和電子郵件情境。此範圍通常可將檔案大小減少 25% 至 50%,同時確保照片內容在螢幕上閱讀時視覺效果尚可。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎?
執行範例 觀看您的 HTML 轉為 PDF。