Konvertieren Sie Markdown in Python in PDF

Was ich getan habe

In Python habe ich eine Webseite mit Markdown-Notation abgekratzt, in Markdown ausgegeben und dann den Markdown in HTML und dann in PDF konvertiert. (Kompliziert) Ich habe "Schöne Suppe" zum Schaben verwendet, aber ich werde es diesmal weglassen. Ich hatte nicht viele Informationen über Markdown → HTML → PDF, also habe ich es zusammengefasst.

Markdown → HTML verwendet Markdown und HTML → PDF verwendet pdfkit.

Umgebung

Die Umgebung ist wie folgt.

In einer Windows-Umgebung muss wkhtmltopdf installiert werden, bevor pdfkit verwendet wird. Installieren Sie die 64-Bit-Version von dieser Site. Sie können den Pfad verwenden oder den Pfad der ausführbaren Datei direkt im Python-Code angeben, wie wir dies diesmal tun.

Wir verwenden auch "Pylements", um die Codeblöcke hervorzuheben.

Die Ordnerstruktur ist wie folgt.

   app
    |- file
    |   |- source
    |   |   └─ source.md ← Ursprünglicher Abschlag
    |└─ pdf ← PDF-Ausgabeziel
    |- app.py
    └─requirements.txt

Installieren Sie jede Bibliothek.

requirements.txt


Markdown==3.2.1
pdfkit==0.6.1
Pygments==2.6.1
> pip install -r requirements.txt

Der Abschlag, der die Konvertierungsquelle darstellt, lautet wie folgt.

source.md


#Titel

##Untertitel

Markdown-Text.

###aufführen

1.Nummerierte Liste
    1.Verschachtelte nummerierte Liste
1.Nummerierte Liste

###Text

