Python批量处理PDF图片的操作指南(插入、压缩、提取、替换、分页、旋转、删除)!
Python批量处理PDF图片的操作指南(插入、压缩、提取、替换、分页、旋转、删除)!
一、概述
图片是 PDF 文档的核心元素之一,它们不仅能够增强文档的视觉吸引力,还能有效传达信息,帮助读者更好地理解内容和主题。在实际操作中,我们常需要对PDF中的图片进行多种处理,包括插入、提取、替换、旋转、分页、压缩、删除等。通过Python编程实现这些操作的自动化,不仅可以提升工作效率,还能减少人为错误率,特别适用于大批量文档处理的场景。这篇文章将详细介绍如何使用Python在PDF中实现图片插入、提取、替换、压缩、分页、旋转和删除等操作。
二、 使用工具
要在Python中实现PDF图片处理,需要一个合适的PDF处理库。本文将使用Spire.PDF for Python,该库主要用于在Python应用程序中创建、读取、转换和编辑PDF文档。
安装 Spire.PDF
在开始之前,需要先安装 Spire.PDF 库。你可以在终端中运行以下命令进行安装:
|
1
|
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文档:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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文档并插入一张图片:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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文档:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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中的图片及其元数据,如尺寸、位置和所在页码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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中的指定图片:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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()方法保存结果文档。
实现代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
from spire.pdf import *# 打开现有PDF文档pdf = PdfDocument("测试.pdf")# 获取PDF第一页page = pdf.Pages[0]# 从页面获取图片信息imageInfo = page.ImagesInfo# 提取页面中的第一个图片image = PdfImage.FromStream(imageInfo[0].Image)# 获取图片的尺寸(单位为像素)widthInPixel = image.WidthheightInPixel = image.Height# 将像素值转换为磅值convertor = PdfUnitConvertor()width = convertor.ConvertFromPixels(float(widthInPixel), PdfGraphicsUnit.Point)height = convertor.ConvertFromPixels(float(heightInPixel), PdfGraphicsUnit.Point)# 获取图片的坐标x = imageInfo[0].Bounds.Xy = imageInfo[0].Bounds.Y# 从页面删除图片page.DeleteImage(0)# 指定绘制文字的矩形区域(与图片的位置和尺寸相同)rect = RectangleF(PointF(x, y), SizeF(width, height))# 设置文本对齐方式strformat = PdfStringFormat()strformat.Alignment = PdfTextAlignment.Centerstrformat.LineAlignment = PdfVerticalAlignment.Middle# 将文字绘制到图片位置page.Canvas.DrawString("替换文本", PdfFont(PdfFontFamily.Helvetica, 18.0), PdfBrushes.get_Purple(), rect, strformat)# 保存修改后的PDFpdf.SaveToFile("文字替换图片.pdf")pdf.Close() |
六、Python 实现 PDF 图片分页布局
实现步骤
在将图片插入PDF页面时,可能会遇到图片太大,一张页面显示不完的情况。这种情况下,就需要将显示不完的部分绘制到下一页,以确保其完全可见。具体实现步骤如下:
- 使用PdfDocument类新建一个PDF文档。
- 向文档中添加一页。
- 使用PdfTextLayout类设置分页布局。
- 使用PdfImage.Draw()方法,以分页布局在页面上绘制图片。
- 使用PdfDocument.SaveToFile()方法保存结果PDF文档。
示例代码
以下Python代码展示了如何添加一张大图片到PDF并使其分页显示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
from spire.pdf import *# 创建PDF文档pdf = PdfDocument()# 添加页面page = pdf.Pages.Add()# 加载图片image = PdfImage.FromFile("img.png")# 设置布局选项,使图片分页format = PdfTextLayout()format.Break = PdfLayoutBreakType.FitPageformat.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中设置图片的透明度与旋转角度:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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文档中的图片:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from spire.pdf import *# 使用PdfCompressor类打开现有PDFcompressor = PdfCompressor("测试.pdf")# 设置图片压缩选项compression_options = compressor.OptimizationOptionscompression_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文档中的图片:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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图片的所有内容。
到此这篇关于Python批量处理PDF图片的操作指南(插入、压缩、提取、替换、分页、旋转、删除)的文章就介绍到这了。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

