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

如何让PyPDF2添加的PDF注释可打印?

解决PyPDF2添加的注释无法打印的问题

你遇到的问题是因为PyPDF2默认创建的自由文本注释未启用可打印属性,需要手动设置注释的打印标志位来解决。

修改方案

PDF注释的/F(Flags)属性中,第2位(从0开始计数,对应数值4)控制注释是否可被打印。我们需要为生成的注释添加这个属性:

  1. 导入NumberObject(用于创建PDF标准数值对象)
  2. 在生成注释后,手动设置/F属性为4

修改后的完整代码

from PyPDF2 import PdfReader, PdfWriter
from PyPDF2.generic import AnnotationBuilder, NumberObject


reader = PdfReader("Example.pdf")
page = reader.pages[0]
writer = PdfWriter()
writer.add_page(page)


annotation = AnnotationBuilder.free_text(
    "Hello World",
    rect=(50, 550, 200, 650),
    font="Arial",
    bold=True,
    italic=True,
    font_size="20pt",
    font_color="00ff00",
    border_color="0000ff",
    background_color="cdcdcd",
)
# 设置注释可打印:Flags属性中第2位对应打印权限,数值为4
annotation.update({"/F": NumberObject(4)})

writer.add_annotation(page_number=0, annotation=annotation)


with open("annotated-pdf.pdf", "wb") as fp:
    writer.write(fp)

原理说明

PDF规范中,注释的Flags字段是一个整数,每个二进制位对应不同的行为:

  • 第0位(值1):注释是否锁定
  • 第1位(值2):注释是否隐藏
  • 第2位(值4):注释是否随文档打印
  • 第3位(值8):注释是否随文档缩放

设置/F为4,就是明确告诉PDF阅读器该注释需要被包含在打印内容中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:02:49