我正在开发一个项目,该项目从用户那里获取一些图像,然后创建一个包含所有这些图像的PDF文件。
有没有办法或任何工具在Python中执行此操作?例如。从image1 + image 2 + image 3 - >创建PDF文件(或eps,ps) PDF文件?
答案 0 :(得分:143)
以下是按照此页面提示后的经验。
pyPDF无法将图像嵌入到文件中。它只能拆分和合并。 (来源:Ctrl + F到它的documentation page) 这很好,但如果你的图像还没有嵌入PDF中,那就没有了。
pyPDF2似乎没有任何额外的文档在pyPDF之上。
ReportLab非常广泛。 (Userguide)然而,有了一点Ctrl + F并且通过它的源代码,我得到了这个:
然后在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会受益匪浅。
答案 1 :(得分:39)
答案 2 :(得分:28)
它从html文件创建pdf。我选择它从我的Python Pyramid堆栈中分2步创建pdf:
pdfkit.from_string(...)
方法
醇>
通过这种方式,您可以获得支持样式和图像的pdf文档。
您可以按如下方式安装:
使用pip
pip install pdfkit
答案 3 :(得分:15)
您可以尝试使用this(Python-for-PDF-Generation),也可以尝试PyQt,它支持打印到pdf。
用于PDF生成的Python
可移植文档格式(PDF)使您可以在每个平台上创建看起来完全相同的文档。有时,需要动态生成PDF文档,这可能是一个非常大的挑战。幸运的是,有些库可以提供帮助。本文将介绍Python的其中一个。
在http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
了解详情答案 4 :(得分:7)
我在PyQt中做了很多这样的事情并且效果非常好。 Qt对图像,字体,样式等有广泛的支持,所有这些都可以写成pdf文档。
答案 5 :(得分:6)
我相信matplotlib能够将图形,文本和其他对象序列化为pdf文档。
答案 6 :(得分:6)
我使用rst2pdf来创建pdf文件,因为我对RST比对HTML更熟悉。它支持嵌入几乎任何类型的光栅或矢量图像。
它需要reportlab,但我发现reportlab不是那么直接使用(至少对我而言)。
答案 7 :(得分:6)
fpdf也是python(也是)。并经常使用。请参阅PyPI / pip搜索。但也许它从pyfpdf重命名为fpdf。来自功能: PNG,GIF和JPG支持(包括透明度和alpha通道)
答案 8 :(得分:6)
这是一个仅适用于标准软件包的解决方案。 savefig
有一个PDF后端,用于将数字保存为PDF。您可以使用子图创建图形,其中每个子图是您的一个图像。你有充分的自由来搞乱这个数字:添加标题,玩位置等。完成你的数字后,保存为PDF。每次拨打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()
都会创建另一页PDF。
下面的示例并排绘制了2张图像,第1页和第2页。
SELECT SCOPE_IDENTITY()
答案 9 :(得分:3)
您实际上可以尝试xhtml2pdf http://flask.pocoo.org/snippets/68/
答案 10 :(得分:3)
rinohtype支持嵌入PDF,PNG和JPEG图像(本机)和其他位图格式(安装Pillow时)。
(完全披露:我是rinohtype的作者)
答案 11 :(得分:3)
如果您熟悉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
答案 12 :(得分:2)
这取决于您的图像文件的格式,但对于此处的项目,我使用了来自RemoteSensing.org的LibTIFF中的tiff2pdf工具。 基本上只是用subprocess来调用tiff2pdf.exe和相应的参数来读取我所拥有的tiff类型并输出我想要的那种pdf。如果它们不是tiff,你可能可以使用PIL将它们转换为tiff,或者可能找到一个更适合你的图像类型的工具(或者如果图像多样化则更通用),如上面提到的ReportLab。
答案 13 :(得分:1)
fpdf对我很有用。比ReportLab简单得多,真的免费。适用于UTF-8。