Python實(shí)現(xiàn)PDF與多種圖片格式之間互轉(zhuǎn)(PNG, JPG, BMP, EMF, SVG)
一、介紹
PDF和圖片是我們?nèi)粘I詈凸ぷ髦谐S玫奈募袷?。有時(shí)候,我們可能需要將PDF和圖片進(jìn)行格式互轉(zhuǎn)來(lái)滿足不同的應(yīng)用場(chǎng)景和使用需求。例如,將PDF轉(zhuǎn)換為圖片更有利于在網(wǎng)頁(yè)上或幻燈片中展示文件內(nèi)容,而將圖片轉(zhuǎn)換為PDF可以將多個(gè)圖片整合到一個(gè)文檔中,方便進(jìn)行文檔歸檔、電子書制作、打印或共享等操作。這篇文章將探討如何使用Python實(shí)現(xiàn)PDF與多種圖片格式之間的相互轉(zhuǎn)換。
二、安裝Python庫(kù)
我們需要借助Python類庫(kù)來(lái)實(shí)現(xiàn)PDF與圖片格式互轉(zhuǎn)。本文使用的類庫(kù)是Spire.PDF for Python,它可以把多種圖片格式轉(zhuǎn)換為PDF,也可以把PDF轉(zhuǎn)換成多種圖片格式。安裝過(guò)程比較簡(jiǎn)單,使用pip命令即可:
pip install Spire.PDF
下面我們來(lái)看如何借助這個(gè)庫(kù)實(shí)現(xiàn)PDF和圖片互轉(zhuǎn)。
三、Python實(shí)現(xiàn)多種圖片格式轉(zhuǎn)PDF
圖片轉(zhuǎn)PDF可以有不同的場(chǎng)景,比如我們可以把單張圖片轉(zhuǎn)換為PDF,也可以把多張圖片轉(zhuǎn)換為一個(gè)PDF。下面將分別介紹這兩種場(chǎng)景。
1、單張圖片轉(zhuǎn)換為PDF
將單張圖片轉(zhuǎn)換為PDF的原理是將圖片繪制到PDF,下面是大概步驟:
- 新建PDF。
- 加載圖片,獲取圖片的寬高。
- 添加一個(gè)與圖片寬高一致的頁(yè)面到PDF。
- 把圖片繪制到頁(yè)面上。
- 保存文檔。
代碼:
from spire.pdf.common import * from spire.pdf import * # 創(chuàng)建PdfDocument實(shí)例 doc = PdfDocument() # 刪除頁(yè)邊距 doc.PageSettings.SetMargins(0.0) # 加載一張圖片 image = PdfImage.FromFile("C:/Users/Administrator/Desktop/image.jpg") # 獲取圖片的寬度和高度 width = image.PhysicalDimension.Width height = image.PhysicalDimension.Height # 添加頁(yè)面到PDF,設(shè)置頁(yè)面的寬度和高度與圖片一致 page = doc.Pages.Add(SizeF(width, height)) # 把圖片繪制到頁(yè)面上 page.Canvas.DrawImage(image, 0.0, 0.0, width, height) # 保存文檔 doc.SaveToFile("圖片轉(zhuǎn)PDF.pdf") doc.Close()
注意,上面的代碼適用于PNG/JPG/BMP/EMF等格式,但不適用于SVG。如果需要將SVG轉(zhuǎn)換為PDF,參考以下代碼:
from spire.pdf.common import * from spire.pdf import * # 創(chuàng)建PdfDocument實(shí)例 doc = PdfDocument() # 加載SVG doc.LoadFromSvg("測(cè)試.svg") # 保存SVG為PDF doc.SaveToFile("SVG轉(zhuǎn)PDF.pdf", FileFormat.PDF) doc.Close()
2、多張圖片轉(zhuǎn)換為一個(gè)PDF
多張圖片轉(zhuǎn)PDF的原理與單張圖片轉(zhuǎn)PDF一樣,就是添加多個(gè)頁(yè)面到PDF,然后依次將每個(gè)圖片繪制到對(duì)應(yīng)頁(yè)面上去。步驟與上面類似,此處省略。
代碼:
from spire.pdf.common import * from spire.pdf import * import os # 創(chuàng)建PdfDocument實(shí)例 doc = PdfDocument() # 刪除頁(yè)邊距 doc.PageSettings.SetMargins(0.0) # 指定圖片文件夾路徑 image_dir = "C:/Users/Administrator/Desktop/圖片/" # 遍歷文件夾中的圖片 for fileName in os.listdir(image_dir): image_path = os.path.join(image_dir, fileName) # 加載圖片 image = PdfImage.FromFile(image_path) # 獲取圖片寬高 width = image.PhysicalDimension.Width height = image.PhysicalDimension.Height # 添加一個(gè)與圖片寬高一致的頁(yè)面到PDF page = doc.Pages.Add(SizeF(width, height)) # 把圖片繪制到頁(yè)面上 page.Canvas.DrawImage(image, 0.0, 0.0, width, height) # 保存文檔 doc.SaveToFile("多張圖片轉(zhuǎn)PDF.pdf") doc.Dispose()
四、Python實(shí)現(xiàn)PDF轉(zhuǎn)多種圖片格式
除了把多種圖片格式轉(zhuǎn)換為PDF,我們也可以把PDF轉(zhuǎn)換為PNG/JPG/BMP/EMF/SVG等多種圖片格式。
將PDF轉(zhuǎn)換為PNG/JPG/BMP/EMF的大致步驟如下:
- 加載PDF。
- 遍歷文檔頁(yè)面。
- 將每個(gè)頁(yè)面轉(zhuǎn)換為圖片。
下面是將PDF轉(zhuǎn)換為PNG/JPG/BMP/EMF的代碼:
from spire.pdf.common import * from spire.pdf import * # 創(chuàng)建PdfDocument實(shí)例 doc = PdfDocument() # 加載PDF文檔 doc.LoadFromFile("測(cè)試.pdf") # 遍歷文檔頁(yè)面 for i in range(doc.Pages.Count): # 將每個(gè)頁(yè)面分別轉(zhuǎn)換為圖片(要轉(zhuǎn)換到其他的圖片格式,修改圖片后綴即可) fileName = "輸出/圖片-{0:d}.png".format(i) with doc.SaveAsImage(i) as imageS: imageS.Save(fileName) doc.Close()
如要將PDF轉(zhuǎn)換為SVG,則不需要遍歷頁(yè)面,加載文檔后,可以直接使用類庫(kù)提供的方法來(lái)轉(zhuǎn)換,此外還可以設(shè)置轉(zhuǎn)換的SVG的尺寸:
from spire.pdf.common import * from spire.pdf import * # 創(chuàng)建PdfDocument實(shí)例 doc = PdfDocument() # 加載PDF文檔 doc.LoadFromFile("測(cè)試.pdf") # 指定轉(zhuǎn)換的SVG文件的尺寸 doc.ConvertOptions.SetPdfToSvgOptions(600.0, 600.0) # 將每個(gè)頁(yè)面分別轉(zhuǎn)換為SVG doc.SaveToFile("PDF轉(zhuǎn)SVG.svg", FileFormat.SVG) doc.Close()
希望以上關(guān)于使用Python實(shí)現(xiàn)PDF和多種圖片格式互轉(zhuǎn)的內(nèi)容能對(duì)你有所幫助。
到此這篇關(guān)于Python實(shí)現(xiàn)PDF與多種圖片格式之間互轉(zhuǎn)(PNG, JPG, BMP, EMF, SVG)的文章就介紹到這了,更多相關(guān)Python PDF與多種圖片格式互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)由數(shù)組生成對(duì)稱矩陣
本文給大家分享的是由數(shù)組生成對(duì)稱矩陣的思路并附上了使用Python實(shí)現(xiàn)的代碼,希望大家能夠喜歡2021-05-05python實(shí)現(xiàn)校園網(wǎng)自動(dòng)登錄的示例講解
下面小編就為大家分享一篇python實(shí)現(xiàn)校園網(wǎng)自動(dòng)登錄的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python Pandas數(shù)據(jù)中對(duì)時(shí)間的操作
這篇文章主要介紹了Python Pandas數(shù)據(jù)中對(duì)時(shí)間的操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python如何通過(guò)openpyxl讀寫Excel文件
python操作excel的庫(kù)有很多,有的庫(kù)只能讀取xsl格式,比如xlrd庫(kù),有的庫(kù)只能寫xsl格式,比如xlwt庫(kù),有的只能讀寫xslx格式,比如openpyxl庫(kù),綜合各庫(kù)及 xslx 格式比較常見(jiàn),所以本文主要講解openpyxl庫(kù)對(duì)xslx格式的excel操作,需要的朋友可以參考下2023-10-10Python使用CuPy模塊實(shí)現(xiàn)高效數(shù)值計(jì)算
CuPy是一個(gè)基于Python的GPU加速計(jì)算庫(kù),它提供了與NumPy相似的接口,可以在GPU上進(jìn)行高效的數(shù)值計(jì)算,本文主要介紹一下CuPy的應(yīng)用場(chǎng)景,并給出一些Python代碼案例,需要的可以參考下2024-02-02python使用numpy尋找二維數(shù)組的最值及其下標(biāo)方法分析
這篇文章主要為大家介紹了python使用numpy尋找二維數(shù)組的最值及其下標(biāo)實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08python 輸出列表元素實(shí)例(以空格/逗號(hào)為分隔符)
今天小編就為大家分享一篇python 輸出列表元素實(shí)例(以空格/逗號(hào)為分隔符),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12python實(shí)現(xiàn)超市管理系統(tǒng)(后臺(tái)管理)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)超市管理系統(tǒng),增加后臺(tái)管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10Python判斷一個(gè)list中是否包含另一個(gè)list全部元素的方法分析
這篇文章主要介紹了Python判斷一個(gè)list中是否包含另一個(gè)list全部元素的方法,結(jié)合實(shí)例形式對(duì)比分析了Python針對(duì)列表list元素包含關(guān)系的相關(guān)轉(zhuǎn)換、判斷操作技巧,需要的朋友可以參考下2018-12-12