我正在使用命名字段将数据写入PDF,然后更改这些字段的属性以使其只读。虽然如此,我也想能够操纵文本,更改字体大小,甚至是字体本身。
根据PDF文档,/DA应该控制文本,因此我尝试设置:
NameObject('/DA'): TextStringObject("font: bold italic Courier 80pt;")
然而,这并没有操纵文本。
下面是用于添加数据和操纵字段的代码,它完美地工作,除了设置字体之外。
我还尝试使用/DS标志来设置字体,但也没有任何影响。
根据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
是用于 默认注释 的:https://stackoverflow.com/questions/24205137/adding-freetext-annotation-to-pdf/24245413#24245413。你使用的语法是/DS
:https://stackoverflow.com/questions/48828710/pdftron-freetext-annotation-font - Jongware/DS
,但除非我格式有误,否则它对输出没有影响。据说你只需要CSS类型的字体字符串,但我很难找到这种东西的工作示例。 - markwalker_