PyPdf2 与扫描的 PDF 合并产生“此页面上存在错误...”

问题描述 投票:0回答:2

我想使用 PyPDF2 获取扫描 PDF 文档的每一页,

  • 将页面缩放至原始尺寸的 85%
  • 并将页面居中放置在空白的 8.5 x 11 页上
  • 页数相同

创建打印/添加条形码所需的边距。

我尝试了一些使用

mergeScaledTranslatedPage
的方法,但当我在 Adobe Acrobat DC 中打开文件时,我总是收到错误消息。

即使输出看起来成功,我在打开文件时收到以下错误:

此页面存在错误。 Acrobat 可能无法正确显示页面。请联系创建 PDF 文档的人员来纠正问题。

我怎样才能让它发挥作用?

pypdf
2个回答
0
投票

我是

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)
``

0
投票

这个问题我困扰了很长时间。 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))
© www.soinside.com 2019 - 2024. All rights reserved.