Python實(shí)現(xiàn)PDF與多種圖片格式之間互轉(zhuǎn)(PNG, JPG, BMP, EMF, SVG)
一、介紹
PDF和圖片是我們?nèi)粘I詈凸ぷ髦谐S玫奈募袷?。有時候,我們可能需要將PDF和圖片進(jìn)行格式互轉(zhuǎn)來滿足不同的應(yīng)用場景和使用需求。例如,將PDF轉(zhuǎn)換為圖片更有利于在網(wǎng)頁上或幻燈片中展示文件內(nèi)容,而將圖片轉(zhuǎn)換為PDF可以將多個圖片整合到一個文檔中,方便進(jìn)行文檔歸檔、電子書制作、打印或共享等操作。這篇文章將探討如何使用Python實(shí)現(xiàn)PDF與多種圖片格式之間的相互轉(zhuǎn)換。
二、安裝Python庫
我們需要借助Python類庫來實(shí)現(xiàn)PDF與圖片格式互轉(zhuǎn)。本文使用的類庫是Spire.PDF for Python,它可以把多種圖片格式轉(zhuǎn)換為PDF,也可以把PDF轉(zhuǎn)換成多種圖片格式。安裝過程比較簡單,使用pip命令即可:
pip install Spire.PDF
下面我們來看如何借助這個庫實(shí)現(xiàn)PDF和圖片互轉(zhuǎn)。
三、Python實(shí)現(xiàn)多種圖片格式轉(zhuǎn)PDF
圖片轉(zhuǎn)PDF可以有不同的場景,比如我們可以把單張圖片轉(zhuǎn)換為PDF,也可以把多張圖片轉(zhuǎn)換為一個PDF。下面將分別介紹這兩種場景。
1、單張圖片轉(zhuǎn)換為PDF
將單張圖片轉(zhuǎn)換為PDF的原理是將圖片繪制到PDF,下面是大概步驟:
- 新建PDF。
- 加載圖片,獲取圖片的寬高。
- 添加一個與圖片寬高一致的頁面到PDF。
- 把圖片繪制到頁面上。
- 保存文檔。
代碼:
from spire.pdf.common import *
from spire.pdf import *
# 創(chuàng)建PdfDocument實(shí)例
doc = PdfDocument()
# 刪除頁邊距
doc.PageSettings.SetMargins(0.0)
# 加載一張圖片
image = PdfImage.FromFile("C:/Users/Administrator/Desktop/image.jpg")
# 獲取圖片的寬度和高度
width = image.PhysicalDimension.Width
height = image.PhysicalDimension.Height
# 添加頁面到PDF,設(shè)置頁面的寬度和高度與圖片一致
page = doc.Pages.Add(SizeF(width, height))
# 把圖片繪制到頁面上
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("測試.svg")
# 保存SVG為PDF
doc.SaveToFile("SVG轉(zhuǎn)PDF.pdf", FileFormat.PDF)
doc.Close()2、多張圖片轉(zhuǎn)換為一個PDF
多張圖片轉(zhuǎn)PDF的原理與單張圖片轉(zhuǎn)PDF一樣,就是添加多個頁面到PDF,然后依次將每個圖片繪制到對應(yīng)頁面上去。步驟與上面類似,此處省略。
代碼:
from spire.pdf.common import *
from spire.pdf import *
import os
# 創(chuàng)建PdfDocument實(shí)例
doc = PdfDocument()
# 刪除頁邊距
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
# 添加一個與圖片寬高一致的頁面到PDF
page = doc.Pages.Add(SizeF(width, height))
# 把圖片繪制到頁面上
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。
- 遍歷文檔頁面。
- 將每個頁面轉(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("測試.pdf")
# 遍歷文檔頁面
for i in range(doc.Pages.Count):
# 將每個頁面分別轉(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,則不需要遍歷頁面,加載文檔后,可以直接使用類庫提供的方法來轉(zhuǎn)換,此外還可以設(shè)置轉(zhuǎn)換的SVG的尺寸:
from spire.pdf.common import *
from spire.pdf import *
# 創(chuàng)建PdfDocument實(shí)例
doc = PdfDocument()
# 加載PDF文檔
doc.LoadFromFile("測試.pdf")
# 指定轉(zhuǎn)換的SVG文件的尺寸
doc.ConvertOptions.SetPdfToSvgOptions(600.0, 600.0)
# 將每個頁面分別轉(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)容能對你有所幫助。
到此這篇關(guān)于Python實(shí)現(xiàn)PDF與多種圖片格式之間互轉(zhuǎn)(PNG, JPG, BMP, EMF, SVG)的文章就介紹到這了,更多相關(guān)Python PDF與多種圖片格式互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 借助numpy保存數(shù)據(jù)為csv格式的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python 借助numpy保存數(shù)據(jù)為csv格式的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Python循環(huán)語句之break與continue的用法
這篇文章主要介紹了Python循環(huán)語句之break與continue的用法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10
Python和JavaScript間代碼轉(zhuǎn)換的4個工具
JavaScript 已經(jīng)成為眾多其它編程語言爭相選擇的轉(zhuǎn)換目標(biāo)(相關(guān)實(shí)例包括 TypeScript、Emscripten、Cor 以及 Cheerp)。而 Python 則擁有龐大的追隨者群體,另外現(xiàn)有的強(qiáng)大庫資源則使其成為面向 JavaScript 的理想待轉(zhuǎn)換或者說轉(zhuǎn)譯選項(xiàng)2016-02-02
淺談在django中使用filter()(即對QuerySet操作)時踩的坑
這篇文章主要介紹了淺談在django中使用filter()(即對QuerySet操作)時踩的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python進(jìn)階之利用+和*進(jìn)行列表拼接
在我們學(xué)習(xí)python的過程中,有一個非常常見的語法,那就是利用+和*進(jìn)行序列的拼接以及其他操作。今天就帶大家從使用+和*進(jìn)行拼接出發(fā)認(rèn)識一個大家非常容易犯的代碼錯誤。話不多說我們開始吧2023-04-04
Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)圖像精靈下篇
相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,下面開始入門篇2022-08-08

