Python實(shí)現(xiàn)將單張或多張圖片轉(zhuǎn)PDF
在整理資料或處理圖片時(shí),你有沒有遇到過這樣的困擾:手機(jī)拍的照片、掃描的文檔、各種格式的圖片零散地散落在電腦里,想要統(tǒng)一管理卻又不想一個(gè)個(gè)手動(dòng)插入 PDF?其實(shí),把這些圖片轉(zhuǎn)換成 PDF,不僅能讓資料更整齊,還方便分享和歸檔,而且可以保證圖片清晰不丟失。
這篇博客將分享如何使用 Python 將圖片轉(zhuǎn)換為PDF。從單張圖片轉(zhuǎn)換,到批量處理多張圖片,再到不同格式的支持和頁面布局的優(yōu)化,都可以用簡(jiǎn)單的幾行代碼完成。
準(zhǔn)備工作:安裝圖片轉(zhuǎn)PDF庫
要在 Python中將圖片轉(zhuǎn)換為PDF,需要選擇一個(gè)支持將圖片寫入到PDF的庫。本文所使用的庫是Spire.PDF for Python,它是一個(gè)PDF文檔處理庫,功能豐富,支持插入多種圖片格式,包括 PNG、JPEG、TIFF 和 SVG,還支持 PDF 頁面布局自定義、批量處理和合并圖片等操作。
你可以通過以下 pip 命令安裝它:
pip install Spire.PDF
安裝完成后,就可以在 Python 中直接調(diào)用該庫的類和方法了。
單張圖片轉(zhuǎn)換為 PDF
如果你只需要將一張圖片轉(zhuǎn)換為 PDF,可以按照以下步驟操作:
- 創(chuàng)建 PdfDocument 對(duì)象。
- 將頁面邊距設(shè)置為零。
- 使用 PdfImage.FromFile() 載入圖片,并獲取圖片尺寸。
- 添加一個(gè)與圖片大小相同的 PDF 頁面。
- 將圖片繪制到頁面上。
- 保存 PDF 文件。
下面是完整的 Python 代碼示例:
from spire.pdf.common import *
from spire.pdf import *
# 創(chuàng)建 PdfDocument 對(duì)象
pdf = PdfDocument()
# 設(shè)置頁面邊距為 0
pdf.PageSettings.SetMargins(0.0)
# 載入圖片
image = PdfImage.FromFile("Sample.jpg")
# 獲取圖片寬高
width = image.PhysicalDimension.Width
height = image.PhysicalDimension.Height
# 創(chuàng)建與圖片同大小的頁面
page = pdf.Pages.Add(SizeF(width, height))
# 繪制圖片
page.Canvas.DrawImage(image, 0.0, 0.0, width, height)
# 保存 PDF
pdf.SaveToFile("單圖.pdf")
pdf.Dispose()運(yùn)行這段代碼后,你就能得到與圖片尺寸完全一致的 PDF 文件。
將文件夾中多張圖片批量轉(zhuǎn)換為 PDF
如果你有一個(gè)文件夾里存放了多張圖片,需要將它們統(tǒng)一轉(zhuǎn)換成一個(gè) PDF,可以采用批量處理方法:
- 遍歷文件夾中的圖片。
- 每張圖片都創(chuàng)建一個(gè)與其尺寸相同的 PDF 頁面。
- 將圖片繪制在對(duì)應(yīng)頁面上。
- 保存最終的 PDF 文件。
示例代碼如下:
from spire.pdf.common import *
from spire.pdf import *
import os
# 創(chuàng)建 PdfDocument 對(duì)象
doc = PdfDocument()
doc.PageSettings.SetMargins(0.0)
# 圖片所在文件夾
path = '圖片/'
files = os.listdir(path)
for root, dirs, files in os.walk(path):
for file in files:
# 載入圖片
image = PdfImage.FromFile(os.path.join(root, file))
width = image.PhysicalDimension.Width
height = image.PhysicalDimension.Height
# 添加頁面
page = doc.Pages.Add(SizeF(width, height))
# 繪制圖片
page.Canvas.DrawImage(image, 0.0, 0.0, width, height)
# 保存 PDF
doc.SaveToFile('output/多圖.pdf')
doc.Dispose()這樣,你就可以一次性將整個(gè)文件夾的圖片生成一個(gè) PDF,方便管理和分享。
調(diào)整 PDF 布局與圖片位置
在一些場(chǎng)景下,你可能希望 PDF 頁面大小統(tǒng)一,例如使用 A4 頁面,同時(shí)將圖片居中顯示。可以通過設(shè)置頁面大小、邊距以及計(jì)算圖片在頁面上的位置來實(shí)現(xiàn):
from spire.pdf.common import *
from spire.pdf import *
pdf = PdfDocument()
pdf.PageSettings.SetMargins(5.0) # 設(shè)置邊距
pdf.PageSettings.Size = PdfPageSize.A4() # 設(shè)置頁面為 A4
# 添加新頁面
page = pdf.Pages.Add()
# 載入圖片
image = PdfImage.FromFile("Sample.jpg")
width = image.PhysicalDimension.Width
height = image.PhysicalDimension.Height
# 計(jì)算居中位置
x = (page.GetClientSize().Width - width) / 2
y = (page.GetClientSize().Height - height) / 2
# 繪制圖片
page.Canvas.DrawImage(image, x, y, width, height)
pdf.SaveToFile("自定義.pdf")
pdf.Dispose()通過這種方法,你可以保證生成的 PDF 頁面整齊、美觀,適合打印或正式展示。
其他圖片格式(如SVG、TIFF)轉(zhuǎn) PDF
除了將 PNG、JPEG、BMP等圖片格式轉(zhuǎn)換為 PDF 外,Spire.PDF還支持將SVG 轉(zhuǎn)換為PDF。
from spire.pdf.common import *
from spire.pdf import *
# 創(chuàng)建 PdfDocument 對(duì)象
document = PdfDocument()
# 加載 SVG 文件
document.LoadFromSvg("SVG.svg")
# 保存為 PDF 文件
document.SaveToFile("output/SVG.pdf", FileFormat.PDF)
document.Dispose()如果有特殊需求,例如將 TIFF 轉(zhuǎn) PDF,你可以借助 Pillow 庫(pip install pillow)先將每一頁轉(zhuǎn)換為 PNG,再生成 PDF:
from spire.pdf.common import *
from spire.pdf import *
from PIL import Image
import os
# 創(chuàng)建PDF文檔并移除頁邊距
pdf = PdfDocument()
pdf.PageSettings.SetMargins(0.0)
# 加載TIFF圖片,將每一幀轉(zhuǎn)換為PNG并添加到PDF
tiff_image = Image.open("example.tiff")
for i in range(tiff_image.n_frames):
tiff_image.seek(i)
frame = tiff_image.copy()
frame.save(f"temp_{i}.png")
image = PdfImage.FromFile(f"temp_{i}.png")
page = pdf.Pages.Add(SizeF(image.PhysicalDimension.Width, image.PhysicalDimension.Height))
page.Canvas.DrawImage(image, 0.0, 0.0)
# 保存文檔
pdf.SaveToFile("output/TIFF轉(zhuǎn)PDF.pdf")
pdf.Dispose()通過這種方法,每一幀 TIFF 都會(huì)生成 PDF 中的一頁,保證了圖像質(zhì)量和順序。
實(shí)用方法示例:按文件名順序生成 PDF
假設(shè)你有一個(gè)文件夾存放會(huì)議照片,文件名是按照時(shí)間順序命名的。我們可以按文件名順序,把所有圖片合并到一個(gè) PDF 中。
from spire.pdf import PdfDocument, PdfImage
from spire.pdf.common import SizeF
import os
# 創(chuàng)建 PDF
pdf = PdfDocument()
pdf.PageSettings.SetMargins(0.0)
# 圖片所在文件夾
folder_path = "MeetingPhotos/"
images = sorted(os.listdir(folder_path)) # 按文件名排序
for img_file in images:
# 僅處理常見圖片格式
if img_file.lower().endswith((".jpg", ".jpeg", ".png")):
image_path = os.path.join(folder_path, img_file)
img = PdfImage.FromFile(image_path)
# 添加與圖片同尺寸頁面
page = pdf.Pages.Add(SizeF(img.PhysicalDimension.Width, img.PhysicalDimension.Height))
page.Canvas.DrawImage(img, 0.0, 0.0, img.PhysicalDimension.Width, img.PhysicalDimension.Height)
# 保存 PDF
pdf.SaveToFile("output/會(huì)議照片.pdf")
pdf.Dispose()這樣,每張圖片就會(huì)生成一頁,順序嚴(yán)格按照文件名排列,非常適合會(huì)議照片或掃描文檔的整理。
高級(jí)操作:圖片縮放與排版
在實(shí)際應(yīng)用中,圖片大小可能不一,如果直接生成 PDF,可能出現(xiàn)頁面空白或圖片過大。可以通過縮放或調(diào)整位置,達(dá)到統(tǒng)一效果:
page_width, page_height = 595.0, 842.0 # A4 尺寸,單位為點(diǎn)
for img_file in images:
img = PdfImage.FromFile(os.path.join(folder_path, img_file))
scale = min(page_width / img.PhysicalDimension.Width, page_height / img.PhysicalDimension.Height)
width = img.PhysicalDimension.Width * scale
height = img.PhysicalDimension.Height * scale
page = pdf.Pages.Add(SizeF(page_width, page_height))
x = (page_width - width) / 2
y = (page_height - height) / 2
page.Canvas.DrawImage(img, x, y, width, height)這樣生成的 PDF 頁面大小統(tǒng)一,圖片居中,排版更加美觀,適合打印或正式文檔歸檔。
為了讓 PDF 更專業(yè),你還可以自動(dòng)生成封面和目錄。比如:
- 封面:可以先添加一頁 PDF,繪制標(biāo)題、日期和簡(jiǎn)單說明。
- 目錄:掃描圖片文件名,生成每頁對(duì)應(yīng)的說明,放在封面后面。
這樣整理出的 PDF 就像一本正式的電子資料,不僅好看,也方便閱讀。
總結(jié)
使用 Python 將圖片整理成 PDF,不僅節(jié)省了手動(dòng)操作時(shí)間,還能讓資料更整齊、專業(yè)。無論是單張圖片、批量圖片,還是不同格式的圖像,都可以輕松處理。通過本文示例,你可以快速整理你的圖片資料,生成高質(zhì)量 PDF 文檔。
到此這篇關(guān)于Python實(shí)現(xiàn)將單張或多張圖片轉(zhuǎn)PDF的文章就介紹到這了,更多相關(guān)Python圖片轉(zhuǎn)PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python輕量級(jí)ORM框架Peewee訪問sqlite數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Python輕量級(jí)ORM框架Peewee訪問sqlite數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了ORM框架的概念、功能及peewee的安裝、使用及操作sqlite數(shù)據(jù)庫的方法,需要的朋友可以參考下2017-07-07
Python3+Django get/post請(qǐng)求實(shí)現(xiàn)教程詳解
這篇文章主要介紹了Python3+Django get/post請(qǐng)求實(shí)現(xiàn)教程詳解,需要的朋友可以參考下2021-02-02
如何使用 Pylint 來規(guī)范 Python 代碼風(fēng)格(來自IBM)
本文通過詳細(xì)的理論介紹和簡(jiǎn)單易懂的實(shí)例全面介紹了 Python 代碼分析工具 Pylint。相信讀者看完后一定可以輕松地將 Pylint 運(yùn)用到自己的開發(fā)工程中2018-04-04
利用Python進(jìn)行音頻信號(hào)處理和音樂生成的代碼示例
隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,音頻信號(hào)處理和音樂生成逐漸成為了Python程序員們的關(guān)注點(diǎn),本文將介紹如何利用Python進(jìn)行音頻信號(hào)處理和音樂生成,包括基本概念、常用庫的使用以及實(shí)際的代碼示例,需要的朋友可以參考下2024-06-06
Python wxauto 庫解鎖微信自動(dòng)化的無限可能(示例代碼)
wxauto庫是基于Python的一個(gè)自動(dòng)化工具,它主要用于操作和自動(dòng)化WxPython應(yīng)用程序,這篇文章主要介紹了Python wxauto 庫解鎖微信自動(dòng)化的無限可能,需要的朋友可以參考下2024-07-07
Python實(shí)現(xiàn)從訂閱源下載圖片的方法
這篇文章主要介紹了Python實(shí)現(xiàn)從訂閱源下載圖片的方法,涉及Python采集的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03

