Automatisches Generieren und Drucken von PDF-Dateien aus Markdown?

Ich suche nach einer Möglichkeit, meinen Computer automatisch PDF-Dateien aus einem Ordner voller Markdown-Dateien generieren und drucken zu lassen.

Jeden Morgen um 5 Uhr möchte ich, dass mein Computer in meinen /markdown-files-Ordner schaut, eine Reihe von PDFs erstellt, die in einen /PDF-Ordner gehen, und auch den Drucker laufen lässt, damit die Seiten auf mich warten.

Es gibt ein paar Anforderungen, die dies etwas schwierig machen könnten:

  1. Die PDFs sollten den Dateititel oben auf jeder Seite haben
  2. Die Seite muss A4 sein
  3. Die Zeilen sollten mindestens doppelten Abstand haben.

Früher habe ich WKPDF zum Generieren von PDFs verwendet, aber es funktioniert nicht mehr auf Yosemite.

Antworten (4)

Sie können dies mit Markdown.pl und htmldoc(1) tun, die beide mit Homebrew installiert werden können . Der grundlegende Ablauf zum Erstellen eines PDF ist:

markdown foo.markdown | htmldoc --no-toc --no-title -f foo.pdf -

Was Ihren Dateinamen pro Seite betrifft, können Sie Echo integrieren, um es als HTML-Element hinzuzufügen:

echo $(markdown foo.markdown) "<p>foo</p>" | htmldoc --no-toc --no-title -f foo.pdf -

Und zum Drucken sendet der Befehl lpr(1) eine Datei an Ihren Standarddrucker.

Zusammenfassend:

for filename in `ls *.markdown`;
do
    echo $(markdown "$filename") "<p>$filename</p>" | 
        htmldoc --no-toc --no-title -f "${filename}.pdf" -
    lpr "${filename}.pdf"
done
Vielen Dank für Ihre Hilfe. Ich habe mit htmldoc gespielt und kann sehen, wie ich es dazu bringen kann, das zu tun, was ich will, aber Sie müssen mir verzeihen, weil ich nicht sicher bin, wo ich dieses Stück Code ablegen soll, damit es tatsächlich zu einem bestimmten Zeitpunkt ausgeführt wird .
Bearbeiten: Hazel zur Rettung!
Großartig! Ich hätte einen Cronjob vorgeschlagen, aber Hazel ist viel freundlicher.
Es gibt noch ein Problem: Diese Schleife druckt immer wieder die erste Datei, nicht alle Dateien einmal. für Dateiname in ls *.md; do echo $(markdown $filename) "<p>$filename</p>" | htmldoc --no-toc --no-title --fontspacing 3 --size a4 -f ${filename}.pdf -lpr ${filename}.pdf fertig
Ich glaube, ich habe gerade gemerkt, dass dies meine eigene dumme Schuld dafür ist, Pipes in meinen Dateinamen zu haben.
Diese Einschätzung Ihrer Auswahl von Dateinamenzeichen ist richtig.
Ich sehe, dass es immer noch ein Problem gibt: Anstatt „my filename.pdf“ zu erstellen und zu drucken, versucht es „my.pdf“ und „filename.pdf“.
$filenameSetzen Sie überall dort, wo es als Argument für einen Befehl verwendet wird, doppelte Anführungszeichen, um dies zu umgehen. Es sollte dann auch mit Pipes im Namen funktionieren.
Ist diese Antwort nicht ein Beispiel für "Sie sollten lsdie Ausgabe niemals analysieren" ? Also statt `ls *.markdown`sollte nur sein *.markdown(mit einem Glob *). $(command)PS Außerdem ist es eine bessere Praxis, anstelle von Backticks zu verwenden `command`.
Der Versuch, html doc auf El Capitan zu installieren, ergibt: htmldoc: Diese Formel lässt sich auf OS X-Versionen, die neuer als Yosemite sind, aufgrund einer Upstream-Inkompatibilität entweder nicht kompilieren oder funktioniert nicht wie erwartet. Fehler: Eine nicht erfüllte Anforderung ist bei diesem Build fehlgeschlagen.
@CGPGrey Ja, das Erstellen aus der Quelle (linke Seitenleiste) schlägt fehl ... aber durch das Ändern einer einzelnen Zeile funktioniert es. Wandeln Sie in Zeile 1385 diese 0 in einen booleschen Wert um: cinfo.quantize_colors = (boolean)0;. Dann mit a ./configure && makewird es für mich erstellt und ausgeführt (das Ausgabeprogramm ist htmldoc/htmldoc)

