使用PDF注释更改字体类型/大小

6
我正在使用命名字段将数据写入PDF,然后更改这些字段的属性以使其只读。虽然如此,我也想能够操纵文本,更改字体大小,甚至是字体本身。
根据PDF文档,/DA应该控制文本,因此我尝试设置:
NameObject('/DA'): TextStringObject("font: bold italic Courier 80pt;")
然而,这并没有操纵文本。
下面是用于添加数据和操纵字段的代码,它完美地工作,除了设置字体之外。
我还尝试使用/DS标志来设置字体,但也没有任何影响。
        pdf_reader = PdfFileReader(
            open(full_certificate_path, "rb"), strict=False
        )
        pdf_writer = PdfFileWriter()

        data_dict = {
            'field1': event.title,
            'field2': user.name,
            'field3': strfdelta(
                completion_time,
                "{hours}:{minutes}:{seconds}"
            ),
        }

        pdf_writer.addPage(
            pdf_reader.getPage(0)
        )

        try:
            # Add data to a page
            page = pdf_writer.getPage(0)
            pdf_writer.updatePageFormFieldValues(page, data_dict)

            for j in range(0, len(page['/Annots'])):
                writer_annot = page['/Annots'][j].getObject()
                writer_annot.update({
                    # Q: Text justification
                    # 0: left
                    # 1: centre
                    # 2: right
                    NameObject("/Q"): NumberObject(1),
                    # Default: '/DA' /Helv 12 Tf 0 g
                    NameObject('/DA'): TextStringObject(
                        "font: bold italic Courier 80pt;"
                    ),
                    # Ff: Set field flags
                    # 1: ReadOnly
                    NameObject("/Ff"): NumberObject(1),
                })
        except KeyError:
            print("No annotations/fields in the doc")

        output_stream = StringIO()
        pdf_writer.write(output_stream)

1
你把东西搞混了。/DA 是用于 默认注释 的:https://stackoverflow.com/questions/24205137/adding-freetext-annotation-to-pdf/24245413#24245413。你使用的语法是 /DS:https://stackoverflow.com/questions/48828710/pdftron-freetext-annotation-font - Jongware
@usr2564301 我也尝试过使用/DS,但除非我格式有误,否则它对输出没有影响。据说你只需要CSS类型的字体字符串,但我很难找到这种东西的工作示例。 - markwalker_
1个回答

3

这是一个旧问题,但我在网上没有找到太多相关信息,所以我会分享我找到的东西。

我能够通过使用pdf文档中找到的字符串格式,并使用/DA标志来使字体变化生效:

for j in range(0, len(page["/Annots"])):
   writer_annot = page["/Annots"][j].getObject()
   for field in dict:
      if writer_annot.get("/T") == field:
         writer_annot.update({
            NameObject('/DA'): TextStringObject("0 0 0 rg /Ti 8 Tf"), 
         })

我测试过的字体只有:/Ti/Helv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接