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
相关产品推荐
相关产品推荐

