Python批量處理PDF圖片的操作指南(插入、壓縮、提取、替換、分頁、旋轉(zhuǎn)、刪除)
一、概述
圖片是 PDF 文檔的核心元素之一,它們不僅能夠增強(qiáng)文檔的視覺吸引力,還能有效傳達(dá)信息,幫助讀者更好地理解內(nèi)容和主題。在實(shí)際操作中,我們常需要對PDF中的圖片進(jìn)行多種處理,包括插入、提取、替換、旋轉(zhuǎn)、分頁、壓縮、刪除等。通過Python編程實(shí)現(xiàn)這些操作的自動化,不僅可以提升工作效率,還能減少人為錯誤率,特別適用于大批量文檔處理的場景。這篇文章將詳細(xì)介紹如何使用Python在PDF中實(shí)現(xiàn)圖片插入、提取、替換、壓縮、分頁、旋轉(zhuǎn)和刪除等操作。
二、 使用工具
要在Python中實(shí)現(xiàn)PDF圖片處理,需要一個合適的PDF處理庫。本文將使用Spire.PDF for Python,該庫主要用于在Python應(yīng)用程序中創(chuàng)建、讀取、轉(zhuǎn)換和編輯PDF文檔。
安裝 Spire.PDF
在開始之前,需要先安裝 Spire.PDF 庫。你可以在終端中運(yùn)行以下命令進(jìn)行安裝:
pip install spire.pdf
三、Python 在 PDF 中插入圖片
插入圖片可以分多種場景,例如插入圖片到現(xiàn)有PDF,插入圖片到新建PDF,批量插入多張圖片到PDF等。下面將對這幾種場景進(jìn)行逐一介紹。
3.1 插入圖片到現(xiàn)有PDF
實(shí)現(xiàn)步驟
- 使用PdfDocument類加載現(xiàn)有PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要插入圖片的目標(biāo)頁面。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實(shí)現(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") # 指定繪制圖片的坐標(biāo)和大小 (如果需要按照原圖大小插入,則不指定寬度和高度) 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
實(shí)現(xiàn)步驟
- 使用PdfDocument類創(chuàng)建一個新的PDF文檔。
- 使用PdfDocument.Pages.Add()方法給新建的PDF文檔添加一個頁面。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實(shí)現(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") # 指定繪制圖片的坐標(biāo)和大小 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
實(shí)現(xiàn)步驟
批量插入圖片到PDF需要遍歷圖片列表,然后依次將它們繪制到PDF頁面上。實(shí)現(xiàn)步驟與上面的步驟類似,這里不再詳細(xì)描述。
實(shí)現(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ù)
實(shí)現(xiàn)步驟
- 使用PdfDocument類加載PDF文檔。
- 遍歷文檔的所有頁面。
- 獲取當(dāng)前頁面的圖片信息集合。
- 遍歷頁面的圖片信息集合。
- 獲取每張圖片的位置信息和尺寸。
- 將圖片保存到指定路徑并打印其元數(shù)據(jù),如所在頁碼、圖片號、位置、尺寸、保存位置等。
實(shí)現(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) # 打印圖片的詳細(xì)信息 print({ "頁面": page_index + 1, "圖片": i + 1, "寬度和高度": f"{width}x{height}", "位置": (bounds.X, bounds.Y), "保存位置": file_path }) # 關(guān)閉文檔 pdf.Close()
五、Python 替換 PDF 圖片
替換PDF圖片可以分兩種場景,一種是使用新圖片替換文檔中的圖片,另一種是使用文字替換圖片。下面將對這兩種替換場景進(jìn)行逐一介紹。
5.1 使用圖片替換圖片
實(shí)現(xiàn)步驟
- 使用PdfDocument類加載PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要替換圖片的目標(biāo)頁面。
- 使用PdfPageBase.ReplaceImage()方法將頁面中的指定圖片替換為新圖片。使用該方法,替換后的圖片將保持原始圖片的大小和位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實(shí)現(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 使用文字替換圖片
實(shí)現(xiàn)步驟
- 使用PdfDocument類加載PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要替換圖片的目標(biāo)頁面。
- 使用PdfPageBase.ImagesInfo屬性獲取頁面的圖片信息。
- 從圖片信息集合中獲取第一個圖片的圖片流數(shù)據(jù)并將其加載到PdfImage對象。
- 獲取圖片對象的尺寸和坐標(biāo)位置。
- 將圖片從頁面中刪除。
- 將文字繪制到圖片位置。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果文檔。
實(shí)現(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) # 獲取圖片的坐標(biāo) x = imageInfo[0].Bounds.X y = imageInfo[0].Bounds.Y # 從頁面刪除圖片 page.DeleteImage(0) # 指定繪制文字的矩形區(qū)域(與圖片的位置和尺寸相同) rect = RectangleF(PointF(x, y), SizeF(width, height)) # 設(shè)置文本對齊方式 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 實(shí)現(xiàn) PDF 圖片分頁布局
實(shí)現(xiàn)步驟
在將圖片插入PDF頁面時,可能會遇到圖片太大,一張頁面顯示不完的情況。這種情況下,就需要將顯示不完的部分繪制到下一頁,以確保其完全可見。具體實(shí)現(xiàn)步驟如下:
- 使用PdfDocument類新建一個PDF文檔。
- 向文檔中添加一頁。
- 使用PdfTextLayout類設(shè)置分頁布局。
- 使用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") # 設(shè)置布局選項(xiàng),使圖片分頁 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 設(shè)置 PDF 圖片透明度與旋轉(zhuǎn)
實(shí)現(xiàn)步驟
- 使用PdfDocument類新建一個PDF文檔。
- 使用PdfDocument.Pages.Add()方法向文檔中添加一頁。
- 使用PdfPageBase.Canvas.Save()方法保存頁面畫布的初始狀態(tài)。
- 使用PdfPageBase.Canvas.SetTransparency()方法對頁面畫布應(yīng)用透明度。
- 使用PdfPageBase.Canvas.RotateTransform()方法將頁面的坐標(biāo)系移動到繪制圖片的位置并旋轉(zhuǎn)特定角度。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfPageBase.Canvas.Restore()方法恢復(fù)頁面畫布的狀態(tài)。
- 使用PdfDocument.SaveToFile()方法保存結(jié)果PDF文檔。
實(shí)現(xiàn)代碼
以下Python代碼展示了如何在PDF中設(shè)置圖片的透明度與旋轉(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() # 對頁面畫布應(yīng)用透明度 page.Canvas.SetTransparency(0.5) # 將坐標(biāo)系移動到繪制圖片的特定坐標(biāo),并將頁面畫布逆時針旋轉(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) # 恢復(fù)頁面畫布的狀態(tài) page.Canvas.Restore(state) # 保存PDF文檔 pdf.SaveToFile("設(shè)置圖片透明度與旋轉(zhuǎn).pdf") pdf.Close()
八、Python 壓縮 PDF 圖片
實(shí)現(xiàn)步驟
- 使用PdfCompressor類打開PDF文檔。
- 設(shè)置圖片壓縮選項(xiàng)。
- 使用PdfCompressor.CompressToFile()方法壓縮PDF并保存。
示例代碼
以下Python代碼展示了如何壓縮PDF文檔中的圖片:
from spire.pdf import * # 使用PdfCompressor類打開現(xiàn)有PDF compressor = PdfCompressor("測試.pdf") # 設(shè)置圖片壓縮選項(xiàng) compression_options = compressor.OptimizationOptions compression_options.SetImageQuality(ImageQuality.Low) compression_options.SetResizeImages(True) compression_options.SetIsCompressImage(True) # 壓縮PDF文件中的圖片,并將結(jié)果保存到新文件 compressor.CompressToFile("壓縮圖片.pdf")
九、Python 刪除 PDF 圖片
實(shí)現(xiàn)步驟
- 使用PdfDocument類打開PDF文檔。
- 遍歷文檔中的所有頁面。
- 使用PdfPageBase.ImagesInfo屬性獲取當(dāng)前頁面的圖片信息集合。
- 遍歷集合中的所有圖片。
- 使用PdfPageBase.DeleteImage()方法將當(dāng)前圖片從頁面上刪除。
- 使用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)文章
Python使用matplotlib繪制三維參數(shù)曲線操作示例
這篇文章主要介紹了Python使用matplotlib繪制三維參數(shù)曲線操作,結(jié)合實(shí)例形式分析了Python使用matplotlib的數(shù)值計算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下2019-09-09詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本
這篇文章主要介紹了詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02django連接Mysql中已有數(shù)據(jù)庫的方法詳解
眾所周知Django較為適合原生開發(fā),即通過該框架搭建一個全新的項(xiàng)目,通過在修改models.py來創(chuàng)建新的數(shù)據(jù)庫表,下面這篇文章主要給大家介紹了關(guān)于django連接Mysql中已有數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2022-05-05探索Python進(jìn)度條魔法解密任務(wù)進(jìn)展新玩法
在日常編程和應(yīng)用開發(fā)中,展示進(jìn)度條是一種常見的技巧,不僅能夠提供用戶友好的體驗(yàn),還可以顯示任務(wù)執(zhí)行的進(jìn)度,Python作為一種多才多藝的編程語言,提供了多種方法來創(chuàng)建進(jìn)度條,本篇文章將深入探討這些方法,為您呈現(xiàn)各種實(shí)現(xiàn)進(jìn)度條的技術(shù)和技巧2024-01-01Python列表創(chuàng)建、操作、刪除與遍歷的全方位解析
Python列表是編程中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),用于存儲有序元素集合,列表中的元素可以是不同類型,增強(qiáng)了數(shù)據(jù)處理的靈活性,本文詳細(xì)介紹了列表的常用操作,如查找元素索引、插入、刪除、遍歷等,需要的朋友可以參考下2024-11-11