引言
在日常工作和學習中,我們經常需要將多張圖片合并成一個PDF文件,以便于分享或打印。Python提供了多種庫來實現這一需求,本文將詳細介紹三種常用的方法:img2pdf庫、Pillow庫和PyMuPDF庫,并附上完整的代碼示例。
方法一:使用img2pdf庫
簡介
img2pdf是一個專門用于將圖片轉換為PDF的高效工具,支持多種圖片格式(如JPEG、PNG等),且轉換過程中不會損失圖片質量。
安裝
pip install img2pdf
代碼示例
import img2pdf# 定義圖片路徑列表
image_paths = ['image1.jpg', 'image2.png', 'image3.jpeg']# 將圖片轉換為PDF字節流
pdf_bytes = img2pdf.convert(image_paths)# 保存為PDF文件
with open('output.pdf', 'wb') as f:f.write(pdf_bytes)print("PDF文件已成功生成!")
優勢
- 高效快速:直接將圖片數據嵌入PDF,無需重新編碼。
- 無損轉換:保持原始圖片質量。
- 支持多圖:自動將多張圖片分頁到同一PDF中。
方法二:使用Pillow庫
簡介
Pillow是Python中常用的圖像處理庫,支持打開、編輯和保存多種圖片格式,也可用于將圖片轉換為PDF。
安裝
pip install Pillow
代碼示例(單張圖片)
from PIL import Image# 打開圖片
image = Image.open('input.jpg')# 保存為PDF(默認分辨率72DPI)
image.save('output.pdf', 'PDF', resolution=300) # 設置分辨率為300DPIprint("單張圖片已轉換為PDF!")
代碼示例(多張圖片合并)
from PIL import Image
import os# 定義圖片路徑列表
image_paths = ['image1.jpg', 'image2.png', 'image3.jpeg']# 打開所有圖片并轉換為RGB模式
images = [Image.open(img).convert('RGB') for img in image_paths]# 保存第一張圖片為PDF,并追加剩余圖片
images[0].save('combined.pdf','PDF',save_all=True,append_images=images[1:]
)print("多張圖片已合并為PDF!")
注意事項
- 分辨率調整:通過
resolution
參數可優化PDF清晰度。 - 模式轉換:確保圖片為RGB模式,否則可能無法保存為PDF。
方法三:使用PyMuPDF庫
簡介
PyMuPDF(即fitz
)是一個功能強大的PDF處理庫,支持添加圖片、調整頁面布局等高級操作。
安裝
pip install pymupdf
代碼示例
import fitz # PyMuPDF的別名# 創建空白PDF文檔
doc = fitz.open()# 添加圖片到PDF
for img_path in ['image1.jpg', 'image2.png']:img = fitz.open(img_path) # 打開圖片rect = fitz.Rect(0, 0, img.media_box.width, img.media_box.height)page = doc.new_page(width=rect.width, height=rect.height) # 創建新頁面page.insert_image(rect, filename=img_path) # 插入圖片# 保存PDF
doc.save('output.pdf')
doc.close()print("PDF文件已生成!")
優勢
- 靈活布局:可自定義頁面大小、邊距等。
- 高級功能:支持添加水印、合并PDF等操作。
方案對比
方法 | 適用場景 | 優點 | 缺點 |
---|---|---|---|
img2pdf | 批量轉換、追求速度和無損質量 | 快速、高效、無損 | 僅支持基礎轉換 |
Pillow | 單張圖片轉換、簡單合并 | 輕量級、易用 | 多圖合并需額外處理 |
PyMuPDF | 需要定制PDF布局或高級功能 | 功能強大、靈活 | 學習成本稍高 |
常見問題解答
1. 如何調整PDF的頁面大小?
- img2pdf:通過
layout_fun
參數自定義布局(需指定紙張尺寸)。 - PyMuPDF:在
new_page
中設置width
和height
參數。
2. 轉換后的PDF文件過大怎么辦?
- 使用
img2pdf
時,確保圖片格式為JPEG或PNG(已壓縮格式)。 - 通過
Pillow
的savefig
參數調整分辨率(如dpi=150
)。
3. 支持哪些圖片格式?
- 所有方法均支持JPEG、PNG、BMP等常見格式。
- img2pdf還支持TIFF、WebP等格式。
總結
- 推薦方案:
- 批量轉換:優先使用
img2pdf
庫。 - 簡單需求:選擇
Pillow
庫。 - 高級定制:使用
PyMuPDF
庫。
- 批量轉換:優先使用
通過本文的三種方法,您可以輕松實現圖片到PDF的轉換,并根據具體需求選擇最合適的工具。