Python批量處理PDF圖片的操作指南(插入、壓縮、提取、替換、分頁、旋轉(zhuǎn)、刪除)
一、概述
圖片是 PDF 文檔的核心元素之一,它們不僅能夠增強文檔的視覺吸引力,還能有效傳達信息,幫助讀者更好地理解內(nèi)容和主題。在實際操作中,我們常需要對PDF中的圖片進行多種處理,包括插入、提取、替換、旋轉(zhuǎn)、分頁、壓縮、刪除等。通過Python編程實現(xiàn)這些操作的自動化,不僅可以提升工作效率,還能減少人為錯誤率,特別適用于大批量文檔處理的場景。這篇文章將詳細介紹如何使用Python在PDF中實現(xiàn)圖片插入、提取、替換、壓縮、分頁、旋轉(zhuǎn)和刪除等操作。
二、 使用工具
要在Python中實現(xiàn)PDF圖片處理,需要一個合適的PDF處理庫。本文將使用Spire.PDF for Python,該庫主要用于在Python應用程序中創(chuàng)建、讀取、轉(zhuǎn)換和編輯PDF文檔。
安裝 Spire.PDF
在開始之前,需要先安裝 Spire.PDF 庫。你可以在終端中運行以下命令進行安裝:
pip install spire.pdf
三、Python 在 PDF 中插入圖片
插入圖片可以分多種場景,例如插入圖片到現(xiàn)有PDF,插入圖片到新建PDF,批量插入多張圖片到PDF等。下面將對這幾種場景進行逐一介紹。
3.1 插入圖片到現(xiàn)有PDF
實現(xiàn)步驟
- 使用PdfDocument類加載現(xiàn)有PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要插入圖片的目標頁面。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實現(xiàn)代碼
以下Python代碼展示了如何插入一張圖片到現(xiàn)有PDF文檔:
from spire.pdf import *
# 打開現(xiàn)有PDF文檔
pdf = PdfDocument("測試.pdf")
# 獲取第一頁
page = pdf.Pages[0]
# 加載圖片
image = PdfImage.FromFile("C:/Users/Administrator/Desktop/img.png")
# 指定繪制圖片的坐標和大小 (如果需要按照原圖大小插入,則不指定寬度和高度)
x, y, width, height = 50.0, 50.0, 200.0, 200.0
# 在第一頁的指定位置繪制圖片
page.Canvas.DrawImage(image, x, y, width, height)
# 將文檔保存為新PDF文件
pdf.SaveToFile("插入圖片到現(xiàn)有PDF.pdf", FileFormat.PDF)
pdf.Close()3.2 插入圖片到新建PDF
實現(xiàn)步驟
- 使用PdfDocument類創(chuàng)建一個新的PDF文檔。
- 使用PdfDocument.Pages.Add()方法給新建的PDF文檔添加一個頁面。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實現(xiàn)代碼
以下Python代碼展示了如何新建一個PDF文檔并插入一張圖片:
from spire.pdf import *
# 創(chuàng)建PDF文檔
pdf = PdfDocument()
# 添加頁面
page = pdf.Pages.Add()
# 加載圖片
image = PdfImage.FromFile("C:/Users/Administrator/Desktop/img.png")
# 指定繪制圖片的坐標和大小
x, y, width, height = 10.0, 50.0, 200.0, 100.0
# 在第一頁的指定位置繪制圖片 (如果需要按照原圖大小插入,則不指定寬度和高度)
page.Canvas.DrawImage(image, x, y, width, height)
# 保存修改后的文檔
pdf.SaveToFile("插入圖片到新建PDF.pdf", FileFormat.PDF)
pdf.Close()3.3 批量插入多張圖片到PDF
實現(xiàn)步驟
批量插入圖片到PDF需要遍歷圖片列表,然后依次將它們繪制到PDF頁面上。實現(xiàn)步驟與上面的步驟類似,這里不再詳細描述。
實現(xiàn)代碼
以下Python代碼展示了如何批量插入多張圖片到一個新的PDF文檔:
from spire.pdf import *
def batch_insert_images(image_paths, positions):
# 創(chuàng)建新的PDF文檔
pdf = PdfDocument()
# 遍歷圖片文件列表
for img_path, pos in zip(image_paths, positions):
# 添加新頁面
page = pdf.Pages.Add()
# 加載圖片
image = PdfImage.FromFile(img_path)
# 在頁面上繪制圖片到指定位置
page.Canvas.DrawImage(image, *pos)
# 保存PDF文檔
pdf.SaveToFile("批量插入圖片.pdf", FileFormat.PDF)
pdf.Close()
# 調(diào)用
image_paths = [
"C:/Users/Administrator/Desktop/img1.png",
"C:/Users/Administrator/Desktop/img2.png",
"C:/Users/Administrator/Desktop/img3.png",
]
positions = [
(0, 0), # 第一個圖片的位置
(0, 0), # 第二個圖片的位置
(0, 0), # 第三個圖片的位置
]
batch_insert_images(image_paths, positions)四、Python 提取 PDF 圖片及其元數(shù)據(jù)
實現(xiàn)步驟
- 使用PdfDocument類加載PDF文檔。
- 遍歷文檔的所有頁面。
- 獲取當前頁面的圖片信息集合。
- 遍歷頁面的圖片信息集合。
- 獲取每張圖片的位置信息和尺寸。
- 將圖片保存到指定路徑并打印其元數(shù)據(jù),如所在頁碼、圖片號、位置、尺寸、保存位置等。
實現(xiàn)代碼
以下Python代碼展示了如何提取PDF中的圖片及其元數(shù)據(jù),如尺寸、位置和所在頁碼:
from spire.pdf import *
import os
# 打開現(xiàn)有PDF文檔
pdf = PdfDocument("測試.pdf")
# 創(chuàng)建保存圖片的目錄
output_dir = "提取的圖片"
os.makedirs(output_dir, exist_ok=True)
# 遍歷所有頁面
for page_index in range(pdf.Pages.Count):
page = pdf.Pages[page_index]
imageInfo = page.ImagesInfo
# 提取頁面上的所有圖片
for i in range(len(imageInfo)):
# 獲取圖片的位置信息和尺寸
bounds = imageInfo[i].Bounds
width = bounds.Width
height = bounds.Height
# 構(gòu)建保存圖片的文件路徑
file_path = os.path.join(output_dir, f"page{page_index + 1}_image_{i + 1}.png")
# 保存圖片到指定路徑
imageInfo[i].Image.Save(file_path)
# 打印圖片的詳細信息
print({
"頁面": page_index + 1,
"圖片": i + 1,
"寬度和高度": f"{width}x{height}",
"位置": (bounds.X, bounds.Y),
"保存位置": file_path
})
# 關(guān)閉文檔
pdf.Close()五、Python 替換 PDF 圖片
替換PDF圖片可以分兩種場景,一種是使用新圖片替換文檔中的圖片,另一種是使用文字替換圖片。下面將對這兩種替換場景進行逐一介紹。
5.1 使用圖片替換圖片
實現(xiàn)步驟
- 使用PdfDocument類加載PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要替換圖片的目標頁面。
- 使用PdfPageBase.ReplaceImage()方法將頁面中的指定圖片替換為新圖片。使用該方法,替換后的圖片將保持原始圖片的大小和位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實現(xiàn)代碼
以下Python代碼展示了如何使用新圖片替換PDF中的指定圖片:
from spire.pdf import *
# 打開現(xiàn)有PDF文檔
pdf = PdfDocument("測試.pdf")
# 獲取第一頁
page = pdf.Pages[0]
# 加載新圖片
new_image = PdfImage.FromFile("C:/Users/Administrator/Desktop/img1.png")
# 用新圖片替換頁面上的第一個圖片
page.ReplaceImage(0, new_image)
# 保存修改后的文檔
pdf.SaveToFile("圖片替換圖片.pdf")
pdf.Close()5.2 使用文字替換圖片
實現(xiàn)步驟
- 使用PdfDocument類加載PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要替換圖片的目標頁面。
- 使用PdfPageBase.ImagesInfo屬性獲取頁面的圖片信息。
- 從圖片信息集合中獲取第一個圖片的圖片流數(shù)據(jù)并將其加載到PdfImage對象。
- 獲取圖片對象的尺寸和坐標位置。
- 將圖片從頁面中刪除。
- 將文字繪制到圖片位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果文檔。
實現(xiàn)代碼:
from spire.pdf import *
# 打開現(xiàn)有PDF文檔
pdf = PdfDocument("測試.pdf")
# 獲取PDF第一頁
page = pdf.Pages[0]
# 從頁面獲取圖片信息
imageInfo = page.ImagesInfo
# 提取頁面中的第一個圖片
image = PdfImage.FromStream(imageInfo[0].Image)
# 獲取圖片的尺寸(單位為像素)
widthInPixel = image.Width
heightInPixel = image.Height
# 將像素值轉(zhuǎn)換為磅值
convertor = PdfUnitConvertor()
width = convertor.ConvertFromPixels(float(widthInPixel), PdfGraphicsUnit.Point)
height = convertor.ConvertFromPixels(float(heightInPixel), PdfGraphicsUnit.Point)
# 獲取圖片的坐標
x = imageInfo[0].Bounds.X
y = imageInfo[0].Bounds.Y
# 從頁面刪除圖片
page.DeleteImage(0)
# 指定繪制文字的矩形區(qū)域(與圖片的位置和尺寸相同)
rect = RectangleF(PointF(x, y), SizeF(width, height))
# 設置文本對齊方式
strformat = PdfStringFormat()
strformat.Alignment = PdfTextAlignment.Center
strformat.LineAlignment = PdfVerticalAlignment.Middle
# 將文字繪制到圖片位置
page.Canvas.DrawString("替換文本", PdfFont(PdfFontFamily.Helvetica, 18.0), PdfBrushes.get_Purple(), rect, strformat)
# 保存修改后的PDF
pdf.SaveToFile("文字替換圖片.pdf")
pdf.Close()六、Python 實現(xiàn) PDF 圖片分頁布局
實現(xiàn)步驟
在將圖片插入PDF頁面時,可能會遇到圖片太大,一張頁面顯示不完的情況。這種情況下,就需要將顯示不完的部分繪制到下一頁,以確保其完全可見。具體實現(xiàn)步驟如下:
- 使用PdfDocument類新建一個PDF文檔。
- 向文檔中添加一頁。
- 使用PdfTextLayout類設置分頁布局。
- 使用PdfImage.Draw()方法,以分頁布局在頁面上繪制圖片。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
示例代碼
以下Python代碼展示了如何添加一張大圖片到PDF并使其分頁顯示:
from spire.pdf import *
# 創(chuàng)建PDF文檔
pdf = PdfDocument()
# 添加頁面
page = pdf.Pages.Add()
# 加載圖片
image = PdfImage.FromFile("img.png")
# 設置布局選項,使圖片分頁
format = PdfTextLayout()
format.Break = PdfLayoutBreakType.FitPage
format.Layout = PdfLayoutType.Paginate
# 使用分頁布局在頁面上繪制圖片
image.Draw(page, 20.0, 600.0, format)
# 保存PDF文檔
pdf.SaveToFile("圖片分頁.pdf")
pdf.Close()七、Python 設置 PDF 圖片透明度與旋轉(zhuǎn)
實現(xiàn)步驟
- 使用PdfDocument類新建一個PDF文檔。
- 使用PdfDocument.Pages.Add()方法向文檔中添加一頁。
- 使用PdfPageBase.Canvas.Save()方法保存頁面畫布的初始狀態(tài)。
- 使用PdfPageBase.Canvas.SetTransparency()方法對頁面畫布應用透明度。
- 使用PdfPageBase.Canvas.RotateTransform()方法將頁面的坐標系移動到繪制圖片的位置并旋轉(zhuǎn)特定角度。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfPageBase.Canvas.Restore()方法恢復頁面畫布的狀態(tài)。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實現(xiàn)代碼
以下Python代碼展示了如何在PDF中設置圖片的透明度與旋轉(zhuǎn)角度:
from spire.pdf.common import *
from spire.pdf import *
# 創(chuàng)建PDF文檔
pdf = PdfDocument()
# 添加頁面
page = pdf.Pages.Add()
# 指定繪制圖片的位置和尺寸
x, y, width, height = 50.0, 200.0, 200.0, 100.0
# 保存頁面畫布的狀態(tài)
state = page.Canvas.Save()
# 對頁面畫布應用透明度
page.Canvas.SetTransparency(0.5)
# 將坐標系移動到繪制圖片的特定坐標,并將頁面畫布逆時針旋轉(zhuǎn)45度
page.Canvas.RotateTransform(-45.0, PointF(x, y))
# 加載圖片
image = PdfImage.FromFile("C:/Users/Administrator/Desktop/img.png")
# 在頁面的指定位置繪制圖片
page.Canvas.DrawImage(image, x, y, width, height)
# 恢復頁面畫布的狀態(tài)
page.Canvas.Restore(state)
# 保存PDF文檔
pdf.SaveToFile("設置圖片透明度與旋轉(zhuǎn).pdf")
pdf.Close()八、Python 壓縮 PDF 圖片
實現(xiàn)步驟
- 使用PdfCompressor類打開PDF文檔。
- 設置圖片壓縮選項。
- 使用PdfCompressor.CompressToFile()方法壓縮PDF并保存。
示例代碼
以下Python代碼展示了如何壓縮PDF文檔中的圖片:
from spire.pdf import *
# 使用PdfCompressor類打開現(xiàn)有PDF
compressor = PdfCompressor("測試.pdf")
# 設置圖片壓縮選項
compression_options = compressor.OptimizationOptions
compression_options.SetImageQuality(ImageQuality.Low)
compression_options.SetResizeImages(True)
compression_options.SetIsCompressImage(True)
# 壓縮PDF文件中的圖片,并將結(jié)果保存到新文件
compressor.CompressToFile("壓縮圖片.pdf")九、Python 刪除 PDF 圖片
實現(xiàn)步驟
- 使用PdfDocument類打開PDF文檔。
- 遍歷文檔中的所有頁面。
- 使用PdfPageBase.ImagesInfo屬性獲取當前頁面的圖片信息集合。
- 遍歷集合中的所有圖片。
- 使用PdfPageBase.DeleteImage()方法將當前圖片從頁面上刪除。
- 使用Pdf.SaveToFile()方法保存修改后的PDF文檔。
示例代碼
以下Python代碼展示了如何刪除PDF文檔中的圖片:
from spire.pdf import *
# 打開現(xiàn)有PDF文檔
pdf = PdfDocument("example.pdf")
# 遍歷所有頁面
for page_index in range(pdf.Pages.Count):
page = pdf.Pages[page_index]
imageInfo = page.ImagesInfo
# 刪除頁面上的所有圖片
for i in range(len(imageInfo) - 1, -1, -1):
page.DeleteImage(imageInfo[i])
# 保存文檔
pdf.SaveToFile("刪除圖片.pdf")
pdf.Close()以上就是使用Python處理PDF圖片的所有內(nèi)容。
到此這篇關(guān)于Python批量處理PDF圖片的操作指南(插入、壓縮、提取、替換、分頁、旋轉(zhuǎn)、刪除)的文章就介紹到這了,更多相關(guān)Python處理PDF圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用torchtext導入NLP數(shù)據(jù)集的操作
這篇文章主要介紹了使用torchtext導入NLP數(shù)據(jù)集的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
Django的數(shù)據(jù)模型訪問多對多鍵值的方法
這篇文章主要介紹了Django的數(shù)據(jù)模型訪問多對多鍵值的方法,Django是Python豐富多彩的web框架中最具人氣的一個,需要的朋友可以參考下2015-07-07
在Pycharm的Project Files下建立多個項目的操作
這篇文章主要介紹了在Pycharm的Project Files下建立多個項目的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
通過conda把已有虛擬環(huán)境的python版本進行降級操作指南
當使用conda創(chuàng)建虛擬環(huán)境時,有時候可能會遇到python版本不對的問題,下面這篇文章主要給大家介紹了關(guān)于如何通過conda把已有虛擬環(huán)境的python版本進行降級操作的相關(guān)資料,需要的朋友可以參考下2024-05-05

