如何在Python中创建PDF文件

时间:2010-02-12 15:12:45

标签: python pdf

我正在开发一个项目,该项目从用户那里获取一些图像,然后创建一个包含所有这些图像的PDF文件。

有没有办法或任何工具在Python中执行此操作?例如。从image1 + image 2 + image 3 - >创建PDF文件(或eps,ps) PDF文件?

14 个答案:

答案 0 :(得分:143)

以下是按照此页面提示后的经验。

  1. pyPDF无法将图像嵌入到文件中。它只能拆分和合并。 (来源:Ctrl + F到它的documentation page) 这很好,但如果你的图像还没有嵌入PDF中,那就没有了。

  2. pyPDF2似乎没有任何额外的文档在pyPDF之上。

  3. ReportLab非常广泛。 (Userguide)然而,有了一点Ctrl + F并且通过它的源代码,我得到了这个:

    • 首先,download the Windows installersource
    • 然后在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()
      
  4. 我所需要的只是将一堆图像打印成PDF,以便我可以检查它们的外观和打印方式。以上就足以实现这一目标。

    ReportLab非常棒,但是在其文档中突出显示上述helloworlds会受益匪浅。

答案 1 :(得分:39)

我建议pyPdf。它的效果非常好。我前段时间也写了一篇博文,你可以找到它here

答案 2 :(得分:28)

我建议Pdfkit。 (安装guide

它从html文件创建pdf。我选择它从我的Python Pyramid堆栈中分2步创建pdf:

  1. 使用您想要的样式和标记为mako模板呈现服务器端pdf文档
  2. 通过将呈现的html作为参数
  3. 传递来执行pdfkit.from_string(...)方法

    通过这种方式,您可以获得支持样式和图像的pdf文档。

    您可以按如下方式安装:

    • 使用pip

      pip install pdfkit

    • 您还需要安装wkhtmltopdf(on Ubuntu)。

答案 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。