Generazione automatica e stampa di file PDF da Markdown?


4

Sto cercando un modo per far sì che il mio computer generi e stampi automaticamente file PDF da una cartella piena di file markdown.

Quindi, ogni mattina alle 5 del mattino vorrei che il mio computer guardasse la mia cartella / markdown-files, creasse un gruppo di PDF per andare in una cartella / PDF ed eseguissi anche la stampante in modo che le pagine mi aspettassero.

Ci sono un paio di requisiti che potrebbero renderlo un po 'complicato:

  1. I PDF dovrebbero avere il titolo del file nella parte superiore di ogni pagina
  2. La pagina deve essere A4
  3. Le linee dovrebbero avere almeno una spaziatura doppia.

Usavo WKPDF per generare PDF, ma non funziona più su Yosemite.

Risposte:


5

Puoi farlo con Markdown.pl e htmldoc (1), entrambi i quali possono essere installati con Homebrew . Il flusso di base per creare un PDF è:

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

Per quanto riguarda il nome file per pagina, è possibile incorporare l'eco per aggiungerlo come elemento HTML:

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

E per la stampa, il comando lpr (1) invierà un file alla stampante predefinita.

Legando tutto questo:

for filename in `ls *.markdown`;
do
    echo $(markdown "$filename") "<p>$filename</p>" | 
        htmldoc --no-toc --no-title -f "${filename}.pdf" -
    lpr "${filename}.pdf"
done

Grazie per l'aiuto. Ho giocato con htmldoc e posso vedere come farlo fare quello che voglio, ma dovrai perdonarmi, perché non sono sicuro di dove mettere quel pezzo di codice per farlo funzionare davvero in un determinato momento .
CGP Gray,

1
Modifica: Hazel per il salvataggio!
CGP Gray,

1
Grande! Avrei suggerito un cronjob, ma Hazel è molto più amichevole.
Ha disegnato Stephens il

C'è ancora un problema: questo ciclo stampa semplicemente il primo file più e più volte, non tutti i file una volta. per nome file in ls *.md; do echo $ (markdown $ nomefile) "<p> $ nomefile </p>" | htmldoc --no-toc --no-title --fontspacing 3 --size a4 -f $ {nome file} .pdf -lpr $ {nome file} .pdf fatto
CGP Gray

1
Penso di essermi appena reso conto che questo è il mio stupido errore per avere pipe nei nomi dei miei file.
CGP Gray,

2

Ecco una soluzione che utilizza LaTeX per generare il PDF. Se nei file Markdown è presente un testo in formato esteso e si desidera ottimizzare la leggibilità tipografica (e sospetto che lo sia), LaTeX tende a fare un lavoro molto migliore rispetto ai motori HTML.

Utilizza pandoccome intermediario tra Markdown e LaTeX e produce anche il PDF per te.

Sceneggiatura principale

#!/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

Installazione richiesta

  1. Ottieni pandocda Homebrew:brew install pandoc
  2. Installa la versione minima di LaTeX chiamata BasicTeX

Verifica se l'impostazione è corretta

Dovresti essere in grado di eseguire in una nuova finestra Terminale (con bash)

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

e ottieni un test.pdfdocumento valido con solo la parola "test"

personalizzazioni

C'è molto che puoi modificare con le impostazioni LaTeX dalla riga di comando

  1. modifica l'interlinea modificando il \linespread{2.0}moltiplicatore
  2. regolare i segni sostituendo geometry=a4papercongeometry=a4paper,left=XXmm,right=XXmm,top=XXmm,bottom=XXmm
  3. cambia la dimensione del carattere concatenandolo 11pta 10pt o 12pt e tutto dovrebbe ridimensionarsi di conseguenza
  4. modificare il carattere principale con l'aggiunta di un altro argomento a pandoc: -V mainfont="NAME OF FONT". Puoi anche impostare in monofontquesto modo.

Sarebbe più gestibile solo \input{my-template-file}dalla riga di comando.
Sean Allred,

Molto interessante. Giocherò con l'opzione. Grazie.
CGP Gray,

L'esecuzione dei risultati del test: "pandoc: xelatex non trovato. Xelatex è necessario per l'output pdf."
CGP Gray,

Voglio solo assicurarmi: questo è dopo aver installato il pacchetto BasicTeX come descritto sopra, giusto? Sei in grado di eseguire "xelatex" o "pdflatex" normalmente dal terminale?
Tim Lin,


-1

Puoi usare PhantomJS . Non è così semplice come WKPDF per la generazione di PDF poiché ha una gamma più ampia di funzionalità, ma funziona benissimo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.