【发布时间】:2021-06-07 07:24:26
【问题描述】:
我正在使用 python 库 PyPDF2 和 reportlab 将文本字段添加到现有 PDF 中。
我目前正在使用该功能
def makeTextFields():
packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=landscape(letter))
can.acroForm.textfield(name='fname', tooltip='First Name',
x=500, y=20, borderStyle='inset',
borderColor=blue, fillColor=blue,
width=79, height=24,
textColor=black, forceBorder=False, annotationFlags ="")
can.showPage()
can.save()
packet.seek(0)
text_fields = PdfFileReader(packet)
return text_fields
使用文本字段创建 PDF,然后加载基本 pdf,合并并保存
main = PdfFileReader(open("master.pdf", 'rb'))
text_fields = makeTextFields()
output = PdfFileWriter()
text_field_page = text_fields.getPage(0)
page = main.getPage(0)
page.mergePage(text_field_page)
output.addPage(text_field_page)
stream = open("dest.pdf", "wb")
output.write(stream)
stream.close()
此解决方案可以正常工作,但是 master.pdf 的旋转为 90 这意味着当调用 page.mergePage 时,文本字段 pdf 会自动旋转 90 度以匹配基本 pdf,并将文本字段保留 90 度侧面文字
我的尝试
我尝试用page.mergeRotatedTranslatedPage 替换page.mergePage 不走运,我还尝试设置annotationFlags ="norotate",根据reportlab 文档应该允许文本字段忽略画布旋转,但这不起作用。最后我尝试了
can.saveState()
can.rotate(90)
can.acroForm.textfield(name='fname', tooltip='First Name',
x=500, y=20, borderStyle='inset',
borderColor=blue, fillColor=blue,
width=79, height=24,
textColor=black, forceBorder=False, annotationFlags ="")
can.restoreState()
希望将文本字段旋转 90 度偏移页面,这样当页面旋转到 90 时它将为 0,但这似乎没有影响
我相信解决方案将在于找到一种方法来取消文本字段的旋转, 对文本字段应用初始旋转,或在不匹配旋转的情况下合并两个 pdf。但是,任何其他解决方案/库都可以使用。
我也愿意在另一个程序中创建 pdf 并使用 python 合并它们。或者如果 python 不是该工作的最佳语言,则使用不同的语言
【问题讨论】:
标签: python-3.x pdf reportlab pypdf2