目錄
一、概述
二、 使用工具
三、Python 在 PDF 中插入圖片
3.1 插入圖片到現有PDF
3.2 插入圖片到新建PDF
3.3 批量插入多張圖片到PDF
四、Python 提取 PDF 圖片及其元數據
五、Python 替換 PDF 圖片
5.1 使用圖片替換圖片
5.2 使用文字替換圖片
六、Python 實現 PDF 圖片分頁布局
七、Python 設置 PDF 圖片透明度與旋轉
八、Python 壓縮 PDF 圖片
九、Python 刪除 PDF 圖片
一、概述
圖片是 PDF 文檔的核心元素之一,它們不僅能夠增強文檔的視覺吸引力,還能有效傳達信息,幫助讀者更好地理解內容和主題。在實際操作中,我們常需要對PDF中的圖片進行多種處理,包括插入、提取、替換、旋轉、分頁、壓縮、刪除等。通過Python編程實現這些操作的自動化,不僅可以提升工作效率,還能減少人為錯誤率,特別適用于大批量文檔處理的場景。這篇文章將詳細介紹如何使用Python在PDF中實現圖片插入、提取、替換、壓縮、分頁、旋轉和刪除等操作。
二、 使用工具
要在Python中實現PDF圖片處理,需要一個合適的PDF處理庫。本文將使用Spire.PDF for Python,該庫主要用于在Python應用程序中創建、讀取、轉換和編輯PDF文檔。
安裝 Spire.PDF
在開始之前,需要先安裝 Spire.PDF 庫。你可以在終端中運行以下命令進行安裝:
pip install spire.pdf
三、Python 在 PDF 中插入圖片
插入圖片可以分多種場景,例如插入圖片到現有PDF,插入圖片到新建PDF,批量插入多張圖片到PDF等。下面將對這幾種場景進行逐一介紹。
3.1 插入圖片到現有PDF
實現步驟
- 使用PdfDocument類加載現有PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要插入圖片的目標頁面。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfDocument.SaveToFile()方法保存結果PDF文檔。
實現代碼
以下Python代碼展示了如何插入一張圖片到現有PDF文檔:
from spire.pdf import *# 打開現有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("插入圖片到現有PDF.pdf", FileFormat.PDF)
pdf.Close()
3.2 插入圖片到新建PDF
實現步驟
- 使用PdfDocument類創建一個新的PDF文檔。
- 使用PdfDocument.Pages.Add()方法給新建的PDF文檔添加一個頁面。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfDocument.SaveToFile()方法保存結果PDF文檔。
實現代碼
以下Python代碼展示了如何新建一個PDF文檔并插入一張圖片:
from spire.pdf import *# 創建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
實現步驟
批量插入圖片到PDF需要遍歷圖片列表,然后依次將它們繪制到PDF頁面上。實現步驟與上面的步驟類似,這里不再詳細描述。
實現代碼
以下Python代碼展示了如何批量插入多張圖片到一個新的PDF文檔:
from spire.pdf import *def batch_insert_images(image_paths, positions):# 創建新的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()# 調用
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 圖片及其元數據
實現步驟
- 使用PdfDocument類加載PDF文檔。
- 遍歷文檔的所有頁面。
- 獲取當前頁面的圖片信息集合。
- 遍歷頁面的圖片信息集合。
- 獲取每張圖片的位置信息和尺寸。
- 將圖片保存到指定路徑并打印其元數據,如所在頁碼、圖片號、位置、尺寸、保存位置等。
實現代碼
以下Python代碼展示了如何提取PDF中的圖片及其元數據,如尺寸、位置和所在頁碼:
from spire.pdf import *
import os# 打開現有PDF文檔
pdf = PdfDocument("測試.pdf")# 創建保存圖片的目錄
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].Boundswidth = bounds.Widthheight = bounds.Height# 構建保存圖片的文件路徑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})# 關閉文檔
pdf.Close()
五、Python 替換 PDF 圖片
替換PDF圖片可以分兩種場景,一種是使用新圖片替換文檔中的圖片,另一種是使用文字替換圖片。下面將對這兩種替換場景進行逐一介紹。
5.1 使用圖片替換圖片
實現步驟
- 使用PdfDocument類加載PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要替換圖片的目標頁面。
- 使用PdfPageBase.ReplaceImage()方法將頁面中的指定圖片替換為新圖片。使用該方法,替換后的圖片將保持原始圖片的大小和位置。
- 使用PdfDocument.SaveToFile()方法保存結果PDF文檔。
實現代碼
以下Python代碼展示了如何使用新圖片替換PDF中的指定圖片:
from spire.pdf import *# 打開現有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 使用文字替換圖片
實現步驟
- 使用PdfDocument類加載PDF文檔。
- 使用PdfDocument.Pages[index]屬性獲取要替換圖片的目標頁面。
- 使用PdfPageBase.ImagesInfo屬性獲取頁面的圖片信息。
- 從圖片信息集合中獲取第一個圖片的圖片流數據并將其加載到PdfImage對象。
- 獲取圖片對象的尺寸和坐標位置。
- 將圖片從頁面中刪除。
- 將文字繪制到圖片位置。
- 使用PdfDocument.SaveToFile()方法保存結果文檔。
實現代碼:
from spire.pdf import *# 打開現有PDF文檔
pdf = PdfDocument("測試.pdf")# 獲取PDF第一頁
page = pdf.Pages[0]# 從頁面獲取圖片信息
imageInfo = page.ImagesInfo# 提取頁面中的第一個圖片
image = PdfImage.FromStream(imageInfo[0].Image)# 獲取圖片的尺寸(單位為像素)
widthInPixel = image.Width
heightInPixel = image.Height# 將像素值轉換為磅值
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)# 指定繪制文字的矩形區域(與圖片的位置和尺寸相同)
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 實現 PDF 圖片分頁布局
實現步驟
在將圖片插入PDF頁面時,可能會遇到圖片太大,一張頁面顯示不完的情況。這種情況下,就需要將顯示不完的部分繪制到下一頁,以確保其完全可見。具體實現步驟如下:
- 使用PdfDocument類新建一個PDF文檔。
- 向文檔中添加一頁。
- 使用PdfTextLayout類設置分頁布局。
- 使用PdfImage.Draw()方法,以分頁布局在頁面上繪制圖片。
- 使用PdfDocument.SaveToFile()方法保存結果PDF文檔。
示例代碼
以下Python代碼展示了如何添加一張大圖片到PDF并使其分頁顯示:
from spire.pdf import *# 創建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 圖片透明度與旋轉
實現步驟
- 使用PdfDocument類新建一個PDF文檔。
- 使用PdfDocument.Pages.Add()方法向文檔中添加一頁。
- 使用PdfPageBase.Canvas.Save()方法保存頁面畫布的初始狀態。
- 使用PdfPageBase.Canvas.SetTransparency()方法對頁面畫布應用透明度。
- 使用PdfPageBase.Canvas.RotateTransform()方法將頁面的坐標系移動到繪制圖片的位置并旋轉特定角度。
- 使用PdfImage.FromFile方法加載圖片到PdfImage對象。
- 使用PdfPageBase.Canvas.DrawImage()方法將該圖片對象繪制到頁面的指定位置。
- 使用PdfPageBase.Canvas.Restore()方法恢復頁面畫布的狀態。
- 使用PdfDocument.SaveToFile()方法保存結果PDF文檔。
實現代碼
以下Python代碼展示了如何在PDF中設置圖片的透明度與旋轉角度:
from spire.pdf.common import *
from spire.pdf import *# 創建PDF文檔
pdf = PdfDocument()# 添加頁面
page = pdf.Pages.Add()# 指定繪制圖片的位置和尺寸
x, y, width, height = 50.0, 200.0, 200.0, 100.0# 保存頁面畫布的狀態
state = page.Canvas.Save()# 對頁面畫布應用透明度
page.Canvas.SetTransparency(0.5)# 將坐標系移動到繪制圖片的特定坐標,并將頁面畫布逆時針旋轉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)# 恢復頁面畫布的狀態
page.Canvas.Restore(state)# 保存PDF文檔
pdf.SaveToFile("設置圖片透明度與旋轉.pdf")
pdf.Close()
八、Python 壓縮 PDF 圖片
實現步驟
- 使用PdfCompressor類打開PDF文檔。
- 設置圖片壓縮選項。
- 使用PdfCompressor.CompressToFile()方法壓縮PDF并保存。
示例代碼
以下Python代碼展示了如何壓縮PDF文檔中的圖片:
from spire.pdf import *# 使用PdfCompressor類打開現有PDF
compressor = PdfCompressor("測試.pdf")# 設置圖片壓縮選項
compression_options = compressor.OptimizationOptions
compression_options.SetImageQuality(ImageQuality.Low)
compression_options.SetResizeImages(True)
compression_options.SetIsCompressImage(True)# 壓縮PDF文件中的圖片,并將結果保存到新文件
compressor.CompressToFile("壓縮圖片.pdf")
九、Python 刪除 PDF 圖片
實現步驟
- 使用PdfDocument類打開PDF文檔。
- 遍歷文檔中的所有頁面。
- 使用PdfPageBase.ImagesInfo屬性獲取當前頁面的圖片信息集合。
- 遍歷集合中的所有圖片。
- 使用PdfPageBase.DeleteImage()方法將當前圖片從頁面上刪除。
- 使用Pdf.SaveToFile()方法保存修改后的PDF文檔。
示例代碼
以下Python代碼展示了如何刪除PDF文檔中的圖片:
from spire.pdf import *# 打開現有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圖片的所有內容。感謝閱讀!