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

Django表单提交后填充PDF失败,下载PDF为空求助

解决方案:PDF表单填充与下载功能实现

1. 安装依赖库

首先安装支持PDF表单填充的Python库,推荐使用PyPDF2(适配新版API):

pip install PyPDF2

2. 修改views.py的POST处理逻辑

替换原视图函数,实现读取用户输入、填充PDF、返回下载响应的完整流程:

from django.http import HttpResponse
from django.shortcuts import render
from PyPDF2 import PdfReader, PdfWriter

def handle_pdf_submit(request):
    if request.method == 'POST':
        # 提取表单提交的用户数据
        user_inputs = {
            'username': request.POST.get('username'),
            'phone': request.POST.get('phone'),
            'address': request.POST.get('address')
            # 按需添加更多字段,需和PDF模板字段名对应
        }

        # 读取空白PDF模板(替换为你的实际文件路径)
        template_pdf_path = 'templates/blank_form.pdf'
        pdf_reader = PdfReader(template_pdf_path)
        pdf_writer = PdfWriter()

        # 填充PDF表单字段
        pdf_writer.add_page(pdf_reader.pages[0])
        # 注意:字典key必须和PDF模板里的表单字段名完全一致(区分大小写)
        pdf_writer.update_page_form_field_values(
            pdf_writer.pages[0],
            {
                'user_name': user_inputs['username'],
                'user_phone': user_inputs['phone'],
                'user_address': user_inputs['address']
            }
        )

        # 构造下载响应
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename="filled_form.pdf"'
        pdf_writer.write(response)
        return response
    
    # GET请求返回表单页面
    return render(request, 'Home1.html')

3. 同步HTML表单与PDF字段名

确保Home1.html中表单输入框的name属性,和PDF模板里的表单字段名完全匹配:

<form method="POST" action="{% url 'pdf_submit' %}">
    {% csrf_token %}
    <div>
        <label>用户名:</label>
        <input type="text" name="username" required>
    </div>
    <div>
        <label>手机号:</label>
        <input type="tel" name="phone" required>
    </div>
    <div>
        <label>地址:</label>
        <textarea name="address" required></textarea>
    </div>
    <button type="submit">提交并下载PDF</button>
</form>

4. 配置urls.py路由

确保路由指向处理视图:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.handle_pdf_submit, name='pdf_submit'),
    # 其他路由配置
]

常见问题排查

  • 空白PDF不是可填充表单:必须用Adobe Acrobat等工具给空白PDF添加Acro表单字段,普通静态PDF无法直接填充。
  • 字段名不匹配:可以通过print(pdf_reader.get_fields())打印PDF中所有字段名,核对后调整代码。
  • 文件路径错误:建议使用绝对路径测试,确保Django有权限读取PDF模板文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:10:23