我正在为我的一个可填写的PDF构建PDF构建器的早期过程。
此时我正在尝试在点击“打印表单”按钮时显示PDF,但此刻我没有收到任何错误,只是打开一个空白标签(firefox)。
这是我的lib / tools.py中的print_rdba:
def print_rdba(client=None, data=None ,investment_form=None):
from django.http import HttpResponse
from clients.models import Transit
from products.models import ProductCategory
import cStringIO as StringIO
from dateutil.parser import parse
from datetime import date
from settings import URL
import re
from dateutil.relativedelta import relativedelta
from rates.models import InterestOption
from products.models import Product
URL = "/media/files/investment_forms/whatever.pdf"
file = ''
if investment_form:
file = "%s" % URL
fdf = '<?xml version="1.0" encoding="UTF-8"?>\n<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">\n\t<fields>'
fdf += '''</fields>
<f href="%s" target="_blank"/>
</xfdf>''' % file
fdf = fdf.replace('^M', '')
response = HttpResponse(fdf.encode("ISO-8859-1"), mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=RDBA.xfdf'
return response
在我的视图上检查以确保按下按钮:
if request.POST.has_key('submit_rdba_form'):
return print_rdba(client=primary_member, data = form.data)
现在还有其他我想念的东西吗?我将使用.xfdf来填充表单,但就像我之前说过的那样,我只是在显示pdf时遇到了麻烦。
由于
答案 0 :(得分:3)
您的函数返回的响应不会显示pdf,但会显示treated as a file attachment(即保存到磁盘)。这是因为这一行:
response['Content-Disposition'] = 'attachment; filename=RDBA.xfdf'
告诉浏览器要保存文件RDBA.xfdf
。
检查是否完全调用了print_rdba函数。如果您的按钮名称为submit_rdba_form
,则request.POST.has_key('submit_rdba_form')
将为False
。
您也可以尝试将标记放入模板文件中,然后将模板呈现给响应。这符合Django的MTV哲学(模型 - 模板 - 视图,类似于MVC,其中应用程序逻辑与表示分离)并且更好,特别是因为您计划向文档添加表单:
您的xfdf.html
文件夹中 templates
:
<?xml version="1.0" encoding="UTF-8"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
<fields>
</fields>
<f href="{{file}}" target="_blank"/>
</xfdf>
新print_rdba
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
def print_rdba(client=None, data=None ,investment_form=None):
file = "/media/files/investment_forms/whatever.pdf"
response = HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=RDBA.xfdf'
template = get_template("xfdf.html")
xfdf = template.render(Context({"file":file}))
response.write(xfdf)
return response