2011-01-13 28 views
5

Tôi muốn tạo mẫu html thành tệp pdf bằng pisa. Tôi tin rằng tôi có tất cả các gói tôi cần nhưng dường như tôi đang gặp sự cố khi làm như vậy. Đây là quan điểm của tôi dưới đây để xa những gì tôi đã làm.Câu hỏi pdf Django với pisa

EDIT: Đây là url mới nhất của tôi, xem & mẫu.

url.py

(r'^index/render_pdf/(?P<id>\d+)/$', render_pdf), 

views.py

def fetch_resources(uri, rel): 
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) 
    return path 

def render_pdf (html, id): 
    invoice_items_list = Invoice_Items.objects.filter(pk=id) 
    result = StringIO.StringIO() 
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources) 
    return result 

Trong một mẫu, tôi có thẻ này.

<a href="{% url c2duo.views.render_pdf invoices.pk %}"> 
+0

tiếp theo, bạn sẽ có được traceback lỗi đầy đủ hoặc hành vi bạn đang gặp phải và thêm nó vào câu hỏi, để mọi người có thể thấy điều gì xảy ra khi bạn thử theo cách này. – nosklo

+0

Không có 'return' trong' render_to_pdf (template_src, context_dict) '. Bạn có thể bao gồm nhiều mã thực tế bạn đang thực sự sử dụng không? –

+0

Mã đã được cập nhật – Shehzad009

Trả lời

1

Tôi không biết điều này sẽ giúp bao nhiêu, nhưng đây là chức năng tôi sử dụng để làm cho pdf:

def fetch_resources(uri, rel): 
""" 
Callback to allow pisa/reportlab to retrieve Images,Stylesheets, etc. 
`uri` is the href attribute from the html link element. 
`rel` gives a relative path, but it's not used here. 

""" 
path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, "")) 
return path 

def render_pdf (html): 
result = StringIO.StringIO() 
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources) 
return result 
+0

Tôi nhận được một lỗi: WSGIRequest 'đối tượng không có thuộc tính' mã hóa ' – Shehzad009

+0

bạn không vượt qua đối tượng yêu cầu chức năng, bạn vượt qua các mẫu rendered. – zsquare

+0

Vui lòng xem mã của tôi cho đến nay xem liệu có cần thay đổi gì không bằng cách chỉnh sửa. – Shehzad009

0

Just for fun, hãy thử này để thay thế:

def render_to_pdf(template_src, context_dict): 
    html = "<html><head><title>Title</title></head><body><h1>Hello</h1></body></html>" 
    result = StringIO.StringIO() 
    pdf = pisa.pisaDocument(StringIO.StringIO(html), result) 
    if not pdf.err: 
     return http.HttpResponse("" % (repr(result.getvalue()))) 
    else: 
     raise Exception("The error was %s" % pdf.err) 

Nếu bạn vẫn gặp lỗi, tôi đoán các lỗi có thể là ở Pisa. Bạn có chắc là nó cập nhật không?

+0

lặp lại, tôi nhận được lỗi cú pháp không hợp lệ trên dòng cuối cùng "ngoại trừ Ngoại lệ ('Lỗi PDF')" - vì vậy không chắc chắn lý do. Ngoài ra, có một lỗi cú pháp khác trên dòng có lỗi cú pháp khi nó nói gì pdf = ... Có một dấu ngoặc đóng thêm không nên ở đó. – Shehzad009

+0

Xin lỗi, đó là những gì tôi nhận được để cắt và dán từ mã của người lạ. Nên được cố định ngay bây giờ. –