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
.
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 |
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".
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)
Das Ergebnis der Ausführung und Konvertierung der obigen Funktion ist wie folgt.
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.
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