[GO] Eine Geschichte über das Konvertieren von HTML in PDF mit WeasyPrint + matplotlib und das Einbetten von Grafiken [Anfänger lernen Python mit einem Nachschlagewerk]

Einführung

Mit Takashi Otaka, "Lernen durch Bewegen! Einführung in die Python Django-Entwicklung" Ich bin ein Anfänger, der angefangen hat, Python und Django zu lernen.

Ich habe ungefähr 4 Monate lang Programmieren mit Ruby / Rails studiert. Als ich meinen Job als Ingenieur wechselte, entschied ich mich für Python und begann mit diesem Buch in einer Hand zu lernen.

Da ich ein Amateur ohne Klasse bin, wäre ich Ihnen sehr dankbar, wenn Sie Ergänzungen und Vorschläge kommentieren könnten.

Überblick

Ich möchte eine HTML-Seite in PDF konvertieren und anzeigen. Ich möchte auch ein Diagramm mit 'matplotlib' erstellen und es als Bild in PDF einfügen.

① HTML → PDF-Reise

HTML↓

from django.shortcuts import render

def html_view(request):
             .
             .
             .
  #Packen Sie Variablen in den Kontext und übergeben Sie sie an HTML
    context = {
        "hoge": hoge,
        "fuga": fuga,
    }
    return render(request, 'hogefuga.html', context)

PDF-Konvertierung ↓

from django.http import HttpResponse
from django.shortcuts import render
from weasyprint import HTML, CSS
from django.template.loader import get_template

def pdf_view(request):
             .
             .
             .
   #Geben Sie Vorlagen- und Übergabevariablen an
    html_template = get_template('hogefuga.html')
    html_str = html_template.render({
        "hoge": hoge,
        "fuga": fuga,
    }, request)

    #PDF-Konvertierung
    pdf_file = HTML(string=html_str, encoding='utf-8').write_pdf(
        stylesheets=[
       #WeasyPrint wird nur angewendet, wenn Sie hier eine CSS-Datei angeben.
            CSS('./static/css/hogefuga.css'),
        ],
    )
    response = HttpResponse(pdf_file, content_type='application/pdf')
    response['Content-Disposition'] = 'filename="hogefuga.pdf"'
    return response

② Erstellen Sie mit matplotlib ein Diagramm und zeigen Sie es als PDF an

Die Weisheit unserer Vorfahren ist erstaunlich. Ich habe es bisher geschafft zu kämpfen ...

Lassen Sie uns nun auch ein Diagramm erstellen.

from django.http import HttpRespons
from django.shortcuts import render
from weasyprint import HTML, CSS
from django.template.loader import get_template
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('Agg')

def pdf_graph_view(request):

    x = [1, 2, 3, 4, 5]
    y = [1, 2, 3, 4, 5]

    fig = plt.figure(figsize=(4.0, 3.0))
    ax = fig.add_subplot(111)
    ax.plot(x, y)
    plt.savefig('static/img/graph.png', format='png', dpi=200)
             .
             .
             .
Entspricht dem unten stehenden PDF-Code

Übrigens, wenn die folgende Beschreibung nicht angegeben wird, tritt ein Fehler auf. Nur durch diese Beschreibung wurde mir die Zeit genommen ... Klicken Sie hier, um die Weisheit des geliehenen Vorfahren zu erfahren

mpl.use('Agg')

③ Bild (Grafik) wird nicht als PDF angezeigt

Schreiben Sie nun den Speicherort der Bilddatei in HTML und Sie sind fertig.

hogefuga.html


<img src="{% static 'img/graph.png' %}">

Der Großhändler verkauft es jedoch nicht. Aus irgendeinem Grund wird das Bild nicht als PDF angezeigt. Warum.

Gegenmaßnahme ①

pdf_file = HTML(string=html_str, base_url=request.build_absolute_uri(), encoding='utf-8')

ändern. Dann wird das Diagramm angezeigt, aber die Zeichen sind verstümmelt. Es scheint, dass der PC endgültig zerstört wird. Auf Wiedersehen Jobs.

Gegenmaßnahme ②

