pdfrw复选框AS值获取不必要的括号

时间:2019-02-05 01:33:50

标签: python pdf pdfrw

因此,我尝试使用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获得正确的值。

3 个答案:

答案 0 :(得分:2)

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

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

未经测试。

答案 1 :(得分:0)

annotation.update(pdfrw.PdfDict(V=pdfrw.PdfName('On')))

以上为我工作。

答案 2 :(得分:0)

template.Root.Pages.Kids[0].Annots[0].update(PdfDict(AS=PdfName('On'), V=PdfName('On')))