如何使用Python壓縮PDF文件

如何在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
PYTHON

PDF文件被廣泛用於文件儲存和共享,但它們的文件大小可能會變得非常大。 上傳或發送一個10 MB的報告明顯比分享一個2 MB的報告更慢,並且當文件數量大時,儲存成本會累積。 PDF壓縮通過在保持內容可讀性的同時減小文件大小來解決這一問題。

本指南將介紹如何使用IronPDF在Python中壓縮PDF文件。 實際程式碼範例涵蓋了標準圖像壓縮和基於解析度的高級壓縮,因此您可以選擇適合管道的方式。無論是進行HTML到PDF的轉換還是已有文件,均用同一壓縮API。

什麼是IronPDF以及為什麼用它來進行PDF壓縮?

IronPDF是一個Python PDF程式庫,處理PDF文件的建立、閱讀、編輯和優化。 它可處理從頭生成的文件、從HTML轉換的文件或從磁碟載入的文件。 其壓縮API針對圖片,圖片是造成PDF文件體積大的主要原因。

CompressImages方法接受一個從1到100的整數質量值,以及一個可選的布林值,可以將圖片縮小到其可見解析度。 這種雙參數設計讓您能夠精確調整壓縮:例如,高流量的報告儀表板可能使用質量70以保持圖像清晰,而內部檔案系統可能使用質量40以最大限度地節省儲存空間。 該程式庫內部處理所有編碼,無需其他依賴項。

IronPDF是Iron Suite的一部分,涵蓋文件建立、條碼處理、OCR和ZIP壓縮存檔,統一於Python安裝。 對於已使用IronPDF進行從零建立PDF的開發者而言,壓縮是保存或分發文件前的自然后續步驟。

如何在Python中安裝IronPDF?

:path=/static-assets/ironpdf-python/content-code-examples/how-to/python-compress-pdf/install.sh
:ProductInstall
:ProductInstall

:ProductInstall
SHELL

請注意IronPDF for Python基於IronPDF .NET程式庫運行,它需要.NET 6.0 SDK。 在運行pip install前,請從Microsoft官網下載.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")
PYTHON

壓縮參數意味著什麼?

CompressImages接受兩個參數:

  • 質量(必需):1到100之間的一個整數。值為100指保留原始圖像質量,不進行壓縮。 40到80之間的值涵蓋大多數實際使用場景,60是面向通用文件的一個常見起始點。
  • 縮放到可見尺寸(可選):布林值,預設為False。 當True時,每張圖像會重新採樣以匹配其在頁面上呈現的尺寸。 這在質量壓縮基礎上增加了一個第二次的縮小過程,產生更小的文件大小。 注意,隨後用於高DPI縮放或列印的頁面可能會顯示出瑕疵。

保存後,將壓縮文件與原件在任何PDF查看器中比較,以確認質量是否符合您的要求。 欲了解更多模式範例,請參閱PDF壓縮範例頁面。

壓縮前PDF看起來怎樣?

PDF文件在Microsoft Edge瀏覽器中打開,顯示在應用IronPDF Python壓縮前文件大小為458 KB

壓縮後PDF顯示如何?

壓縮的PDF文件項在Windows資源管理器中顯示為357 KB,是從使用質量60的IronPDF CompressImages壓縮前的458 KB減少了22%

比較顯示,使用質量60從458 KB減少到357 KB(約22%)。含有相對較多攝影內容的文件通常比以文字或向量圖形為主的文件達到更大的壓縮效果。

Icon Quote related to 壓縮後PDF顯示如何?

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic related to 壓縮後PDF顯示如何?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to 壓縮後PDF顯示如何?

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle related to 壓縮後PDF顯示如何?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to 壓縮後PDF顯示如何?

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones related to 壓縮後PDF顯示如何?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何批量壓縮多個PDF文件?

處理包含PDF文件的文件夾遵循一樣的API:對每個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}")

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中恢復原圖像資料。)]}

如何在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}%")
PYTHON

輸出提供了明確的縮減百分比,可被記錄或與門檻比較。 如果縮減幅度低於預期,文件可能包含很少或沒有嵌入圖像。 此時,無論質量設置如何,文件大小幾乎保持不變,因為CompressImages僅針對光柵圖像。 文字和向量圖形不受此法影響。

請注意IronPDF的壓縮針對PDF中的光柵圖像使用JPEG編碼。 JPEG壓縮標準定義了質量與尺寸的平衡,由質量參數控制。 較低的數值應用更強效的JPEG量化,減少文件大小和圖像細節。

Python中PDF壓縮的下一步是什麼?

IronPDF的CompressImages方法為Python開發者提供了單一且範圍明確的API來減小PDF文件大小。 調整質量參數以平衡儲存節省與視覺清晰度,並為固定輸出尺寸時新增解析度縮放布林值進行第二次縮減。 要想全面了解IronPDF處理的內容,請查閱Python PDF程式庫概述頁面。

開始您的免費試用以測試壓縮及IronPDF的全功能集,包括HTML到PDF的轉換、數位簽名、表單處理和文件合併。 試用期結束後,查看授權選項以尋找適合您的部署方案。

準備好瞭解IronPDF能做的其他事情嗎? 探索完整的Python PDF教學,了解IronPDF的核心功能。

常見問題

如何安裝IronPDF以壓縮Python中的PDF文件?

在終端中運行pip install ironpdf。Python的IronPDF需要先安裝.NET 6.0 SDK。安裝後從ironpdf包中導入PdfDocument以開始壓縮PDF。

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

使用PdfDocument("your-file.pdf")載入文件,以1到100之間的質量整數值調用CompressImages(60),並使用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大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
版本: 2026.6 剛剛發布
Still Scrolling Icon

還在滾動嗎?

希望快速證明嗎?
運行範例 看您的HTML轉化成PDF。