Hier ist eine Lösung, die LaTeX verwendet, um das PDF zu generieren. Wenn Sie Langformtext in den Markdown-Dateien haben und die typografische Lesbarkeit optimieren möchten (und ich vermute, dass Sie das tun), ist LaTeX im Vergleich zu HTML-Engines tendenziell viel besser.

Es dient pandocals Vermittler zwischen Markdown und LaTeX und erstellt auch das PDF für Sie.

Hauptskript

#!/bin/bash

md-dir="MARKDOWN_DIRECTORY_HERE"
pdf-dir="PDF_DIRECTORY_HERE"

cd "${md-dir}"
for filename in *.md; do
    target-pdf="${pdf-dir}/${filename}.pdf"
    pandoc "${filename}" -t latex --latex-engine=xelatex -V geometry=a4paper -V fontsize=11pt -V listings -V header-includes="\usepackage{fancyhdr}\pagestyle{fancyplain}\cfoot{}\rhead{\thepage}\lhead{\texttt{\lstinline/${filename}/}}" -V header-includes="\linespread{2.0}" -o "${target-pdf}"
    echo "produced ${filename}.pdf"
    lpr "${target-pdf}"
done

Erforderliche Einrichtung

  1. Holen Sie sich pandocvon Homebrew:brew install pandoc
  2. Installieren Sie die Minimalversion von LaTeX namens BasicTeX

Testen Sie, ob Sie das Setup richtig gemacht haben

Sie sollten in der Lage sein, in einem neuen Terminalfenster (mit Bash) auszuführen

echo "test" | pandoc -t latex --latex-engine=xelatex -o test.pdf

und erhalten Sie ein gültiges test.pdfDokument mit nur dem Wort "test"

Anpassungen

Es gibt eine Menge, die Sie mit den LaTeX-Einstellungen von der Befehlszeile aus optimieren können

  1. Optimieren Sie den Zeilenabstand, indem Sie den \linespread{2.0}Multiplikator ändern
  2. Markierungen durch Ersetzen durch geometry=a4paperanpassengeometry=a4paper,left=XXmm,right=XXmm,top=XXmm,bottom=XXmm
  3. Ändern Sie die Schriftgröße, indem Sie sie 11ptentweder auf 10pt oder 12pt verketten, und alles sollte entsprechend skaliert werden
  4. Ändern Sie die Hauptschriftart, indem Sie ein weiteres Argument zu pandoc: hinzufügen -V mainfont="NAME OF FONT". Sie können dies auch monofontso einstellen.
Es wäre einfacher zu warten, nur \input{my-template-file}von der Befehlszeile aus.
Sehr interessant. Ich werde mit der Option herumspielen. Danke schön.
Das Ausführen des Tests ergibt: "pandoc: xelatex nicht gefunden. xelatex wird für die PDF-Ausgabe benötigt."
Wollte nur sichergehen: Das ist nach der Installation des BasicTeX-Pakets wie oben beschrieben, richtig? Können Sie "xelatex" oder "pdflatex" normal vom Terminal aus ausführen?

Ich habe WKPDF nicht verwendet, aber sein Autor schlägt eine Methode vor, mit der es in Yosemite funktioniert: https://github.com/plessl/wkpdf/wiki/How-to-install-on-MacOS-10.10-Yosemite

RVM: Befehl nicht gefunden.

Sie könnten PhantomJS verwenden . Es ist nicht so einfach wie WKPDF für die PDF-Erzeugung, da es eine größere Auswahl an Funktionen hat, aber es funktioniert gut.