You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用开源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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:39:55