生成中文 PDF 时,不要把文字截图后塞进文件。本例先将 DeepSeek 的已核对内容保存为 UTF-8 文本,再用 fpdf2 嵌入中文字体、自动换行,输出可以选择和搜索文字的 PDF。
准备输入与运行环境
Python 3.11,执行 python -m pip install fpdf2。准备内容为虚构报告短文的 report.txt,以及你有权嵌入 PDF 的中文 TTF 字体。示例采用 Windows 字体目录的 simhei.ttf;其他系统应改成实际字体路径,并先确认字体许可。

给 DeepSeek 的任务说明
请输出可核对的中文报告正文,不虚构数据和来源。我会保存为 report.txt。请给 fpdf2 代码,使用我本地合法字体生成可搜索的文本 PDF,设置边距、自动分页和多行换行;不要把中文当图片,不覆盖已有文件。
在本地运行与检查
将下面代码保存为 example_18.py。进入保存该文件的目录,在终端执行 python example_18.py。代码应由你检查后执行,按实际字段修改。
from pathlib import Path
from fpdf import FPDF
text_path = Path("report.txt")
font_path = Path("C:/Windows/Fonts/simhei.ttf")
out = Path("report.pdf")
if out.exists():
raise FileExistsError("输出已存在")
if not font_path.is_file():
raise FileNotFoundError("请将 font_path 改为获准中文 TTF 字体路径")
text = text_path.read_text(encoding="utf-8-sig").strip()
if not text:
raise ValueError("正文为空")
pdf = FPDF()
pdf.set_margins(15, 15, 15)
pdf.set_auto_page_break(auto=True, margin=15)
pdf.add_font("Chinese", fname=str(font_path))
pdf.add_page()
pdf.set_font("Chinese", size=12)
pdf.multi_cell(w=0, h=8, text=text)
pdf.output(str(out))
print(out.resolve(), "pages", pdf.page_no(), "bytes", out.stat().st_size)
为什么要指定中文字体
PDF 默认的核心字体不能涵盖所有中文字符。fpdf2 支持加入 Unicode 字体并嵌入所需字形;字体不含某个字仍可能缺字,所以要测试正文实际使用的字符。代码里的字体路径存在不等于许可允许任意分发。
长文本与复杂排版
multi_cell 按可用宽度换行,自动分页处理页面高度。图片、表格、标题层级、长网址和页码需要另写布局,不能把整个 Markdown 原文放进来就期待复杂样式被识别。尤其要人工查看换行与页面边缘。
输出后检查而不是只看文件大小
打开 PDF 搜索正文里一个中文短语,并选中复制到纯文本编辑器核对。文件存在且能打开不代表所有汉字都有字形;逐页看有没有方框、缺字、超出边界或空白页。
怎样确认结果正确
用两行短文“演示报告:本月样例数量为 2。以上为虚构格式演示。”应生成至少 1 页 report.pdf。打开后能搜索“演示报告”,复制文字与原文一致;页面中文不应显示方框。用较长测试文本时检查自动换行与分页。
适用边界与常见问题
报告内容是人为写的格式演示,不是真实统计或 DeepSeek 实测输出。代码只处理纯文本,未还原 Word、Markdown 或复杂模板;字体是否可嵌入、文件能否在目标阅读器正确显示需要按实际字体和阅读器核对。
资料依据
接口说明核验日期:2026 年 10 月 1 日。fpdf2 Unicode 字体;fpdf2 文本说明。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30367.html