Почти каждый существующий md to PDF проходит через LaTeX: kramdown, pandoc, multimarkdown и т. д.
Существуют ли варианты, которых нет ни на одном языке, например, с использованием бэкэнда, такого как Prawn , libharu или jsPDF ?
Пока нашел только:
asciidoctor-pdf Этот конвертер asciidoc на основе Prawn довольно активен и имеет много звездочек.
Уценка до Asciidoc с Pandoc, и тогда это лучший вариант, который я когда-либо видел.
Однако он не идеален для профессионального производства, в частности:
Gimli , но он не кажется очень активным (последний коммит 7 месяцев назад). Бэкенд?
markdown_prawn . Не так много звезд. Последний коммит 3 года назад.
Экспериментальный преобразователь Kramdown Prawn . Экспериментальный.
cmarkpdf : CommonMark в PDF через libharu от @jgm. Экспериментальный.
Qt5 QPrinter . Используется редактором Retext через PyQt5 Python API . TODO-тест. Вероятно, это будет аналог решения, похожего на PhantomJS, но для Qt вместо браузера.
Если вы можете хорошо преобразовать подмножество HTML, сгенерированное из Markdown, в PDF, то это решение, но мне еще предстоит найти бесплатное программное обеспечение, которое делает это правильно. Например, преобразования PhantomJS нарушают ссылки уценки <http://a.com>
, которые отображаются в виде простого стилизованного текста в PDF, а не в виде интерактивных ссылок, которые открываются в предпочтительном браузере, которые создаются с помощью преобразований LaTeX.
Не бесплатные возможности:
O'Reilly Atlas делает это для своей HTMLBook (подмножество HTML5), но они не собираются открывать исходный код в ближайшее время .
Принц XML . Бесплатно для некоммерческого использования.
Связанный: Ruby только ТАК вопрос .
Почему мне это нужно: LaTeX медленный, выдает ужасные сообщения об ошибках, его сложно установить и он слишком сложен для небольшого подмножества, необходимого для Markdown.
Частичные решения:
Пакет Node.js Markdown-PDF должен работать хорошо. Я использовал пакет Grunt , но только ради хорошего ответа я просто быстро запустил оригинал через командную строку ; да и работает отлично.
Итак, чтобы использовать интерфейс командной строки Markdown-PDF , просто:
npm install -g markdown-pdf
markdown-pdf -o readme.pdf readme.md
(или любой другой источник и место назначения и другие параметры, которые вы хотите; см. Параметры CLI для получения подробной информации о том, что вы можете указать).Это Open-Source (лицензия MIT), и у него есть репозиторий Github , он бесплатный и, насколько я понял, довольно быстрый.
Может быть небольшая проблема с получением изображений с доменов https://, но я не исследовал, что там происходит - одно из моих изображений не загружается, поэтому, скорее всего, это просто что-то смешное в моем md, но есть небольшая проблема. шанс, что это ошибка.
Один существенный баг: кликабельные ссылки не создаются.
<http://a.com>
ссылки сохранились в PDF? Я получаю только изображения. Не уверен, что это возможно с PhantomJS.[]()
, текст появляется справа, что является хорошим дизайном, поскольку ссылки не кликабельны (для меня).Я лично большой поклонник pandoc
.
Pandoc — это «швейцарский армейский» инструмент преобразования форматов:
Markdown
(включая любой из основных «диалектов» MD, таких как разновидности GitHub и PHP, а также несколько специальных расширений). Другие входные форматы: HTML
, rST
, Textile
, DocBook XML
, MediaWiki
.ConTeXt
, LaTeX
, PDF
и Beamer PDF
(хотя требуется LaTeX в фоновом режиме), MediaWiki
, DOCX
, DocBook
, rST
, Textile
, ASCIIDoc
, texinfo
, org
(режим организации Emacs), S5
(слайды HTML), Slidy
(слайды HTML), Slideous
(слайды HTML), ImpressJS
(слайды HTML ). ), DZSlides
(слайды HTML), HTML
, HTML5
, EPUB
, EPUB3
manpage
(справочная страница GROFF) и ODT
(текст OpenDocument).Ты все еще со мной? Хороший.
Вы обратили внимание на последние два manpage
и ODT
?
Что ж, это два выходных формата, которыми я лично «злоупотребляю» как промежуточными форматами, чтобы получить PDF для окончательных документов, когда я не хочу использовать LaTeX.
Я автоматизировал свой рабочий процесс и цепочку процессов с помощью Makefile . Так что мне просто нужно ввести make mydoc.latexpdf
, или make mydoc.odtpdf
, или make mydoc.manpdf
. Makefile настроен на поиск ввода mydoc.mmd
, а затем запускает соответствующие команды: pandoc
для непосредственного создания PDF (который в фоновом режиме сначала преобразуется в LaTeX, а затем запускается pdflatex
сам), ODT или страницы руководства. Затем следующая команда — создать окончательный формат:
Для моей .odtpdf
цели он запускает LibreOffice в автономном режиме. Вот основные командные строки, которые я использую для (у меня OS X, поэтому для Linux или Windows вам придется соответствующим образом адаптировать пути). Внимание, команда находится в синтаксисе Makefile — ее нельзя напрямую использовать в Shell без предварительной адаптации:
(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 - ; )
Для моей .manpdf
цели он использует man -t
для создания PostScript из выходного файла man-страницы Pandoc, а затем использует Ghostscript для создания PDF. Поэтому он работает:
man -t <pandoc's manpage output file> \
| gs -o ${HOME}/<pandoc-sourcedoc-name>.pdf -sDEVICE=pdfwrite -
Не-LaTeX путь к PDF через ODT для меня самый "привлекательный"...
myreference.odt
! (Конечно, эти стили также будут перенесены в PDF.)Затем я могу запустить команду Pandoc (через Makefile или в оболочке), чтобы создать ODT по своему вкусу, в комплекте с шрифтами, размерами и цветами, которые я предпочитаю, с размерами страниц и верхними, нижними колонтитулами или фоном, которые я определил (опять же : синтаксис 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)/$@ \
$<
Этот --from=markdown+...+...+
параметр сообщает Pandoc, что нужно принять несколько расширений синтаксиса Markdown, которые мне нравится использовать в моих исходных файлах MD.
Сладкий секрет получения стилей в документе ODT заключается в --reference-odt=/path/to/myreference.odt
параметре командной строки.
Вывод ODT работает даже со ссылками и библиографией (если ваш ввод Markdown правильно написан для этого) !
В принципе, этот рабочий процесс должен работать и в Windows, потому что Pandoc тоже работает в Windows. Я запускал Pandoc в Windows раньше, но я сам не настроил полностью автоматический рабочий процесс, сначала « Pandoc
: Markdown -> ODT » , затем « .\soffice
: ODT-> PDF » на основе Makefile здесь, хотя...
Но вы можете изучить другой путь в Windows :
Да, вы также можете настроить стили выходных файлов DOCX с помощью --reference-docx=my-reference.docx
переключателя. Просто сначала создайте my-reference.docx
файл, который использует именно те стили, которые вам нужны. Затем Pandoc извлечет их из справочного документа и применит к выходному DOCX, который он генерирует!
Оттуда вы можете посмотреть, как преобразовать промежуточный файл DOCX в PDF. Это также можно сделать автоматически: вы также можете использовать OfficeToPDF.exe . Он размещен на CodePlex, лицензирован Apache 2.0 License и доступен в двоичном и исходном коде.
Наконец: обязательно используйте самую последнюю и самую лучшую версию Pandoc (в настоящее время v1.17.0.3 или более позднюю ) - за последние месяцы было добавлено много функций, особенно. когда дело доходит до вывода DOCX!
--latex-engine=xelatex
или --latex-engine=lualatex
к вашей команде Pandoc. Механизм (по умолчанию) pdflatex
не может обрабатывать Unicode.Я исследовал другой вариант. По сравнению с Markdown-PDF :
Это также решение на основе Nodejs , в котором используются пакеты узлов Marked и wkhtmltopdf .
npm -g install marked
npm -g install wkhtmltopdf
Для использования требуется два вызова CLI. Конечно, вы можете просто сохранить это как пакетный файл и запустить его.
marked input.md -o output.html
wkhtmltopdf input.html output.pdf
* Из-за того, что ссылки работают, я могу переключиться на этот метод вместо Markdown-PDF , и в этом случае я, вероятно, напишу оболочку, чтобы добавить немного CSS (с возможностью добавления разумного значения по умолчанию или определенного пользователем). Оболочка также сделает один вызов вместо двух для запуска и, вероятно, может сделать это одним npm install cmd вместо ручной установки. Если/когда я это сделаю, я поделюсь этим здесь.
Вместо этого я просто конвертирую из HTML. Это работает для моих нужд:
https://github.com/dompdf/dompdf
Я обнаружил, что в целом Markdown не является хорошим форматом для преобразования в PDF, поскольку он не имеет встроенной поддержки CSS. Вот скрипт, который я использую:
<?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);
Для этого решения требуется только PHP (25 МБ) и DomPdf (4 МБ), поэтому он довольно легкий по сравнению с другими вариантами.
Чтобы использовать решение @nick-wild, если вы используете grunt, есть плагины как для помеченных, так и для wkhtmltopdf:
После установки основного wkhtmltopdf
бинарного файла вы можете установить плагины с помощью npm:
npm install grunt-marked --save-dev
npm install grunt-wkhtmltopdf --save-dev
Затем используйте что-то вроде этого в своем Gruntfile.js
:
marked: {
std : {
files: {
'out.html' : ['src.md']
}
}
},
wkhtmltopdf: {
std : {
src: 'out.html',
dest: 'out.pdf'
}
},
Затем в вашей сборке вы просто вызываете два последовательно:
grunt.registerTask('build', ['marked', 'wkhtmltopdf']);
Если вы хотите, чтобы это выглядело красиво, вам придется больше возиться с marked
настройками, но я уверен, что это выполнимо.
Недавно я создал сервис для преобразования документов уценки в PDF. Он поддерживает уценку в стиле GitHub, а также подсветку синтаксиса. Сервис находится по адресу: http://markdown2pdf.com
Это не красиво, но AbiWord конвертирует HTML в PDF.
Итак, если у вас установлен abiword:
markdown some.md > some.html
abiword -t pdf -o some.pdf some.html
Ник Дикинсон-Уайлд
Чиро Сантилли OurBigBook.com
Ник Дикинсон-Уайлд
Чиро Сантилли OurBigBook.com
Ник Дикинсон-Уайлд
Дэвид
apt-get install retext
команды».Чиро Сантилли OurBigBook.com