ReportLab 和 pdfrw : Importing Scanned PDF

标签 reportlab pdf-reader pdfrw

使用下面的代码,我试图将 pdf 页面导入现有的 Canvas 对象并保存为 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()

提前致谢!

最佳答案

呜……

一方面,我完全不知道为什么会这样,而且
现在没有太多时间调试它。

另一方面,我有一个解决方法(我尝试了
v0.3 以及当前的 github master 上的解决方法,并且它
在这两种情况下都对我有用)。

我首先验证您的代码是否在您的页面上失败,并且
它适用于另一个PDF。然后我问自己“如果我使用
我的水印示例以您的页面作为水印创建PDF?”
(因为使用了一些相同形式的 XObject 代码)。那奏效了,
然后我问自己“如果我通过我的
通过您的 reportlab 代码添加水印页面?”

有趣的是,整个带水印的页面,包括您制作的图像
它通过。所以我修改了你的代码来做最少的事情
水印确实如此,最终将表单 XObject 放入表单中
XObject 当它传递给 reportlab 时。那奏效了。

这是我用于此的代码的稍微修改版本。

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

关于ReportLab 和 pdfrw : Importing Scanned PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43773477/

相关文章:

python - 您如何在 Geraldo Reports 中生成/创建表格?

ReportLab 图像绘制在 Canvas 上。Canvas

Python Reportlab PDF - 页面上的居中文本

android - 如何在android中读取本地Pdf、XlS、DOC文件

python - 报告实验室低性能

android - 从项目中的原始文件夹中读取 .pdf

java - 抛出 OutOfMemoryError 异常

python - ghostscript 或 python : how to combine pdf of different page sizes into a pdf of same page sizes?

Python - 如何使用 pdfrw 正确填充 PDF 表单中的多行文本字段?

python - 如何使用 PDFrw 从 PDF 中提取图像