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

