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

问题描述 投票:0回答:1

我正在将数据写入具有命名字段的 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)
python pypdf
1个回答
0
投票

这是一个老问题,但由于我在网上没有找到太多关于它的信息,所以我会分享我找到的内容。

我能够使用

/DA
标志进行字体更改,使用 pdf 文档中的字符串格式:

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
.

© www.soinside.com 2019 - 2024. All rights reserved.