2017-05-04 97 views
1

使用下面的代码,我试图导入一个PDF页面到一个现有的画布对象并保存为PDF。这通常工作得很好,但我注意到,当我使用从扫描文档生成的PDF进行尝试时,结果为空白页。任何接受者?ReportLab和pdfrw:导入扫描的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() 

在此先感谢!

+0

两个问题:1)你使用0.3还是你安装了最新的github;和2)你能寄给我一个不起作用的PDF吗? –

+0

我使用的是3.4.0。我可以直接发送PDF吗?不知道如何通过S.O. –

+0

我的意思是pdfrw版本,而不是Python版本。至于发送样本,我的电子邮件地址是可用的github ... –

回答

1

的sooo ...

,一方面,我绝对不知道为什么发生这种情况,并 没有真正太多的时间,现在对其进行调试。另一方面,我有一个解决方法为你(我试过在v0.3上的 解决方法,以及当前的github主,并且它在这两种情况下为我工作)。

我开始时通过验证您的代码在您的页面上失败,并且 在另一个PDF上运行。然后我问自己:“如果我使用 我的水印示例创建PDF作为水印,页面会发生什么?” (因为它使用了一些相同的XObject代码)。那么, 那么我问自己:“如果我通过我的 带水印的页面通过你的reportlab代码,看起来是什么样子?”

有趣的是,整个水印页面,包括您的图片,通过 。所以我修改了你的代码来完成 水印所做的最小的事情,当XObject传递给reportlab时,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()