欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python批量處理PDF圖片的操作指南(插入、壓縮、提取、替換、分頁、旋轉(zhuǎn)、刪除)

 更新時間:2025年04月15日 08:43:11   作者:nuclear2011  
圖片是 PDF 文檔的核心元素之一,它們不僅能夠增強(qiáng)文檔的視覺吸引力,還能有效傳達(dá)信息,幫助讀者更好地理解內(nèi)容和主題,在實(shí)際操作中,我們常需要對PDF中的圖片進(jìn)行多種處理,這篇文章將詳細(xì)介紹如何使用Python在PDF中實(shí)現(xià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ù)曲線操作示例

    這篇文章主要介紹了Python使用matplotlib繪制三維參數(shù)曲線操作,結(jié)合實(shí)例形式分析了Python使用matplotlib的數(shù)值計算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • python檢索特定內(nèi)容的文本文件實(shí)例

    python檢索特定內(nèi)容的文本文件實(shí)例

    今天小編就為大家分享一篇python檢索特定內(nèi)容的文本文件實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本

    詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本

    這篇文章主要介紹了詳解Ubuntu16.04安裝Python3.7及其pip3并切換為默認(rèn)版本,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • django連接Mysql中已有數(shù)據(jù)庫的方法詳解

    django連接Mysql中已有數(shù)據(jù)庫的方法詳解

    眾所周知Django較為適合原生開發(fā),即通過該框架搭建一個全新的項(xiàng)目,通過在修改models.py來創(chuàng)建新的數(shù)據(jù)庫表,下面這篇文章主要給大家介紹了關(guān)于django連接Mysql中已有數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • PyQt5每天必學(xué)之事件與信號

    PyQt5每天必學(xué)之事件與信號

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之事件與信號的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 淺談django 重載str 方法

    淺談django 重載str 方法

    這篇文章主要介紹了淺談django 重載str 方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 探索Python進(jìn)度條魔法解密任務(wù)進(jìn)展新玩法

    探索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-01
  • pandas 根據(jù)列的值選取所有行的示例

    pandas 根據(jù)列的值選取所有行的示例

    今天小編就為大家分享一篇pandas 根據(jù)列的值選取所有行的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python列表創(chuàng)建、操作、刪除與遍歷的全方位解析

    Python列表創(chuàng)建、操作、刪除與遍歷的全方位解析

    Python列表是編程中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),用于存儲有序元素集合,列表中的元素可以是不同類型,增強(qiáng)了數(shù)據(jù)處理的靈活性,本文詳細(xì)介紹了列表的常用操作,如查找元素索引、插入、刪除、遍歷等,需要的朋友可以參考下
    2024-11-11
  • python打包成 .so的實(shí)現(xiàn)步驟

    python打包成 .so的實(shí)現(xiàn)步驟

    當(dāng)需要將產(chǎn)品發(fā)布到外部環(huán)境的時候,源碼的保護(hù)尤為重要,因此需要將python文件打成so文件的目的就是為了保護(hù)源碼,本文主要介紹了python打包成.so的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2023-12-12

最新評論