ReportLab和pdfrw:导入扫描的PDF

5
使用以下代码,我试图将一个pdf页面导入到现有的画布对象中并保存为PDF。这通常工作得很好,但是我注意到当我尝试使用从扫描文档生成的PDF时,它会导致空白页面。是否有人能帮忙解决?
from reportlab.pdfgen import canvas
from pdfrw import PdfReader
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

c = canvas.Canvas(Out_Folder+pdf_file_name)
c.setPageSize([11*inch, 8.5*inch])

page = PdfReader(folder+'2_VisionMissionValues.pdf',decompress=False).pages
p = pagexobj(page[0])
c.setPageSize([11*inch, 8.5*inch]) #Set page size (for landscape)
c.doForm(makerl(c, p))
c.showPage()
c.save()

提前感谢您!


两个问题:1)您是否使用0.3版本或已从GitHub安装了最新版本?2)您能否发送给我一个无法工作的PDF文件? - Patrick Maupin
我正在使用3.4.0版本。我可以直接发送PDF文件吗?不确定如何通过操作系统进行发送。 - Dance Party
我的意思是pdfrw版本,而不是Python版本。至于发送样本,我的电子邮件地址在github上可用... - Patrick Maupin
哦,抱歉,那是ReportLab版本。我正在使用pdfrw 0.3。我会很快发送PDF文件。 - Dance Party
1个回答

8

所以...

一方面,我完全不知道为什么会发生这种情况,也没有太多时间来调试它。

另一方面,我有一个解决方法(我在v0.3和当前的github主分支上都尝试了这个方法,并且在两种情况下都成功了)。

我首先验证了你的代码在你的页面上失败了,并且它在另一个PDF上运行良好。然后我问自己,“如果我使用我的水印示例在你的页面上创建一个PDF,会发生什么情况?”(因为它使用了一些相同的形式XObject代码)。那样可行,然后我问自己,“如果我通过你的reportlab代码传递我的带水印的页面会是什么样子?”

有趣的是,整个带水印的页面,包括你的图像,都被保留下来了。所以我修改了你的代码,只做最小化的水印处理,当它被传递给reportlab时会把一个form XObject放到另一个form XObject里。这个方法可行。

以下是我用于此的略微修改过的版本。

import sys

from reportlab.pdfgen import canvas
from pdfrw import PdfReader, PageMerge
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

inch = 72

fname, = sys.argv[1:]
page = PdfReader(fname,decompress=False).pages[0]
p = pagexobj(PageMerge().add(page).render())

c = canvas.Canvas('outstuff.pdf')
c.setPageSize([8.5*inch, 11.0*inch]) #Set page size (for portrait)
c.doForm(makerl(c, p))
c.showPage()
c.save()

你救了我的一天,这个问题已经困扰我很长时间了! - mortbauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接