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

FPDF2转换TXT为PDF时拆分跨行URL的问题求助

解决FPDF2转换TXT为PDF时URL被拆分的问题

问题原因

FPDF2的write()方法默认允许文本在行宽限制或单词边界处拆分输出,长URL即使无空格,一旦超过页面可用宽度,就会被强行拆分,导致URL断裂,无法被识别为完整链接。

解决方案

通过正则识别文本中的URL,将URL作为不可拆分的独立块输出,具体实现如下:

修改后的代码

import glob
import re
from fpdf import FPDF

# 匹配HTTP/HTTPS协议URL的正则规则
URL_PATTERN = re.compile(r'https?://\S+')

# 获取目标路径下的所有TXT文件
txt_files = glob.glob(path + r'\*.txt')       

for txt_file in txt_files:
    pdf = FPDF()
    with open(txt_file, 'r', encoding='utf-8') as infile:
        print(txt_file)
        doc = infile.read()
        pdf.add_page()
        # 加载自定义字体
        pdf.add_font("dejavu-sans", style="", fname="DejaVuSans.ttf")
        pdf.set_font(family="dejavu-sans", style="", size=12)
        
        # 拆分文本为普通内容和URL片段
        text_segments = URL_PATTERN.split(doc)
        url_list = URL_PATTERN.findall(doc)
        
        # 依次输出各部分内容
        for idx, segment in enumerate(text_segments):
            if segment:
                pdf.write(5, segment)
            if idx < len(url_list):
                # 输出URL时禁用拆分,保证URL完整
                pdf.write(5, url_list[idx], split=False)
        
        # 保存PDF文件
        pdf.output(txt_file[:-4] + '.pdf')

超长URL优化(可选)

如果URL长度远超页面宽度,可通过自定义拆分规则,让URL在指定字符(如斜杠、点)处换行,既保证URL完整,又不超出页面边界:

# 在设置字体后添加以下代码,扩展允许拆分的字符
pdf.word_split_chars += ['/', '.', '-']

内容的提问来源于stack exchange,提问作者MaxJay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:33:35