You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python合并PDF时如何合并重复字体以减小文件体积?

解决PDF合并后字体重复导致体积暴涨的问题

问题原因

你用pypdf合并450个PDF时,每个源文件里的字体哪怕是同一款,都会被单独嵌入到最终PDF中,pypdf默认不会自动去重合并重复的字体资源,这就导致字体数量暴增到613个,占了95%的文件体积。而Acrobat打印生成PDF时,会重新梳理文档资源,自动合并重复字体、子集化字体甚至转成轮廓,所以体积会大幅缩小。

解决方案

方案1:改用PyMuPDF(fitz)合并(推荐)

PyMuPDF在合并PDF时会自动优化资源,包括合并重复字体,同时支持压缩,能直接解决体积问题:

import fitz

def merge_pdfs(pdf_paths, output_file):
    # 创建空的合并文档
    merged_doc = fitz.open()
    for pdf_path in pdf_paths:
        # 逐个打开源PDF并插入到合并文档中
        with fitz.open(pdf_path) as source_doc:
            merged_doc.insert_pdf(source_doc)
    # 保存时启用垃圾清理和压缩:garbage=4清理所有无用资源,deflate=True压缩流
    merged_doc.save(output_file, garbage=4, deflate=True)
    merged_doc.close()

方案2:优化pypdf的合并逻辑

如果坚持使用pypdf,可以通过启用压缩和资源优化来尝试减少体积(效果可能弱于PyMuPDF):

import pypdf
from pypdf import PdfReader

def merge(folder_path, pdf_paths, output_file):
    merger = pypdf.PdfWriter()
    # 启用默认压缩模式
    merger.set_compression_mode(pypdf.CompressionMode.DEFAULT)

    for pdf_path in pdf_paths:
        reader = PdfReader(open(pdf_path, 'rb'))
        # 追加文档,关闭大纲导入以减少额外资源
        merger.append(reader, import_outline=False)

    # 优化文档,合并重复的资源对象(包括字体)
    merger.optimize()
    merger.write(output_file)
    merger.close()

方案3:合并后用Ghostscript优化(需安装Ghostscript)

如果允许使用外部工具,Ghostscript是处理PDF体积的专业工具,能达到和Acrobat打印类似的效果:

# 命令行执行,merged.pdf是合并后的大文件,optimized.pdf是优化后的小文件
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -sOutputFile=optimized.pdf merged.pdf

/screen参数针对屏幕显示优化,会压缩图像、合并重复字体,视觉效果满足需求,体积大幅降低。

内容的提问来源于stack exchange,提问作者Ryan Schunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:03:23