das ist*kursiv*Es ist eine Beschreibung von.
das ist**Betonung**Es ist eine Beschreibung von.
das ist[Verknüpfung](https://qiita.com/)Es ist eine Beschreibung von.

###Quellcode

- Java

\```java

class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

\```

- Python

\```python

class HelloWorld:
    def __init__(self, id, name):
        self.id = id
        self.name = name

if __name__=='__main__':
    hello = HelloWorld(1, 'python')

\```

###Rand

***

---

* * *

###Tabelle

| Table Header | Table Header | Table Header |
| :-- | :--: | --: |
| Body | Body | Body |
| Left | Center | Right |


Markdown → HTML

Verwenden Sie die Markdown-Bibliothek, um von Markdown in HTML zu konvertieren. Aktivieren Sie die Erweiterung "Codehilite" und markieren Sie den Quellcode mit "Pylements".

app.py


import markdown
from pygments import highlight
from pygments.formatters import HtmlFormatter

def mark_to_html():
    #Markdown-Datei lesen
    f = open('file/source/source.md', mode='r', encoding='UTF-8')
    with f:
        text = f.read()
        #Erstellen Sie mit Pylements Stylesheets für Highlights
        style = HtmlFormatter(style='solarized-dark').get_style_defs('.codehilite')
        # #Markdown → HTML konvertieren
        md = markdown.Markdown(extensions=['extra', 'codehilite'])
        body = md.convert(text)
        #An das HTML-Format anpassen
        html = '<html lang="ja"><meta charset="utf-8"><body>'
        #Importieren Sie mit Pylements erstellte Stylesheets
        html += '<style>{}</style>'.format(style)
        #Stil hinzufügen, um dem Tabellen-Tag einen Rahmen hinzuzufügen
        html += '''<style> table,th,td { 
            border-collapse: collapse;
            border:1px solid #333; 
            } </style>'''
        html += body + '</body></html>' 
        return html

Markdown verfügt über die folgenden Erweiterungen, die Sie beim Erstellen eines Objekts als Liste angeben können.

md = markdown.Markdown(extensions=["Erweiterung"])

Es werden nur diejenigen extrahiert, die verwendet werden können. Für alle Erweiterungen unten.

https://python-markdown.github.io/extensions/#officially-supported-extensions

Erweiterung Funktion
extra Konvertieren Sie grundlegende Markdown-Notationen wie Abkürzungselemente, Listen, Codeblöcke, Zitate, Tabellen usw. in HTML
admonition Eine Notiz kann ausgegeben werden
codehilite Sie können die in Pylements definierten Syntaxhervorhebungen zu Ihren Codeblöcken hinzufügen. Benötigt Pylements.
meta Sie können die Metainformationen der Datei abrufen
nl2br Ein Zeilenvorschubcode<br>In Tag konvertieren
sane_lists Unterstützt Listen mit Zeilenumbrüchen und nummerierten Listen von angegebenen Nummern
smarty ",>Unterstützt HTML-Sonderzeichen wie
toc Erstellen Sie automatisch ein Inhaltsverzeichnis aus der Zusammensetzung der Überschriften
wikilinks [[]]Entspricht der Linknotation in

Sie können auch Erweiterungen von Drittanbietern verwenden.

https://github.com/Python-Markdown/markdown/wiki/Third-Party-Extensions

Die "Pylements", die ich in meinem Code hervorheben möchte, geben den Stil und die Klassennamen an, die angewendet werden sollen.

style = HtmlFormatter(style="Stilname").get_style_defs("Name der Klasse")

Anwendbare Stile können über das Befehlszeilentool "Pylements" abgerufen werden.

> pygmentize -L styles

Der Klassenname wird als "" ausgegeben, wenn "codehilite" in "markdown" aktiviert ist. Setzen Sie ihn daher auf "codehilite".

HTML → PDF

Wir verwenden eine Bibliothek namens "pdfkit", um von HTML in PDF zu konvertieren. Da diese Bibliothek intern "wkhtmltopdf" verwendet, müssen Sie den Pfad an die Umgebungsvariable übergeben oder zur Laufzeit den Pfad der ausführbaren Datei angeben.

app.py


import pdfkit

def html_to_pdf(html:str):
    """
    html : str HTML
    """
    #Geben Sie die Ausgabedatei an
    outputfile = 'file/pdf/output.pdf'
    #Angabe des Pfads der Ausführungsdatei von wkhtmltopdf
    path_wkhtmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
    config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
    #Führen Sie eine HTML → PDF-Konvertierung durch
    pdfkit.from_string(html, outputfile, configuration=config)

Dieses Mal wird die Zeichenfolge im MTML-Format in eine PDF-Datei konvertiert. Sie können die Website jedoch auch in PDF konvertieren, indem Sie die URL angeben. Verwenden Sie in diesem Fall die Funktion from_url. Wenn Sie eine HTML-Datei in PDF konvertieren möchten, verwenden Sie "from_file".

Quellcode

Gesamtquellcode
import markdown
import pdfkit
from pygments import highlight
from pygments.formatters import HtmlFormatter

def mark_to_html():
    #Markdown-Datei lesen
    f = open('file/source/source.md', mode='r', encoding='UTF-8')
    with f:
        text = f.read()
        #Erstellen Sie mit Pylements Stylesheets für Highlights
        style = HtmlFormatter(style='solarized-dark').get_style_defs('.codehilite')
        # #Markdown → HTML konvertieren
        md = markdown.Markdown(extensions=['extra', 'codehilite'])
        body = md.convert(text)
        #An das HTML-Format anpassen
        html = '<html lang="ja"><meta charset="utf-8"><body>'
        #Importieren Sie mit Pylements erstellte Stylesheets
        html += '<style>{}</style>'.format(style)
        #Stil hinzufügen, um dem Tabellen-Tag einen Rahmen hinzuzufügen
        html += '''<style> table,th,td { 
            border-collapse: collapse;
            border:1px solid #333; 
            } </style>'''
        html += body + '</body></html>' 
        return html

def html_to_pdf(html: str):
    #Geben Sie die Ausgabedatei an
    outputfile = 'file/pdf/output.pdf'
    #Angabe des Pfads der Ausführungsdatei von wkhtmltopdf
    path_wkhtmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
    config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
    #Führen Sie eine HTML → PDF-Konvertierung durch
    pdfkit.from_string(html, outputfile, configuration=config)

if __name__=='__main__':
    html = mark_to_html()
    html_to_pdf(html)

Konvertierungsergebnis

Das Ergebnis der Ausführung und Konvertierung der obigen Funktion ist wie folgt.

output.png

Das Ausgabeergebnis des Abschlags kann in PDF konvertiert werden. Der Codeblock wird ebenfalls hervorgehoben. Ich habe es diesmal nicht in das Beispiel aufgenommen, aber Sie können das Bild problemlos ausgeben.

Zusammenfassung

Ich habe den Markdown mit den Python-Bibliotheken "Markdown" und "pdfkit" in PDF konvertiert. Wenn Sie eine Vorlage erstellen, können Sie die Minuten schnell in PDF konvertieren, was praktisch ist. Ich hoffe, Sie können es als Material zur Verbesserung der Arbeitseffizienz verwenden.

Recommended Posts

Konvertieren Sie Markdown in Python in PDF
In Python von Markdown in HTML konvertieren
Konvertieren Sie das Bild in .zip mit Python in PDF
Konvertieren Sie die psd-Datei in Python in png
Konvertieren Sie die absolute URL in eine relative URL in Python
PDF mit Python rastern
Markdown mit Python behandeln
Konvertieren Sie in Python usw. geschriebene Dateien in PDF mit Syntax-Hervorhebung
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Konvertieren Sie PDF in Bilder (JPEG / PNG) mit Python
Konvertieren Sie PDFs mit Python in Massenbilder
Stapelkonvertierung von PSD-Dateien im Verzeichnis in PDF
Konvertieren Sie den exponentiellen Float in Python in str
Konvertieren Sie kubischen Netzcode in Python in WKT
Ich möchte eine in Python in PDF konvertierte Tabelle wieder in CSV konvertieren
[Python] Datum in Zeichenfolge konvertieren
So löschen Sie stdout in Python
Konvertieren Sie numpy int64 in python int
[Python] Liste in Pandas konvertieren [Pandas]
Melden Sie sich auf der Website in Python an
OCR aus PDF in Python
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Konvertieren Sie die CIDR-Notation in Python
Sprechen mit Python [Text zu Sprache]
Wie man in Python entwickelt
Konvertieren Sie Python 3.x-Code in Python 2.x.
Post an Slack in Python
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Konvertieren Sie das NumPy-Array "ndarray" in Python [tolist ()]
Konvertieren Sie die Netzmaske der CIDR-Notation in Python in eine gepunktete Dezimalschreibweise
[Python] Konvertiert PDF-Text für jede Seite in CSV (2/24 Postscript)
So konvertieren Sie Gleitkommazahlen in Python in Binärzahlen
Konvertieren Sie die asynchrone API im Callback-Stil in async / await in Python
So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Konvertieren Sie den Webpay-Entitätstyp in den Dict-Typ (rekursiv in Python).
[Python] Wie man PCA mit Python macht
Konvertieren Sie A4 PDF alle 2 Seiten in A3
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
Workflow zum Konvertieren der Formel (Bild) in Python
Im Python-Befehl zeigt Python auf Python3.8
Konvertieren Sie die Liste mit Python in DataFrame
Versuchen Sie, Trace in Python zu berechnen
So konvertieren Sie 0,5 in 1056964608 auf einmal
Python> Liste> Doppelte Liste in einfache Liste konvertieren
Konvertierung von pdf nach txt 2 [pyocr]
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
6 Möglichkeiten zum Stringen von Objekten in Python
Verwendung von PubChem mit Python
[Python] Konvertiert natürliche Zahlen in Ordnungszahlen
Konvertieren Sie das an Jason Stay Samlike in Python übergebene Bild in ASCII Art
Konvertieren Sie die Dezimalzahl in n-ary [Python]
Konvertieren Sie PDF in Image mit ImageMagick