在 python 中合并旋转的 pdf 和非旋转的 pdf
merging rotated pdf with non rotated pdf in python
我正在使用 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 文档应该允许文本字段忽略 canvas 旋转,但这没有用。最后我试过了
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 不是工作的最佳语言
,则使用不同的语言
试试这个
text_field_page.mergeRotatedTranslatedPage(页数,-90,页数。mediaBox.getWidth()/ 2,页数。mediaBox.getWidth()/ 2)
我正在使用 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 文档应该允许文本字段忽略 canvas 旋转,但这没有用。最后我试过了
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 不是工作的最佳语言
,则使用不同的语言试试这个
text_field_page.mergeRotatedTranslatedPage(页数,-90,页数。mediaBox.getWidth()/ 2,页数。mediaBox.getWidth()/ 2)