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

如何用Python将含文本与条码的PDF设为不可选中(只读/扁平化)

解决HTML生成PDF的文本/图片不可选中问题

针对你用HTML生成PDF后,需要让文本和条码图片无法被选中的需求,之前的fillpdf、pypdftk没效果的话,可以试试下面几个实用方案:

方案1:全页面光栅化(最彻底)

把PDF的每一页转成图片,再重新封装成PDF,这样整个文档都是纯图片层,完全无法选中内容。用Python实现的话,结合pdf2image(依赖Poppler工具)和img2pdf效率最高:

from pdf2image import convert_from_path
import img2pdf
import os

# 把PDF转成图片列表,设置300DPI保证清晰度
pages = convert_from_path("input.pdf", dpi=300)
temp_img_paths = []

for idx, page in enumerate(pages):
    img_path = f"temp_page_{idx}.png"
    page.save(img_path, "PNG")
    temp_img_paths.append(img_path)

# 把图片合并成新PDF
with open("output_protected.pdf", "wb") as f:
    f.write(img2pdf.convert(temp_img_paths))

# 清理临时文件
for path in temp_img_paths:
    os.remove(path)

如果没有安装依赖,先执行:pip install pdf2image img2pdf,同时要确保系统里有Poppler(Windows可以下载预编译包,Linux直接装poppler-utils,Mac用brew装poppler)。

方案2:用Ghostscript一键光栅化

如果不想写代码,直接用Ghostscript命令行处理,这是业内常用的PDF处理工具,效果稳定:

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dPDFSETTINGS=/prepress -o output_protected.pdf input.pdf

这个命令会把原PDF的所有内容光栅化,生成的PDF里没有可选中的文本或图片,同时能保证较好的清晰度。

方案3:设置PDF权限(适合不需要彻底光栅化的场景)

如果只是想限制文本选择,而非完全转成图片,可以通过修改PDF的权限位实现。用PyPDF2就能做到:

from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("input.pdf")
writer = PdfWriter()

# 复制所有页面
for page in reader.pages:
    writer.add_page(page)

# 设置权限:禁止内容复制、禁止修改文档,允许打印和注释修改
# 权限位是二进制掩码,0b1111111111110010 对应上述权限
writer.encrypt(
    user_password="",  # 打开不需要密码
    owner_password="your_owner_password",  # 拥有者密码,用于修改权限
    permissions_flag=0b1111111111110010
)

with open("output_protected.pdf", "wb") as f:
    writer.write(f)

注意:这种权限限制依赖PDF阅读器的合规性,部分工具可以绕过,所以如果需要彻底禁止选中,优先选前两个光栅化方案。

内容的提问来源于stack exchange,提问作者Ajay Gidwani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:35:26