我想使用 PyPDF2 获取扫描 PDF 文档的每一页,
创建打印/添加条形码所需的边距。
我尝试了一些使用
mergeScaledTranslatedPage
的方法,但当我在 Adobe Acrobat DC 中打开文件时,我总是收到错误消息。
即使输出看起来成功,我在打开文件时收到以下错误:
此页面存在错误。 Acrobat 可能无法正确显示页面。请联系创建 PDF 文档的人员来纠正问题。
我怎样才能让它发挥作用?
我是
pypdf
和 PyPDF2
的维护者。请使用pypdf
。
from pypdf import PdfReader, PdfWriter, Transformation
from pypdf.generic import RectangleObject
reader = PdfReader("GeoTopo.pdf")
writer = PdfWriter()
desired_width = 100
desired_height = 100
r = RectangleObject([0, 0, desired_width, desired_height])
for page in reader.pages[:10]:
old_width = page.mediabox.width
old_height = page.mediabox.height
a1 = desired_width / old_width
a2 = desired_height / old_height
factor = min(a1, a2)
new_width = float(old_width * factor)
new_height = float(old_height * factor)
dx = (desired_width - new_width) / 2
dy = (desired_height - new_height) / 2
op = Transformation().translate(tx=dx, ty=dy)
page.scale_to(width=new_width, height=new_height)
page.add_transformation(op)
page.mediabox = r
page.artbox = r
page.cropbox = r
page.bleedbox = r
page.trimbox = r
writer.add_page(page)
with open("foo.pdf", "wb") as fp:
writer.write(fp)
``
这个问题我困扰了很长时间。 Chrome 可以毫无问题地打开 pdf,但 acrobat reader 有问题。
from PyPDF2 import PdfWriter, PdfReader, PageObject,Transformation
insert_pdf = PdfReader(insert_object_file)
insert_pdf_page = insert_pdf.pages[page_number-from_page]
我遇到的第一个问题是我在翻译时使用了浮动。以下解决了该问题:
pdf_page.add_transformation(Transformation().translate(tx=int(tx_final), ty=int(ty_final))
第二个问题是关于规模。当按数字 < 1, it works, when scaling with number > 1 缩放时,出现错误“此页面存在错误。Acrobat 可能无法正确显示页面。请联系创建 PDF 文档的人员来更正问题”
所以我最终使用的解决方案是:
如果系数 > 1:
insert_pdf_page.add_transformation(Transformation().rotate(rotation).scale(sx=int(round(coef,2)*100),sy=int(round(coef,2)*100)).translate(tx=int(tx_final), ty=int(ty_final)))
insert_pdf_page.add_transformation(Transformation().scale(sx=0.01,sy=0.01))
else:
insert_pdf_page.add_transformation(Transformation().rotate(rotation).scale(sx=round(coef,6),sy=round(coef,6)).translate(tx=int(tx_final), ty=int(ty_final))