2011-10-11 127 views
0

我正在爲我可填寫的PDF之一構建PDF生成器的早期過程。從django表格打印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時遇到麻煩。

感謝

回答

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,其中應用程序邏輯從表現分離),比較好特別是因爲你計劃的形式添加到文檔行:在你的templates

xfdf.html文件夾:

<?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