在日常工作和学习中,我们经常需要将文本内容转换为PDF文件——无论是生成报告、保存笔记,还是制作电子书。手动复制粘贴到Word再另存为PDF,效率太低;用在线工具又担心隐私泄露。
今天,我就带大家用Python实现一个简单的PDF生成器,从纯文本文件一键生成排版整洁的PDF文档。全程代码不超过30行,新手也能轻松上手!
一、为什么用Python生成PDF?
Python在自动化办公领域有着天然的优势。用Python生成PDF,你可以:
批量处理:一次性将成百上千个文本文件转为PDF
自定义排版:自由控制字体、字号、页边距等样式
集成到工作流:结合爬虫、数据分析等,自动生成报告
目前Python生态中有多个成熟的PDF生成库,其中最常用的是 ReportLab 和 fpdf2。
| 库 | 特点 | 适用场景 |
|---|
| ReportLab | 功能强大,支持复杂排版、表格、图表 | 专业报表、复杂文档 |
| fpdf2 | 轻量简洁,纯Python实现,上手快 | 简单文档、收据、表单 |
| WeasyPrint | 支持HTML/CSS转PDF | 已有网页模板的场景 |
对于“从文本生成PDF”这个需求,fpdf2 是最轻量、最易上手的选择。今天我们就用 fpdf2 来实现。
二、准备工作:安装fpdf2
首先,确保你的电脑上已经安装了Python(3.6以上版本)。然后在命令行中执行:
一行命令搞定安装。
三、五分钟上手:生成你的第一个PDF
安装完成后,我们来写第一个示例:
from fpdf import FPDF# 创建PDF对象pdf = FPDF()# 添加一页pdf.add_page()# 设置字体pdf.set_font("helvetica", size=12)# 写入文本pdf.cell(text="Hello, World! 这是我的第一个PDF文件。")# 输出保存pdf.output("my_first_pdf.pdf")
运行这段代码,你会在当前目录下看到一个名为 my_first_pdf.pdf 的文件。
是不是超级简单?
四、实战:从TXT文件生成PDF
上面的例子只是写入了一行文本。实际工作中,我们通常需要读取一个完整的文本文件,然后生成排版美观的PDF。
下面是一个完整的实战代码:
from fpdf import FPDFdef txt_to_pdf(txt_path, pdf_path): # 1. 创建PDF对象,使用A4纸尺寸 pdf = FPDF(orientation='P', unit='mm', format='A4') pdf.add_page() # 2. 设置字体(支持中文需要特殊处理,先用内置字体演示) pdf.set_font("helvetica", size=12) # 3. 读取文本文件 with open(txt_path, 'r', encoding='utf-8') as f: content = f.read() # 4. 将文本写入PDF(自动换行) pdf.multi_cell(w=190, h=10, txt=content, align='L') # 5. 保存PDF pdf.output(pdf_path) print(f"✅ PDF已生成:{pdf_path}")# 使用示例txt_to_pdf("我的笔记.txt", "我的笔记.pdf")
代码解析:
FPDF(orientation='P', unit='mm', format='A4'):创建一个纵向的A4纸PDF
add_page():添加一页
set_font("helvetica", size=12):设置字体为Helvetica,字号12
multi_cell(w=190, h=10, txt=content, align='L'):写入多行文本,宽度190mm,行高10mm,左对齐
output():保存PDF文件
multi_cell 会自动处理换行,当文本超过页面宽度时会自动换行,超过页面高度时会自动分页——非常适合处理长文本。
五、进阶:支持中文显示
上面的代码有一个局限——默认字体不支持中文,中文会显示为乱码。要解决这个问题,需要加载一个支持中文的字体文件。
from fpdf import FPDFclass ChinesePDF(FPDF): def __init__(self): super().__init__() # 注册中文字体(需要提前下载字体文件,如 simsun.ttc) self.add_font('simsun', '', 'simsun.ttc', uni=True) self.set_font('simsun', size=12)def txt_to_pdf_cn(txt_path, pdf_path): pdf = ChinesePDF() pdf.add_page() with open(txt_path, 'r', encoding='utf-8') as f: content = f.read() pdf.multi_cell(w=190, h=10, txt=content, align='L') pdf.output(pdf_path) print(f"✅ PDF已生成:{pdf_path}")txt_to_pdf_cn("中文笔记.txt", "中文笔记.pdf")
小提示:你需要提前下载一个中文字体文件(如 simsun.ttc 或 msyh.ttf)放在项目目录下。也可以使用开源的“思源宋体”等字体。
fpdf2 对 Unicode 的支持非常完善,支持中文、日文、韩文等几乎任何语言的字符。
六、添加更多样式
想让PDF更美观?可以轻松添加标题、页眉页脚等:
from fpdf import FPDFclass StyledPDF(FPDF): def header(self): # 页眉 self.set_font("helvetica", "B", 15) self.cell(w=0, h=10, txt="我的文档", border=0, ln=1, align="C") self.ln(10) def footer(self): # 页脚(页码) self.set_y(-15) self.set_font("helvetica", "I", 8) self.cell(w=0, h=10, txt=f"第 {self.page_no()} 页", align="C")pdf = StyledPDF()pdf.add_page()pdf.set_font("helvetica", size=12)pdf.multi_cell(w=190, h=10, txt="这是文档正文内容……", align='L')pdf.output("styled_document.pdf")
这样生成的PDF就有了自动的页眉和页码,看起来专业多了。
七、总结
今天我们学习了:
fpdf2 是Python中最轻量易用的PDF生成库之一
只需 4行核心代码 就能生成一个PDF文件
从TXT文件生成PDF,用 multi_cell 自动处理换行和分页
通过注册中文字体,解决中文显示问题
重写 header() 和 footer() 方法添加页眉页脚
掌握了这些技能,你可以轻松实现:
📄 批量将文本笔记转为PDF电子书
📊 自动生成数据报告
📧 将邮件内容存档为PDF
整个代码不到30行,却解决了一个非常实用的办公场景。这就是Python的魅力——用简单的代码,解决真实的问题。
如果你觉得这篇文章对你有帮助,欢迎点赞、在看、转发,让更多朋友学会这个实用技巧!