2011-09-02 43 views
5

Để bắt đầu, tôi đã xem các chủ đề khác về điều này, và tôi đã thử gần như mọi thứ để cố gắng khắc phục ...Pisa (XHTML -> PDF) ở Django sẽ không hiển thị hình ảnh trong PDF

Khi sử dụng Pisa để hiển thị một trang HTML thành PDF, các hình ảnh trong HTML nói rõ ràng mất tích. Đó là để nói, khi trang được hiển thị cho HTML, mọi thứ chỉ là dandy, nhưng khi tôi chuyển đầu ra sang PDF bằng cách sử dụng Pisa, các hình ảnh biến mất.

Điều chung nhất mà tôi đã tìm thấy để làm là để tạo ra một chức năng liên kết gọi lại như sau:

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

def my_view(request, variable1): 
    html = render_to_string('template_goes_here.html', dict, context_instance=RequestContext(request)) 
    result = StringIO() 
    pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")), dest=result, link_callback=fetch_resources) 
    if not pdf.err: 
     return HttpResponse(result.getvalue(), mimetype='application/pdf') 
    return HttpResponse('Pisa hates you! %s' % cgi.escape(html)) 

Tuy nhiên, điều này không làm việc. PDF xuất hiện, tuyệt vời, nhưng những hình ảnh vắng mặt.

Tôi cũng đọc một đề xuất về một chủ đề khác về viết HTML thành mkstemp, chuyển đổi nó thành PDF qua dòng lệnh, sau đó xuất HTML, không thành công ở đó.

Tôi thậm chí đã thử cài đặt PIL 1.1.16 thay vì 1.1.17 vì ai đó có vấn đề tương tự - không có súc sắc.

Có ai có ý tưởng về nơi tôi sẽ sai ở đây không?

+3

Không sử dụng Pisa, sử dụng xhtml2pdf là sự tiếp tục của dự án. –

+2

Tôi cũng phải đối mặt với cùng một vấn đề.Mkstemp cũng không giúp được gì. Pisa không hiển thị hình ảnh khi chúng tôi đã đặt kích thước hình ảnh trong html.So thử tạo pdf từ html chỉ với hình ảnh. Sau đó, hãy thêm nội dung html khác. Tôi đã sử dụng HTMLTODOC để tạo bản pdf ở cuối -> http://www.htmldoc.org/ – Abhaya

Trả lời

2

Đã lâu rồi kể từ khi tôi xem xét điều này, nhưng tôi nghĩ bạn phải sử dụng lambda hoặc functools.

ví dụ:

links = lambda uri, rel: os.path.join(settings.MEDIA_ROOT, 
    uri.replace(settings.MEDIA_URL, '')) 


pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")), 
    dest=result, link_callback=links) 
+0

Về giao diện thứ hai, không có lý do gì nên khác biệt. Không chắc tại sao ví dụ được đưa ra không hoạt động. –

Các vấn đề liên quan