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

如何使用Python移除PDF文本层且不丢失图像内的文字像素

基于PyMuPDF(fitz)的PDF转扫描件效果实现方案

实现思路

直接将PDF每一页全页渲染为光栅图像,再将所有图像重新拼接为新PDF。该方案完全删除原文本层、矢量元素,最终输出仅包含图像内容,不存在任何可选中复制的文本,也不会出现Ghostscript误删文字像素的问题。

依赖安装

pip install pymupdf

实现代码

import fitz

def pdf_to_image_only(input_path: str, output_path: str, dpi: int = 200) -> None:
    # 打开原PDF
    doc = fitz.open(input_path)
    # 新建空PDF用于存储渲染后的页面
    new_doc = fitz.open()
    # 缩放系数:72是PDF默认DPI,计算对应缩放比
    zoom = dpi / 72
    matrix = fitz.Matrix(zoom, zoom)

    for page in doc:
        # 渲染当前页为光栅图像,alpha设为False去掉透明通道,减小文件体积
        pix = page.get_pixmap(matrix=matrix, alpha=False)
        # 新建和渲染图像尺寸一致的空白页
        new_page = new_doc.new_page(width=pix.width, height=pix.height)
        # 将渲染后的图像插入新页
        new_page.insert_image(new_page.rect, pixmap=pix)
    
    # 保存输出,自动清理冗余数据+压缩,减小文件体积
    new_doc.save(output_path, garbage=4, deflate=True)
    new_doc.close()
    doc.close()

# 调用示例
if __name__ == "__main__":
    pdf_to_image_only("input.pdf", "output_scan_like.pdf", dpi=200)

方案说明

  • 可通过调整dpi参数控制输出清晰度,常规办公场景150-200DPI足够,需要高精度可设为300DPI,DPI越高文件体积越大
  • 适配绝大多数无密码的常规PDF格式,处理速度远快于调用外部工具、逐页截图的方案

内容的提问来源于stack exchange,提问作者Demetry Pascal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:03