Casi todos los md to PDF existentes pasan por LaTeX: kramdown, pandoc, multimarkdown, etc.
¿Existen las opciones que no lo hacen, en cualquier idioma, por ejemplo, usando un backend como Prawn , libharu o jsPDF ?
Hasta ahora solo he encontrado:
asciidoctor-pdf Este conversor asciidoc basado en gambas es bastante activo y tiene muchas estrellas.
Markdown a Asciidoc con Pandoc y luego esta es la mejor opción que he visto hasta ahora.
Sin embargo, no es perfecto hasta el punto de estar listo para la producción profesional, en particular:
Gimli , pero no parece muy activo (último compromiso hace 7 meses). ¿Back-end?
markdown_prawn . No muchas estrellas. Última confirmación hace 3 años.
Convertidor experimental Kramdown Prawn . Experimental.
cmarkpdf : CommonMark a PDF a través de libharu por @jgm. Experimental.
Impresora Qt5 Q. Utilizado por el editor Retext a través de la API PyQt5 Python . Prueba TODO. Es probable que sea análogo a una solución similar a PhantomJS pero para Qt en lugar del navegador.
Si puede convertir bien el subconjunto HTML generado de Markdown a PDF, entonces esa es una solución, pero todavía tengo que encontrar un software gratuito que lo haga correctamente. Por ejemplo, las conversiones de PhantomJS rompen los enlaces de rebajas <http://a.com>
, que se muestran como texto de estilo simple en el PDF, no como enlaces en los que se puede hacer clic que se abren en el navegador preferido, que se generan a través de conversiones de LaTeX.
Posibilidades no libres:
O'Reilly Atlas lo está haciendo para su HTMLBook (subconjunto HTML5), pero no van a abrir el código en el corto plazo .
Príncipe XML . Gratis para uso no comercial.
Relacionado: Ruby only SO question .
Por qué quiero esto: LaTeX es lento, produce horribles mensajes de error, es difícil de instalar y es demasiado complejo para el pequeño subconjunto necesario para Markdown.
Soluciones parciales:
Node.js Package Markdown-PDF debería funcionar bien. He estado usando el paquete Grunt de eso , pero solo por el bien de una buena respuesta, simplemente ejecuté rápidamente el original a través de la línea de comando ; y sí, funciona muy bien.
Entonces, para usar la CLI de Markdown-PDF solo:
npm install -g markdown-pdf
markdown-pdf -o readme.pdf readme.md
(o cualquier origen y destino y otras opciones que desee; consulte Opciones de CLI para obtener todos los detalles de lo que puede especificar).Es de código abierto (con licencia MIT) y tiene un repositorio de Github , es gratuito y, por lo que he encontrado, es bastante rápido.
Puede haber un pequeño problema con la obtención de imágenes de los dominios https://, pero no he investigado qué hay allí: una de mis imágenes no se está cargando, por lo que es muy probable que sea algo divertido en mi md, pero hay un ligero posibilidad de que sea un error.
Un error importante : no se crean enlaces en los que se pueda hacer clic.
<http://a.com>
enlaces sobreviven en el PDF? Solo recibo imágenes. No estoy seguro si esto es posible con PhantomJS.[]()
, el texto aparece a la derecha, lo cual es un buen diseño ya que no se puede hacer clic en los enlaces (para mí).Yo personalmente soy un gran fan de pandoc
.
Pandoc es la herramienta navaja del "ejército suizo" de conversiones de formato:
Markdown
(incluido cualquiera de los principales "dialectos" de MD, como los sabores de GitHub y PHP, además de varias extensiones especiales). Otros formatos de entrada son: HTML
, rST
, Textile
, DocBook XML
, MediaWiki
.ConTeXt
, LaTeX
, PDF
y Beamer PDF
(aunque requiere LaTeX en segundo plano), MediaWiki
, DOCX
, DocBook
, rST
, Textile
, ASCIIDoc
, texinfo
, org
(modo Emacs Org), S5
(diapositivas HTML), Slidy
(diapositivas HTML), Slideous
(diapositivas HTML), ImpressJS
(diapositivas HTML ), DZSlides
(diapositivas HTML), HTML
, HTML5
, EPUB
, EPUB3
manpage
(página de manual de GROFF) y ODT
(Texto OpenDocument).¿Sigues conmigo? Bien.
¿Te diste cuenta de los dos últimos, manpage
y ODT
?
Bueno, estos son los dos formatos de salida de los que personalmente "abuso" como formatos intermedios para llegar a PDF para documentos finales cuando no quiero que LaTeX esté involucrado.
He automatizado mi flujo de trabajo y cadena de procesos con la ayuda de un Makefile . Así que solo necesito escribir make mydoc.latexpdf
, o make mydoc.odtpdf
, o make mydoc.manpdf
. El Makefile está configurado para buscar una entrada de mydoc.mmd
, y luego activa los comandos apropiados: pandoc
para crear el PDF directamente (que en segundo plano primero se convierte a LaTeX y luego se ejecuta pdflatex
solo), ODT o página de manual. Luego, el siguiente comando es crear el formato final:
Para mi .odtpdf
objetivo, ejecuta LibreOffice en modo sin cabeza. Estas son las líneas de comando básicas que uso para (estoy en OS X, por lo que para Linux o Windows tendrá que adaptar las rutas en consecuencia). Atención, el comando está en la sintaxis de Makefile; no se puede usar directamente en Shell sin una adaptación previa:
(cd /Applications/LibreOffice.app/Contents/MacOS; \
./soffice "-env:UserInstallation=file:///tmp/LibO_Conversion__$(USER)" \
--headless \
--convert-to pdf:writer_pdf_Export \
--outdir $(CURRDIR)/$(FINAL) $(CURRDIR)/$(BUILD)/$(subst .odtpdf,.odt,$@) ; \
cd - ; )
Para mi .manpdf
objetivo, lo usa man -t
para crear PostScript a partir del archivo de salida de la página de manual de Pandoc, luego usa Ghostscript para crear el PDF. Por lo tanto, ejecuta:
man -t <pandoc's manpage output file> \
| gs -o ${HOME}/<pandoc-sourcedoc-name>.pdf -sDEVICE=pdfwrite -
La ruta sin LaTeX a PDF a través de ODT es la más "sexy" para mí...
myreference.odt
archivo ! (Estos estilos, por supuesto, también se transferirán al PDF).Luego puedo ejecutar el comando Pandoc (a través de Makefile o en Shell) para crear un ODT a mi gusto, completo con las fuentes, tamaños y colores que prefiero, con los tamaños de página y encabezados de página, pies de página o fondos que definí (nuevamente : ¡Sintaxis de Makefile!):
pandoc \
--toc \
--toc-depth=4 \
--to=odt \
--chapters \
--filter=pandoc-citeproc \
--standalone \
--reference-odt=$(RESOURCES)/myreference.odt \
--from=markdown+mmd_title_block+pipe_tables+grid_tables+tex_math_dollars+raw_tex+footnotes+inline_notes+citations+link_attributes \
--bibliography=$(RESOURCES)/my.bib \
--csl=$(RESOURCES)/kp.csl \
--number-sections \
--output=./$(BUILD)/$@ \
$<
El --from=markdown+...+...+
parámetro le dice a Pandoc que acepte varias extensiones de sintaxis Markdown que me gusta usar en mis archivos fuente MD.
El dulce secreto para obtener los estilos en el documento ODT radica en el --reference-odt=/path/to/myreference.odt
parámetro de línea de comando.
¡La salida ODT funciona incluso con referencias y bibliografía (si su entrada Markdown está escrita correctamente para esto) !
En principio, este flujo de trabajo también debería funcionar en Windows, porque Pandoc también se ejecuta en Windows. He ejecutado Pandoc en Windows antes, pero no he configurado un flujo de trabajo completamente automático, primero " Pandoc
: Markdown -> ODT " , luego " .\soffice
: ODT-> PDF " basado en un Makefile aquí, sin embargo...
Pero es posible que desee explorar otro camino en Windows :
Sí, también puede personalizar los estilos de los archivos de salida DOCX usando el --reference-docx=my-reference.docx
interruptor. Simplemente cree my-reference.docx
primero un archivo que use exactamente los estilos que desea. ¡Pandoc luego los extraerá del documento de referencia y los aplicará al DOCX de salida que genera!
Desde allí, puede ver cómo convertir el archivo DOCX intermedio a PDF. Esto también se puede hacer automáticamente: también puede considerar OfficeToPDF.exe . Está alojado en CodePlex, licenciado con la licencia Apache 2.0 y disponible en binario y en código fuente.
Finalmente: asegúrese de usar la última y mejor versión de Pandoc (actualmente v1.17.0.3 o posterior ); se han agregado muchas funciones en los últimos meses, especialmente. cuando se trata de salida DOCX!
--latex-engine=xelatex
o --latex-engine=lualatex
a su comando Pandoc. El motor (predeterminado) pdflatex
no puede manejar Unicode.He investigado otra opción. Comparado con Markdown-PDF :
Esta también es una solución basada en Nodejs que utiliza los paquetes de nodos Marked y wkhtmltopdf .
npm -g install marked
npm -g install wkhtmltopdf
Para usar toma dos llamadas CLI. Por supuesto, puede guardar esto como un archivo por lotes y ejecutarlo.
marked input.md -o output.html
wkhtmltopdf input.html output.pdf
* Debido a que los enlaces funcionan, puedo cambiar a este método en lugar de Markdown-PDF, en cuyo caso probablemente escribiré un contenedor para agregar algo de CSS (con la opción de agregar un valor predeterminado sensible o definido por el usuario). El contenedor también lo convertiría en una llamada en lugar de dos para ejecutar y probablemente podría convertirlo en un cmd de instalación npm en lugar de la instalación manual. Si/cuando lo haga, lo compartiré aquí.
Acabo de convertir de HTML en su lugar. Esto funciona para mis necesidades:
https://github.com/dompdf/dompdf
Descubrí que, en general, Markdown no es un buen formato para convertir a PDF, ya que no es compatible con CSS nativo. Aquí está el script que uso:
<?php
require 'dompdf/autoload.inc.php';
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->getOptions()->setIsFontSubsettingEnabled(true);
$get = file_get_contents('index.html');
$dompdf->loadHtml($get);
$dompdf->render();
$put = $dompdf->output();
file_put_contents('index.pdf', $put);
Esta solución solo necesita PHP (25 MB) y DomPdf (4 MB), por lo que es bastante liviana en comparación con otras opciones.
Para construir sobre la solución de @nick-wilde, si está usando gruñido, hay complementos tanto para marcado como para wkhtmltopdf:
Después de instalar el wkhtmltopdf
binario principal , puede instalar los complementos usando npm:
npm install grunt-marked --save-dev
npm install grunt-wkhtmltopdf --save-dev
Luego usa algo como esto en tu Gruntfile.js
:
marked: {
std : {
files: {
'out.html' : ['src.md']
}
}
},
wkhtmltopdf: {
std : {
src: 'out.html',
dest: 'out.pdf'
}
},
Luego, en su compilación, simplemente llame a los dos en sucesión:
grunt.registerTask('build', ['marked', 'wkhtmltopdf']);
Si quieres que se vea bonito, tendrás que jugar más con la marked
configuración, pero estoy seguro de que es factible.
Recientemente creé un servicio para convertir documentos de descuento a PDF. Es compatible con la reducción con sabor a GitHub, así como con el resaltado de sintaxis. El servicio se encuentra en: http://markdown2pdf.com
No es sexy, pero AbiWord convertirá HTML a PDF.
Entonces, asumiendo que tienes instalado abiword:
markdown some.md > some.html
abiword -t pdf -o some.pdf some.html
Nick Dickinson Wilde
Ciro Santilli OurBigBook.com
Nick Dickinson Wilde
Ciro Santilli OurBigBook.com
Nick Dickinson Wilde
David
apt-get install retext
comando".Ciro Santilli OurBigBook.com