2016-10-09 4 views
2

Ich benutze WeasyPrint, um PDF in Django zu generieren. Ich kann wie unten pdf aus einer statischen HTML-Datei erzeugen -Generieren PDF mit WeasyPrint mit gemeinsamen Kopf/Fußzeile und Seitennummerierung

from django.template import Context, Template 
import weasyprint 

with open('static_file.html', 'r') as myfile: 
    html_str = myfile.read() 

template = Template(html_message) 
    context = Context({'some_key': 'some_value'}) 
    rendered_str = template.render(context) 

weasyprint.HTML(string=rendered_str).write_pdf('generated.pdf') 

Aber ich möchte ein PDF erzeugen, in dem ich eine gemeinsame Kopfzeile/Fußzeile auf jeder Seite umfassen kann und Paginierung hinzufügen.

Auch wird es sehr hilfreich sein, wenn jemand sagen kann, wie man eine benutzerdefinierte Schriftart einfügt, um das PDF zu erzeugen. Ich habe die Schriftart im Betriebssystem installiert (Ubuntu 14.04), aber es funktioniert nicht.

Ich habe viel im Internet über diese gesucht. Aber konnte keine richtige Lösung finden.

Antwort

5

Da Weasyprint unterstützt CSS Paged Media Module Level 3, einfache Kopf- und Fußzeilen (zB Paginierung, wie Sie erwähnt) erreicht werden kann, mit Hilfe von CSS:

@page { 
    @top-right{ 
     content: "Page " counter(page) " of " counter(pages); 
    } 
} 

Stellen Sie sicher, Ihre Stylesheets sind beim Rendern:

HTML(string=rendered_html, 
    base_url=settings.SITE_URL).write_pdf(stylesheets=[CSS(settings.STATIC_ROOT + '/css/pdf_render.css')]) 

jedoch mehr komplexe Kopf-/Fußzeilen bekommen kann zu machen mehr sein .. komplex. Einige Leute haben die Methode der einschließlich eines div-Element in dem Header vorgeschlagen, die nur für den Druck macht (aber ich muss zugeben, ich habe nur in der Lage gewesen, einfache Elemente zu bekommen mit dieser Methode machen richtig):

@page { 
    @top-left { 
     content: element(pageHeader); 
    } 
} 
@media print { 
    #divHeader{ 
     position: running(pageHeader); 
    } 
} 

Es gibt auch eine andere Methode, die feste Positionen verwendet, wie in diesem Geiste gezeigt: https://gist.github.com/pikhovkin/5642563

Verwandte Themen