使用 Python 来操作 PDF 文本的格式,是提高文档处理效率的有效方法。借助 Spire.PDF for Python 库,开发者可以通过其文本查找功能精确定位文本,轻松获取其格式信息,并对文本的颜色、大小和字体等格式进行修改。这种方式特别适合需要在大量 PDF 文档中统一调整特定文本的格式的场景,不仅节省操作的时间,还能确保格式的一致性。
本文将演示如何使用 Spire.PDF for Python,通过 Python 代码获取并修改 PDF 文档中文本的格式。
安装 Spire.PDF for Python
本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF
如果您不确定如何安装,请参考:如何在 Windows 中安装 Spire.PDF for Python
在 PDF 中查找文本并获取其字体格式
开发者可以使用 Spire.PDF for Python 提供的 PdfTextFinder 和 PdfTextFindOptions 类,在 PDF 文档中精确搜索指定文本,并获取代表搜索结果的 PdfTextFragment 对象集合。然后,开发者可以通过 PdfTextFragment.TextStates[] 属性下的一些属性,访问指定搜索结果文本的格式信息,如字体名称 (FontName)、字体大小 (FontSize) 和字体族 (FontFamily)。
查找 PDF 中的文本并获取其字体信息的详细步骤如下:
- 创建 PdfDocument 类的实例,并使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
- 使用 PdfDocument.Pages.get_Item() 方法获取页面。
- 使用获取的页面创建 PdfTextFinder 对象。
- 创建 PdfTextFindOptions 对象,设置搜索选项,并通过 PdfTextFinder.Options 属性应用这些选项。
- 使用 PdfTextFinder.Find() 方法在页面上查找指定文本,获取 PdfTextFragment 对象的集合。
- 通过 PdfTextFragment.TextStates 属性获取第一个搜索结果的格式信息。
- 通过 PdfTextStates[0].FontName、PdfTextStates[0].FontSize 和 PdfTextStates[0].FontFamily 属性,获取该搜索结果的字体名称、字体大小和字体族。
- 输出结果。
- Python
from spire.pdf import *
# 创建一个 PdfDocument 实例
pdf = PdfDocument()
# 加载一个PDF文件
pdf.LoadFromFile("示例.pdf")
# 获取第一页
page = pdf.Pages.get_Item(0)
# 创建一个 PdfTextFinder 实例
finder = PdfTextFinder(page)
# 创建一个 PdfTextFindOptions 实例并设置搜索选项
options = PdfTextFindOptions()
options.CaseSensitive = True # 设置为区分大小写
options.WholeWords = True # 设置为全词匹配
# 应用这些选项
finder.Options = options
# 查找指定文本
fragments = finder.Find("云服务器的概念与工作原理")
# 获取第一个片段的格式
formatting = fragments[0].TextStates
# 获取格式信息
fontInfo = ""
fontInfo += "文本: " + fragments[0].Text
fontInfo += "\n字体: " + formatting[0].FontName
fontInfo += "\n字体大小: " + str(formatting[0].FontSize)
fontInfo += "\n字体族: " + formatting[0].FontFamily
# 输出字体信息
print(fontInfo)
# 释放资源
pdf.Dispose()
在 PDF 中查找文本并修改其格式
在 PDF 文档中找到指定文本后,开发者还可以在相同的位置上覆盖一个与背景颜色相同的矩形,然后以新的格式重绘文本,从而实现对纯色背景页面上的简单 PDF 文本片段的格式进行修改。具体步骤如下:
- 创建 PdfDocument 类的实例,并使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
- 通过 PdfDocument.Pages.get_Item() 方法获取页面。
- 使用页面创建 PdfTextFinder 对象。
- 创建 PdfTextFindOptions 对象,设置搜索选项,并通过 PdfTextFinder.Options 属性应用这些选项。
- 使用 PdfTextFinder.Find() 方法查找页面上的指定文本,并获取第一个结果。
- 通过 PdfPageBase.BackgroundColor 属性获取页面背景颜色,如果背景为空,则将颜色改为白色。
- 使用 PdfPageBase.Canvas.DrawRectangle() 方法,在找到的文本位置绘制获得的颜色矩形。
- 创建新的字体、画刷和字符串格式,并计算文本位置。
- 使用 PdfPageBase.Canvas.DrawString() 方法,在相同位置以新的格式重绘文本。
- 使用 PdfDocument.SaveToFile() 方法保存文档。
- Python
from spire.pdf import *
# 创建一个 PdfDocument 实例
pdf = PdfDocument()
# 从指定路径加载一个PDF文件
pdf.LoadFromFile("示例.pdf")
# 获取第一页
page = pdf.Pages.get_Item(0)
# 创建一个 PdfTextFinder 实例
finder = PdfTextFinder(page)
# 创建一个 PdfTextFindOptions 实例并设置搜索选项
options = PdfTextFindOptions()
options.CaseSensitive = True # 设置为区分大小写
options.WholeWords = True # 设置为全词匹配
finder.Options = options
# 查找指定文本
text = "云服务器的概念与工作原理"
fragments = finder.Find(text)
# 获取第一个结果
fragment = fragments[0]
# 获取页面背景颜色,如果其为空,则将其改为白色
backColor = page.BackgroundColor
if backColor.ToArgb() == 0:
backColor = Color.get_White()
# 使用背景色绘制矩形以覆盖原有文本
for i in range(len(fragment.Bounds)):
page.Canvas.DrawRectangle(PdfSolidBrush(PdfRGBColor(backColor)), fragment.Bounds[i])
# 创建新的字体和画刷
font = PdfTrueTypeFont("微软雅黑", 13.0, PdfFontStyle.Italic, True)
brush = PdfBrushes.get_Brown()
# 创建一个 PdfStringFormat 实例,并设置对齐方式
stringFormat = PdfStringFormat()
stringFormat.Alignment = PdfTextAlignment.Left # 左对齐
# 计算包含文本的矩形区域
point = fragment.Bounds[0].Location # 文本框起始位置
size = SizeF(fragment.Bounds[-1].Right, fragment.Bounds[-1].Bottom) # 文本框大小
rect = RectangleF(point, size) # 定义文本框矩形
# 在同一矩形区域内用指定格式绘制新文本
page.Canvas.DrawString(text, font, brush, rect, stringFormat)
# 保存文档到输出文件
pdf.SaveToFile("output/查找修改PDF文本格式.pdf")
# 释放资源
pdf.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。