2012-07-10 36 views
4

我已經使用比薩創建了發票Pdf文本模板。但是我想在文檔中顯示徽標(圖片)和文本。我不知道如何以pdf格式顯示圖像。我的觀點如下:帶標誌圖片的django pdf

def generate_invoice(request, user_id = None): 
    personal_html = '' 
    personal_html += 'hai' 

    fileread = str(settings.TEMPLATE_DIRS[0])+str('/invoice.html') 
    fr = open(fileread, "r").read() 
    fr = fr.replace('personal_details', personal_html) 
    result = StringIO.StringIO() 
    pdf = pisa.CreatePDF(
         fr,result 
         ) 
    filewrite = str(settings.TEMPLATE_DIRS[0]) + str('/invoice_write.html') 
    empty = "" 
    fw = open(filewrite, 'w') 
    fw.write(empty) 
    fw.write(fr) 
    fw.close() 
    PaymentPdf.objects.filter(invoicepdf = user_id).delete() 
    pdf_contents  = render_to_pdf1('invoice_write.html',result) 
    file_to_be_saved = ContentFile(pdf_contents) 
    random_str  = ''.join(random.sample((string.ascii_lowercase + string.ascii_uppercase + string.digits), 8)) 
    resume_name  = (str(user_id) + "_" + random_str + ".pdf").replace("@", '') 
    resume   = PaymentPdf.objects.create(name = resume_name, invoicepdf_id = user_id, created_by = request.user) 
    resume.name.save(resume_name ,file_to_be_saved) 
    file_path = PaymentPdf.objects.get(invoicepdf = user_id).name 
    pdf_file = str(file_path).split("media")[1] 
    return HttpResponseRedirect('/site_media' + pdf_file) 

def render_to_pdf1(template_src, context_dict): 
    template = get_template(template_src) 
    context = Context(context_dict) 
    html  = template.render(context) 
    result = StringIO.StringIO() 
    pdf  = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result) 
    return result.getvalue() 

任何人都幫我以PDF格式顯示圖像?

回答

3

參考Pisa (XHTML -> PDF) in Django will not display images in PDF,並添加行

links = lambda uri, rel: os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, '')) 
pdf  = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")),dest=result, link_callback=links) 

在render_to_pdf1的視圖中, 和html:

<img src="/site_media/img/logo.jpg"/ height="55" width="275"> 

它會工作。

0

我認爲HTML包含這樣的事情:

<img src="/media/xxx.jpg"/> 

和比薩需要的是這樣的:

<img src="http://mydomain.foo/media/xxx.jpg"/>