有没有实用的方法可以使用Python从图像文件列表中创建PDF?
在Perl我知道那个模块.有了它,我可以只用3行创建一个PDF:
use PDF::FromImage;
...
my $pdf = PDF::FromImage->new;
$pdf->load_images(@allPagesDir);
$pdf->write_file($bookName . '.pdf');
Run Code Online (Sandbox Code Playgroud)
我需要做一些与此类似的事情,但是在Python中.我知道pyPdf模块,但我想要一些简单的东西.
@编辑
如果您通过Google访问,请输入以下代码:
from fpdf import FPDF
from PIL import Image
def makePdf(pdfFileName, listPages, dir = ''):
if (dir):
dir += "/"
cover = Image.open(dir + str(listPages[0]) + ".jpg")
width, height = cover.size
pdf = FPDF(unit = "pt", format = [width, height])
for page in listPages:
pdf.add_page()
pdf.image(dir + str(page) + ".jpg", 0, 0)
pdf.output(dir + pdfFileName + ".pdf", "F")
Run Code Online (Sandbox Code Playgroud)
小智 55
pip install fpdf
Run Code Online (Sandbox Code Playgroud)
现在您可以使用相同的逻辑:
from fpdf import FPDF
pdf = FPDF()
# imagelist is the list with all image filenames
for image in imagelist:
pdf.add_page()
pdf.image(image,x,y,w,h)
pdf.output("yourfile.pdf", "F")
Run Code Online (Sandbox Code Playgroud)
Sye*_*bir 22
如果使用Python 3,则可以使用python模块img2pdf
pip3 install img2pdf使用它安装它然后你可以在脚本中使用它import img2pdf
示例代码
import os
import img2pdf
with open("output.pdf", "wb") as f:
f.write(img2pdf.convert([i for i in os.listdir('path/to/imageDir') if i.endswith(".jpg")]))
Run Code Online (Sandbox Code Playgroud)
bil*_*p22 20
到目前为止,我尝试过将多个图像转换为PDF的最佳方法是PIL纯粹使用.它非常简单但功能强大:
from PIL import Image
im1 = Image.open("/Users/apple/Desktop/bbd.jpg")
im2 = Image.open("/Users/apple/Desktop/bbd1.jpg")
im3 = Image.open("/Users/apple/Desktop/bbd2.jpg")
im_list = [im2,im3]
pdf1_filename = "/Users/apple/Desktop/bbd1.pdf"
im1.save(pdf1_filename, "PDF" ,resolution=100.0, save_all=True, append_images=im_list)
Run Code Online (Sandbox Code Playgroud)
只需设置save_all到True和append_images到要添加图像列表.
你可能会遇到AttributeError: 'JpegImageFile' object has no attribute 'encoderinfo'.将多个JPEG保存为多页PDF时,解决方案在此处出现错误
注意:安装最新版本PIL以确保save_allPDF参数可用.
如果您的图像是您使用 matplotlib 创建的绘图,则可以使用matplotlib.backends.backend_pdf.PdfPages(请参阅文档)。
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
# generate a list with dummy plots
figs = []
for i in [-1, 1]:
fig = plt.figure()
plt.plot([1, 2, 3], [i*1, i*2, i*3])
figs.append(fig)
# gerate a multipage pdf:
with PdfPages('multipage_pdf.pdf') as pdf:
for fig in figs:
pdf.savefig(fig)
plt.close()
Run Code Online (Sandbox Code Playgroud)
pgmagick是GraphicsMagick(Magick++)Python的绑定。
它是ImageMagick(或GraphicsMagick)的 Python 包装器。
import os
from os import listdir
from os.path import isfile, join
from pgmagick import Image
mypath = "\Images" # path to your Image directory
for each_file in listdir(mypath):
if isfile(join(mypath,each_file)):
image_path = os.path.join(mypath,each_file)
pdf_path = os.path.join(mypath,each_file.rsplit('.', 1)[0]+'.pdf')
img = Image(image_path)
img.write(pdf_path)
Run Code Online (Sandbox Code Playgroud)
Sample input Image:
Run Code Online (Sandbox Code Playgroud)

PDF looks like this:
Run Code Online (Sandbox Code Playgroud)

Windows 的 pgmagick iinstallation 说明:
1) 从Unofficial Windows Binaries for Python Extension Packages(如 pgmagick 网页中提到的)下载预编译的二进制包并安装它。
注意:尝试下载与您机器上安装的python版本相对应的正确版本,无论是32位安装还是64位安装。
您可以通过在终端输入 python 并按 Enter 来检查您是否拥有 32 位或 64 位 python。
D:\>python
ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Run Code Online (Sandbox Code Playgroud)
所以它有python version 2.7它的32 bit (Intel)] on win32所以你必须下载并安装pgmagick?0.5.8.win32?py2.7.exe。
以下是pgmagick可用的 Python 扩展包:
2) 然后您可以按照此处的安装说明进行操作。
pip install pgmagick
Run Code Online (Sandbox Code Playgroud)
然后尝试导入它。
>>> from pgmagick import gminfo
>>> gminfo.version
'1.3.x'
>>> gminfo.library
'GraphicsMagick'
>>>
Run Code Online (Sandbox Code Playgroud)
首先pip install pillow是命令行界面。图像可以是 jpg 或 png 格式。如果您有 2 个或更多图像并想制作 1 个 pdf 文件。
代码:
from PIL import Image
image1 = Image.open(r'locationOfImage1\\Image1.png')
image2 = Image.open(r'locationOfImage2\\Image2.png')
image3 = Image.open(r'locationOfImage3\\Image3.png')
im1 = image1.convert('RGB')
im2 = image2.convert('RGB')
im3 = image3.convert('RGB')
imagelist = [im2,im3]
im1.save(r'locationWherePDFWillBeSaved\\CombinedPDF.pdf',save_all=True, append_images=imagelist)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63528 次 |
| 最近记录: |