如何用Python创buildPDF文件
我正在从一个项目,从用户采取一些图像,然后创build一个包含所有这些图像的PDF文件。
有什么办法或任何工具在Python中做到这一点? 例如,要从image1 + image 2 + image 3 – > PDF文件创buildPDF文件(或eps,ps)?
我build议pyPdf 。 它工作真的很好。 前段时间我还写了一篇博文,你可以在这里find。
按照此页面上的提示,这是我的经验。
-
pyPDF不能将图像embedded到文件中。 它只能分裂和合并。 (来源:按Ctrl + F通过它的文档页 )这是伟大的,但不是如果你有图像还没有embedded在PDF中。
-
pyPDF2在pyPDF上似乎没有任何额外的文档。
-
ReportLab非常广泛。 ( 用户指南 )但是,通过一些Ctrl + F,并通过其来源,我得到这个:
- 首先, 下载Windows安装程序和源代码
-
然后在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。
我build议Pdfkit 。
它从HTML文件创buildPDF。 我select它从我的Python金字塔堆栈中分两步创buildpdf:
- 用mako模板渲染服务器端的样式和标记,你想为你的pdf文件
- 通过传递呈现的html作为参数来执行
pdfkit.from_string(...)
方法
这样你就可以得到一个支持样式和图像的pdf文档。
您可以按如下方式安装它:
-
使用点子
pip install pdfkit
- 你还需要安装wkhtmltopdf( 在Ubuntu上 )。
你可以试试这个 (Python-for-PDF-Generation),或者你可以尝试PyQt ,它支持打印到PDF。
用于PDF生成的Python
可移植文档格式(PDF)可让您在每个平台上创build完全一样的文档。 有时候需要dynamic生成一个PDF文档,这可能是一个很大的挑战。 幸运的是,有些图书馆可以提供帮助。 本文将探讨Python的其中之一。
阅读更多在http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
我在PyQt中做了相当多的工作,效果很好。 Qt对图像,字体,样式等有广泛的支持,所有这些都可以写成PDF文档。
我使用rst2pdf来创buildPDF文件,因为我比RST更熟悉RST。 它支持embedded几乎任何types的光栅或vector图像。
它需要reportlab ,但是我发现reportlab并不是那么简单(至less对我来说)。
我相信,matplotlib能够将graphics,文本和其他对象序列化为PDF文档。
fpdf是python(太)。 并经常使用。 请参阅PyPI / pipsearch。 但也许它是从pyfpdf改名为fpdf。 从function:PNG,GIF和JPG支持(包括透明度和alpha通道)
这是一个只适用于标准软件包的解决scheme。 matplotlib
有一个PDF后端将数据保存为PDF。 您可以创build一个带有子图的graphics,其中每个子图都是您的图像之一。 你有充分的自由来混淆数字:添加标题,玩位置等。一旦你的数字完成,保存为PDF。 每次调用savefig
都会创build另一个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()
这取决于你的图像文件格式是什么,但是对于这里的项目,我使用了RemoteSensing.org的 LibTIFF中的tiff2pdf工具。 基本上只是使用subprocess调用tiff2pdf.exe与适当的参数来阅读我的tiff的种类,并输出我想要的types的PDF。 如果他们不是tiffs,那么可以使用PIL将它们转换为tiff,或者可以像上面提到的ReportLab一样,find一个更专用于图像types的工具(或者更通用的,如果图像将是多样的)。
你可以尝试xhtml2pdf http://flask.pocoo.org/snippets/68/
rinohtype支持embeddedPDF,PNG和JPEG图像(本地)和其他位图格式(安装Pillow时)。
(全面披露:我是rinohtype的作者)
fpdf适合我。 比ReportLab简单多了,真的很自由。 适用于UTF-8。