Wenn die Charaktere vorerst verstümmelt sind, Es bleibt nichts anderes übrig, als die Priorität von Schriftarten mit Gewalt zu erhöhen. (Gehirntote Einzelzelle)

hogefuga.css


font-family: 'msmincho'!important;

!! Als ich wichtig hinzufügte, wurden die verstümmelten Charaktere sicher gelöst. ~~ Es ist jedoch keine grundlegende Lösung. Decken Sie die hässlichen Dinge. ~~

Schließlich

Die Vorfahren sind unglaublich. Der Ingenieur ist unglaublich. Sehnsucht nach. Es scheint, dass es einige Zeit dauern wird, um aus den Anfängern herauszukommen. Jeden Tag studieren, nicht wahr? Warum sind die Zeichen verstümmelt (CSS funktioniert nicht)? Ich muss es lösen.

Toller Referenzartikel

Matplotlib Reverse Pull Memo (Frame Edition)Tipps zum Zeichnen mit matplotlib auf der ServerseiteEinfache PDF-Ausgabe mit Django2.0 + WeasyPrintPDF-Ausgabe mit Weasyprint ohne Bilder (Django)

Recommended Posts

Eine Geschichte über das Konvertieren von HTML in PDF mit WeasyPrint + matplotlib und das Einbetten von Grafiken [Anfänger lernen Python mit einem Nachschlagewerk]
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
Eine Geschichte, die ich nicht wusste, wie man Mixin lädt, wenn ich mit der Django-App eine Front mache [Anfänger lernt Python mit einem Nachschlagewerk]
[Kleine Geschichte] So speichern Sie Matplotlib-Diagramme in einem Stapel mit Jupyter
Eine Geschichte über Python Pop und Append
[Python] Zeichnen mehrerer Diagramme mit Matplotlib
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Eine Geschichte darüber, wie Windows 10-Benutzer eine Umgebung für die Verwendung von OpenCV3 mit Python 3.5 erstellt haben
Eine Geschichte, bei der ich das Teilungsergebnis (%) in HTML mit einer Anwendung mit Django anzeigen wollte [Anfänger lernt Python mit einem Nachschlagewerk in einer Hand]
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
[Python] Weg zur Schlange (5) Spiele mit Matplotlib
Eine Geschichte, die Django mit einer Funktion wie before_action ausführen wollte, die in Schienen verwendet wird [Anfänger lernt Python mit einem Nachschlagewerk]
[Hinweis] Eine Geschichte über den Versuch, eine Klassenmethode mit zwei Unterbalken in der Python 3-Serie zu überschreiben.
Ich möchte einen Sprachwechsler mit Python und SPTK in Bezug auf eine berühmte Site erstellen
Aus einem Buch, das Programmierer lernen können ... (Python): Über das Sortieren
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ②
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Eine Geschichte über den Umgang mit dem CORS-Problem
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ①
Generieren Sie Diagramme dynamisch mit matplotlib und binden Sie sie mit reporlab in PDF ein
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Eine Geschichte über einen Python-Anfänger, der mit dem No-Modul'http.server 'feststeckt.
Eine Geschichte über alles von der Datenerfassung über die KI-Entwicklung bis hin zur Veröffentlichung von Webanwendungen in Python (3. KI-Entwicklung)
Python # Über Referenz und Kopie
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Eine Geschichte über die Entwicklung eines weichen Typs mit Firestore + Python + OpenAPI + Typescript
Eine Geschichte über den Versuch, mehrere Python-Versionen auszuführen (Mac Edition)
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Übergeben Sie die Liste von Python an C ++ als Referenz in pybind11
Ich habe GhostScript mit Python ausgeführt, das PDF in Seiten aufgeteilt und es in ein JPEG-Bild konvertiert.
Eine Geschichte von einer Person, die Django aus der interaktiven Python-Shell importieren und Dinge in der DB speichern wollte
Ich habe Python mit den minimal erforderlichen Kenntnissen verwendet, aber ich habe ein Nachschlagewerk gekauft und erneut studiert, um zusammenzufassen, was ich neu gelernt und was ich nützlich fand