我正在一个项目中,该项目从用户那里获取一些图像,然后创建一个包含所有这些图像的PDF文件。
有什么方法或工具可以在Python中做到这一点吗?例如要从image1 + image 2 + image 3-> PDF文件创建PDF文件(或eps,ps)?
[language or tag] some_keyword
如[python] PDF
或[python] PDF image
我正在一个项目中,该项目从用户那里获取一些图像,然后创建一个包含所有这些图像的PDF文件。
有什么方法或工具可以在Python中做到这一点吗?例如要从image1 + image 2 + image 3-> PDF文件创建PDF文件(或eps,ps)?
[language or tag] some_keyword
如[python] PDF
或[python] PDF image
Answers:
遵循此页面上的提示后,这是我的经验。
pyPDF无法将图像嵌入文件中。它只能拆分和合并。(来源:Ctrl + F通过其文档页面)这很好,但是如果您的图像尚未嵌入PDF中,则不行。
ReportLab非常广泛。(Userguide)但是,通过一点Ctrl + F并通过其源代码进行grepping,我得到了:
然后在Python命令行上尝试:
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm
c = canvas.Canvas('ex.pdf')
c.drawImage('ar.jpg', 0, 0, 10*cm, 10*cm)
c.showPage()
c.save()
我需要做的就是将一堆图像转换成PDF,以便检查它们的外观并进行打印。以上足以实现该目标。
ReportLab很棒,但可以从其文档中突出显示的helloworlds中受益。
您可以尝试使用这种方法(Python-for-PDF-Generation),也可以尝试使用PyQt,它支持打印到pdf。
用于生成PDF的Python
可移植文档格式(PDF)使您可以创建在每个平台上看起来完全相同的文档。但是,有时需要动态生成PDF文档,这可能是一个很大的挑战。幸运的是,有一些库可以提供帮助。本文研究了其中一种适用于Python的方法。
在http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99上了解更多信息。
这是仅适用于标准软件包的解决方案。matplotlib
有一个PDF后端,可以将图形保存为PDF。您可以创建带有子图的图形,其中每个子图都是您的图像之一。您完全可以随意摆弄图形:添加标题,按位置播放等。完成图形后,保存为PDF。每次调用savefig
都会创建另一页PDF。
下面的示例在第1页和第2页上并排绘制2张图像。
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
from scipy.misc import imread
import os
import numpy as np
files = [ "Column0_Line16.jpg", "Column0_Line47.jpg" ]
def plotImage(f):
folder = "C:/temp/"
im = imread(os.path.join(folder, f)).astype(np.float32) / 255
plt.imshow(im)
a = plt.gca()
a.get_xaxis().set_visible(False) # We don't need axis ticks
a.get_yaxis().set_visible(False)
pp = PdfPages("c:/temp/page1.pdf")
plt.subplot(121)
plotImage(files[0])
plt.subplot(122)
plotImage(files[1])
pp.savefig(plt.gcf()) # This generates page 1
pp.savefig(plt.gcf()) # This generates page 2
pp.close()
我在PyQt中做了很多,而且效果很好。Qt对图像,字体,样式等具有广泛的支持,所有这些都可以写到pdf文档中。
fpdf是python(也是)。并经常使用。请参阅PyPI /点子搜索。但也许将其从pyfpdf重命名为fpdf。来自功能:PNG,GIF和JPG支持(包括透明度和Alpha通道)
您实际上可以尝试xhtml2pdf http://flask.pocoo.org/snippets/68/
这取决于图像文件的格式,但是对于这里正在工作的项目,我使用了RemoteSensing.org的 LibTIFF中的tiff2pdf工具。基本上,只是使用了子进程来调用tiff2pdf.exe,并带有适当的参数来读取我拥有的tiff类型并输出我想要的pdf类型。如果它们不是tiff,则可以使用PIL将其转换为tiff,或者可以找到一种更适合于您的图像类型的工具(如果图像多种多样,则可以使用更通用的工具),例如上面提到的ReportLab。
fpdf对我来说效果很好。比ReportLab简单得多,而且真正免费。与UTF-8一起使用。
rinohtype支持(本地)嵌入PDF,PNG和JPEG图像以及其他位图格式(安装Pillow时)。
(全部披露:我是rinohtype的作者)
如果您熟悉LaTex,则可能要考虑使用pylatex
pylatex的优点之一是易于控制图像质量。pdf中的图像将具有与原始图像相同的质量。使用reportlab时,我感到图像被自动压缩,并且图像质量降低了。
pylatex的缺点在于,由于它基于LaTex,因此很难将图像准确地放置在页面上所需的位置。但是,我发现在Figure类中使用position参数,有时在Subfigure中使用,可以得到足够好的结果。
用于创建带有单个图像的pdf的示例代码:
from pylatex import Document, Figure
doc = Document(documentclass="article")
with doc.create(Figure(position='p')) as fig:
fig.add_image('Lenna.png')
doc.generate_pdf('test', compiler='latexmk', compiler_args=["-pdf", "-pdflatex=pdflatex"], clean_tex=True)
除了安装pylatex(pip install pylatex)外,您还需要安装LaTex。对于Ubuntu和其他Debian系统,您可以运行sudo apt-get install texlive-full
。如果您使用的是Windows,我建议您使用MixTex
py
;-)