我正在将数据写入具有命名字段的 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)
这是一个老问题,但由于我在网上没有找到太多关于它的信息,所以我会分享我找到的内容。
我能够使用
/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
.