如何在Python中创建PDF文件

如何在Python中创建PDF文件,python,pdf,Python,Pdf,我正在做一个项目,从用户那里获取一些图像,然后创建一个包含所有这些图像的PDF文件 在Python中有什么方法或工具可以做到这一点吗?例如,要从image1+Image2+Image3->PDF文件创建PDF文件(或eps,ps)?您可以尝试(Python用于生成PDF),也可以尝试,它支持打印为PDF。 用于PDF生成的Python 可移植文档格式(PDF)允许您创建在每个平台上看起来完全相同的文档。然而,有时需要动态生成PDF文档,这可能是一个相当大的挑战。幸运的是,有些库可以提供帮助。本

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

在Python中有什么方法或工具可以做到这一点吗?例如,要从image1+Image2+Image3->PDF文件创建PDF文件(或eps,ps)?

您可以尝试(Python用于生成PDF),也可以尝试,它支持打印为PDF。

用于PDF生成的Python

可移植文档格式(PDF)允许您创建在每个平台上看起来完全相同的文档。然而,有时需要动态生成PDF文档,这可能是一个相当大的挑战。幸运的是,有些库可以提供帮助。本文将研究Python的一个例子


我建议在

上阅读更多内容。它真的很好用。不久前我还写了一篇博客文章,你可以找到它。

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

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

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

以下是我在遵循本页提示后的体验

  • pyPDF无法将图像嵌入到文件中。它只能拆分和合并。(来源:Ctrl+F通过its) 这很好,但如果您的图像还没有嵌入到PDF中,则情况就不一样了

  • 在pyPDF上似乎没有任何额外的文档

  • ReportLab非常广泛。()然而,使用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很不错,但如果在其文档中突出地包含上面提到的HelloWorld,它将受益匪浅。

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

    我用来创建pdf文件,因为我更熟悉RST而不是HTML。它支持嵌入几乎任何类型的光栅或矢量图像

    它需要,但我发现reportlab的使用并不那么直接(至少对我来说是这样)。

    我建议。(安装)

    它从html文件创建pdf。我选择它从Python金字塔堆栈中分两步创建pdf:

  • 使用mako模板呈现服务器端,模板的样式和标记为pdf文档所需
  • 通过将呈现的html作为参数传递,执行
    pdfkit.from_string(…)
    方法
  • 通过这种方式,您可以获得支持样式和图像的pdf文档

    您可以按如下方式安装它:

    • 使用pip

      pip安装pdfkit

    • 您还需要安装wkhtmltopdf()
      • fpdf也是python。而且经常使用。请参阅PyPI/pip搜索。但也许它是从pyfpdf重命名为fpdf的。从功能:
        PNG、GIF和JPG支持(包括透明和alpha通道)

        这是一个仅适用于标准软件包的解决方案
        matplotlib
        有一个PDF后端,用于将数字保存为PDF格式。您可以创建带有子图的图形,其中每个子图都是您的图像之一。你有完全的自由来搞乱这个人物:添加标题,玩弄位置等等。一旦你的人物完成了,保存到PDF。每次调用
        savefig
        都将创建另一页PDF

        下面的示例在第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

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


        (完全公开:我是RunOHype的作者)

        < P>如果你熟悉PACTH,你可能想考虑

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

        pylatex的缺点是,由于它是基于乳胶的,所以很难将图像准确地放置在页面上您想要的位置。但是,我发现在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安装pylatex),还需要安装LaTex。对于Ubuntu和其他Debian系统,您可以运行
        sudo-apt-get-install-texlive-full
        。如果您使用的是Windows,我建议您

        如果有疑问,请在您正在搜索的任何内容前面加上前缀(
        py
        ;-)另一个SO搜索技巧:
        [language or tag]some_关键字
        ,如
        [python]PDF
        [python]PDF图像
        ,适用于那些使用matplolib来到这里的人:我必须说reportlab是我尝试过的最适合生成PDF的,肯定是最完整的。然而,它也有点复杂。这正是我要找的for@JoseSalvatierra谢谢Jose…这真的很容易。感谢您的博客链接。找到了PyPDF2的最新分支。请注意,pypdf仅用于剪切/粘贴/等。。现有pdf内容-您不能向pdf添加文本或图像。pyPDF2不用于创建新的pdf文档,您可以。有一些关于如何做的好链接。Link/Descrip.:FPDF是一个PHP类