如何在 Python 中创建 PDF 文件

我正在从事一个项目,从用户获取一些图像,然后创建一个 PDF 文件,其中包含所有这些图像。

有没有什么方法或工具可以在 Python 中实现这一点?例如,从 image 1 + image 2 + image 3-> PDF 文件创建一个 PDF 文件?

440016 次浏览

您可以尝试 这个(Python-for-PDF-Generation)或者您可以尝试 派克特,它支持打印到 pdf。

Python for PDF Generation < br >
Portable Document Format (PDF)允许您创建在每个平台上看起来完全相同的文档。然而,有时候需要动态生成 PDF 文档,这可能是一个相当大的挑战。幸运的是,有一些库可以提供帮助。本文将为 Python 研究其中之一。

详情请浏览 http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99

我建议 pyPdf。真的很好用。不久前我也写了一篇博文,你可以找到它 给你

这取决于图像文件的格式,但是对于工作中的一个项目,我使用了来自 Remotesensing.org的 LibTIFF 中的 tiff2pdf 工具。 基本上只是使用子进程调用 tiff2pdf.exe 并使用适当的参数来读取我所拥有的 tiff 类型并输出我想要的 pdf 类型。如果它们不是 tiff,你可以使用 PIL 将它们转换成 tiff,或者可以找到一个更适合你的图像类型的工具(或者更通用的,如果图像将是多样化的) ,就像上面提到的 ReportLab。

我在 PyQt 中做了很多这样的工作,它工作得非常好。Qt 对图像、字体、样式等有广泛的支持,所有这些都可以写成 pdf 文档。

我相信 matplotlib 能够将图形、文本和其他对象序列化为 pdf 文档。

这里是我的经验后,按照这个页面上的提示。

  1. PyPDF 不能嵌入图片到文件中,它只能进行分割和合并。(来源: Ctrl + F 通过它的 文件页) 这很好,但是如果你有没有嵌入 PDF 的图片就不行了

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

  3. ReportLab 非常广泛。(用户指南)然而,通过使用一些 Ctrl + F 并抓取它的源代码,我得到了这个:

    • 首先是 下载 Windows Installer来源
    • 然后在 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()
      

All I needed is to get a bunch of images into a PDF, so that I can check how they look and print them. The above is sufficient to achieve that goal.

ReportLab is great, but would benefit from including helloworlds like the above prominently in its documentation.

Fpdf 对我来说很好用。比 ReportLab 简单得多,而且非常免费。可以使用 UTF-8。

我使用 Rst2pdf创建一个 pdf 文件,因为我对 RST 比对 HTML 更熟悉。它支持嵌入几乎任何类型的光栅或矢量图像。

它需要 报告实验室,但是我发现 reportlab 不是那么容易使用(至少对我来说)。

我建议 Pdfkit。(安装 向导)

它从 html 文件中创建 pdf 文件,我选择它来创建我的 Python 金字塔栈中的2个步骤中的 pdf 文件:

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

这样你就可以得到一个支持样式和图片的 pdf 文档。

你可以安装如下:

  • 使用 pip

    pip install pdfkit

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

Fpdf 也是 python。经常使用。请参见 PyPI/pip 搜索。但也许它被重新命名为 pfpdf。特写: 支持 PNG、 GIF 和 JPG (包括透明和 alpha 通道)

下面是一个只使用标准包的解决方案。matplotlib有一个 PDF 后端来保存数字到 PDF。您可以创建具有子情节的图形,其中每个子情节都是您的图像之一。你有充分的自由去摆弄这个图形: 添加标题,玩弄位置等等。一旦您的数字完成,保存到 PDF。每次调用 savefig将创建另一个 PDF 页面。

下面的例子图2图像并排,在第1页和第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()

你可以试试 xhtml2pdf http://flask.pocoo.org/snippets/68/

Rinohtype 支持嵌入 PDF、 PNG 和 JPEG 图像(本机)和其他位图格式(安装枕头时)。

(完整披露: 我是 rinohtype 的作者)

如果您熟悉 LaTex,您可能需要考虑 聚酯纤维

胶乳的优点之一是易于控制图像质量。你的 pdf 中的图像将与原始图像的质量相同。在使用 reportlab 时,我体验到图像被自动压缩,图像质量降低。

Pylatex 的缺点是,由于它是基于 LaTex 的,所以很难将图像准确地放置在页面上的任何位置。但是,我发现在图类中使用 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