Распечатать PDF из формы Django - PullRequest
0 голосов
/ 11 октября 2011

Я сейчас нахожусь в процессе создания PDF-конструктора для одного из моих заполняемых PDF-файлов.

На данный момент я пытаюсь просто отобразить PDF, когда нажимаю на кнопку «Форма печати», но в данный момент я не получаю никаких ошибок, и он просто открывает пустую вкладку (firefox).

Вот мой print_rdba из моей библиотеки lib / tools.py:

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-файла.

Спасибо

1 Ответ

3 голосов
/ 12 октября 2011

Ответ, который возвращает ваша функция, не будет отображать pdf, но будет обрабатываться как вложение файла (т.е. сохраняться на диск).Это из-за этой строки:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...