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

如何用PdfWriter在PDF表单字段中插入多行文本?

解决pypdf向PDF表单插入多行文本不换行的问题

问题核心原因

PDF表单字段默认可能未开启多行支持,且pypdf对多行字段的换行符有特定要求,仅用\n/\r\n无法触发换行。

解决方案步骤

1. 确认PDF字段的多行属性

先打开原始PDF,在PDF编辑器(如Adobe Acrobat)中检查目标字段(名称为1)的属性,确保勾选了「允许多行」选项。如果字段本身不支持多行,后续代码设置也无法生效。

2. 修改pypdf代码适配多行文本

需要显式将字段的Multiline属性设为True,并使用\r作为换行分隔符:

from pypdf import PdfReader, PdfWriter
import os

file_path = os.path.join(script_directory, 'folder/', 'sample.pdf')
reader = PdfReader(file_path)
writer = PdfWriter()
writer.add_page(reader.pages[0])

# 获取目标表单字段
target_field = writer.pages[0].get_field("1")
# 开启字段多行支持
target_field["Multiline"] = True
# 设置带换行的字段值,使用\r作为换行符
name = current_user.name
address = session['address']
target_field["V"] = f"{name}\r{address}"

# 保存填充后的PDF
with open(os.path.join(script_directory, 'folder/', 'sample_filled_out.pdf'), "wb") as output_stream:
    writer.write(output_stream)

3. 备选方案:使用PyMuPDF(fitz)

如果pypdf仍无法解决,可尝试PyMuPDF库,它对多行表单的支持更灵活,无需额外设置属性(只要字段本身支持多行):

import fitz
import os

file_path = os.path.join(script_directory, 'folder/', 'sample.pdf')
doc = fitz.open(file_path)
page = doc[0]

# 获取目标字段(根据字段名定位)
target_field = page.get_widget("1")
# 设置多行文本,使用\n换行
target_field.text = f"{current_user.name}\n{address}"
# 更新字段
target_field.update()

# 保存文件
doc.save(os.path.join(script_directory, 'folder/', 'sample_filled_out.pdf'))
doc.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:15:14