0

所以我试图用 pdfrw 标记 PDF 文件中的复选框。这意味着将复选框“AS”值从默认的“/Off”更改为“/Yes”。pdfrw 目前在写入文件时强制在我的“/是”周围加上括号,因此它不起作用。如何防止它添加这些括号?

我的代码:

template_pdf = pdfrw.PdfReader(input_pdf_path)
annotations = template_pdf.pages[0][/Annots]
for annotation in annotations:
    annotation.update(pdfrw.PdfDict(AS="/Yes"))
    pdfrw.PdfWriter().write(output_pdf_path, template_pdf)

我在 PDF 文件中的复选框是这样结束的,第三行中的第一个单词是重要的:

1661 0 obj
<</AP <</D <</Off 1845 0 R /Yes 1846 0 R>> /N <</Yes 1847 0 R>>>> /AS
    (/Yes) /F 4 /FT /Btn /MK <</CA (l)>> /P 1608 0 R /Rect
    [101.275 576.22 107.395 584.91] /Subtype /Widget /T (box1) /Type
    /Annot>>
endobj

但要使复选标记实际显示在大多数 PDF 查看器中,它需要是这样的:

1661 0 obj
<</AP <</D <</Off 1845 0 R /Yes 1846 0 R>> /N <</Yes 1847 0 R>>>> /AS
    /Yes /F 4 /FT /Btn /MK <</CA (l)>> /P 1608 0 R /Rect
    [101.275 576.22 107.395 584.91] /Subtype /Widget /T (box1) /Type
    /Annot>>
endobj

我总是可以在 python 中打开文件并将所有“(/Yes)”的实例替换为“/Yes”,但必须有一些方法可以使用 pdfrw 获得正确的值。

4

3 回答 3

3

我认为您可能需要使用PdfName('Yes')而不是"/Yes"

annotation.update(pdfrw.PdfDict(AS=pdfrw.PdfName('Yes')))

我没有测试这个。但它有效。

于 2019-02-05T03:28:14.107 回答
0
annotation.update(pdfrw.PdfDict(V=pdfrw.PdfName('On')))

以上对我有用。

于 2019-09-03T07:49:35.237 回答
0
template.Root.Pages.Kids[0].Annots[0].update(PdfDict(AS=PdfName('On'), V=PdfName('On')))
于 2019-11-08T08:03:30.690 回答