能否用开源Python库borb将PDF中Wingdings字体文本改为Arial?
用borb修改PDF中Wingdings字体文本为Arial
完全可以用borb实现这个需求,核心思路是遍历PDF页面的文本元素,识别使用Wingdings字体的内容,再替换为Arial字体并重新渲染。以下是具体实现步骤和代码示例:
首先安装最新版borb:
pip install --upgrade borb编写处理代码:
from borb.pdf import PDF from borb.pdf.canvas.layout.text.chunk_of_text import ChunkOfText from borb.pdf.canvas.font.simple_font.font_type_1 import FontType1 from borb.pdf.canvas.font.font import Font from borb.pdf.document.document import Document from typing import List, Tuple def replace_font_in_pdf(input_path: str, output_path: str, target_font_name: str, replacement_font: Font): # 加载PDF文档 doc: Document = PDF.loads(open(input_path, "rb")) # 遍历每一页 for page in doc.get_pages(): # 获取页面所有文本元素 text_elements: List[Tuple[float, float, float, float, str, Font]] = [] page.get_text_elements(text_elements) # 清除原页面文本(避免重叠) page._content_stream = [] # 重新渲染文本,替换目标字体 for x, y, w, h, text, font in text_elements: if font.get_font_name() == target_font_name: # 使用Arial替换Wingdings chunk = ChunkOfText(text, font=replacement_font, font_size=font.get_font_size()) else: # 保留原字体 chunk = ChunkOfText(text, font=font, font_size=font.get_font_size()) # 设置文本位置(适配borb坐标原点) chunk.set_x(x) chunk.set_y(y - h) chunk.draw(page) # 保存修改后的PDF with open(output_path, "wb") as f: PDF.dumps(f, doc) # 主程序 if __name__ == "__main__": # 加载borb内置的Arial字体 arial_font: Font = FontType1("Arial") # 执行字体替换 replace_font_in_pdf("input.pdf", "output.pdf", "Wingdings", arial_font)
需要注意的细节:
- 确认
target_font_name与PDF中实际的Wingdings字体名称完全匹配,部分PDF可能使用"Wingdings-Regular"这类变体,可通过打印font.get_font_name()查看具体名称 - 文本位置的调整可能需要根据PDF实际布局微调,borb默认以页面左下角为坐标原点
- 若PDF包含复杂布局(如表格、文本框内的文本),需额外处理元素的容器关系
内容的提问来源于stack exchange,提问作者David Weiss
相关产品推荐
相关产品推荐

