是否存在任何语言都没有的选项,例如使用诸如Prawn,libharu或jsPDF之类的后端?
到目前为止,我仅发现:
asciidoctor-pdf这种基于Prawn的asciidoc转换器非常活跃,并且有很多星星。
与Pandoc一起降价到Asciidoc,这是迄今为止我所见过的最好的选择。特别是要达到专业生产的水平:
代码和图像之类的浮点都不...浮点,因此当浮点较大时,您会在换行符上获得垂直空白:https://github.com/asciidoctor/asciidoctor-pdf/issues/353
有些行的单词太少,但水平对齐仍然存在,导致单词之间的空白过多。 TODO查找/创建票证。
Gimli,但它似乎不太活跃(最近一次提交是在7个月前)。后端?
markdown_prawn。星星不多。最后提交3年前。
Kramdown Prawn实验转换器。实验性的。
cmarkpdf:@jgm通过libharu将CommonMark转换为PDF。实验性的。
Qt5 QPrinter。由Retext编辑器通过PyQt5 Python API使用。 TODO测试。可能类似于类似于PhantomJS的解决方案,但适用于Qt而不是浏览器。
如果可以将Markdown生成的HTML子集很好地转换为PDF,那么这是一个解决方案,但我还没有找到可以正常运行的免费软件。例如,PhantomJS转换会断开标记链接
<http://a.com>
,该链接在PDF上显示为简单样式的文本,而不是通过LaTeX转换生成的在首选浏览器上打开的可点击链接。非自由可能性:
O'Reilly Atlas正在为其HTMLBook(HTML5子集)做到这一点,但他们很快就不会开源。
Prince XML。免费用于非商业用途。
相关:仅限Ruby这样的问题。
为什么我想要这个:LaTeX速度慢,产生可怕的错误消息,难以安装,并且对于Markdown所需的小子集来说过于复杂。
部分解决方案:
Sphinx允许RST通过https://code.google.com/p/rst2pdf/使用https://bitbucket.org/rptlab进行PDF转换/ reportlab在后端。
#1 楼
Node.js软件包Markdown-PDF应该可以正常工作。我一直在使用Grunt软件包,但是为了得到一个好的答案,我只是通过命令行快速运行了原始软件包。因此可以使用Markdown-PDF的CLI:安装Node.js(如有必要)
安装Markdown-PDF-从cmdline运行
npm install -g markdown-pdf
运行
markdown-pdf -o readme.pdf readme.md
(或所需的任何源和目标以及其他选项;有关您可以指定的所有详细信息,请参阅CLI选项。)它是开放源代码(已获得MIT许可),并且具有Github存储库,它是免费的,而且据我所知它相当快。
从https://域中获取图像可能会有一个小问题,但是我还没有研究那里的内容-我的图像之一没有被加载,所以这很可能只是一些有趣的事情在我的md中,但有一点机会就是一个错误。
一个重要的错误:未创建可点击的链接。
评论
后端:先使用Marked,再使用PhantomJS转换为HTML。 @NickWilde:您的
– Ciro Santilli郝海东冠状病六四事件法轮功
2014年4月25日19:48在
嗯...我没有任何类型链接-只是[name](link)或[name] [id]类型链接,它们可以工作。他们俩在链接后都有链接文本,虽然看起来不太漂亮,但可能需要稍作调整即可解决-我忘了提了。
–尼克·迪金森·威尔德
2014年4月25日在19:59
您可以单击一次链接,然后在浏览器中打开它吗?您正在使用哪个PDF查看器?对于Evince和Okular,我只会得到纯样式的文本。我已经对[]()进行了测试,并且该文本也显示在右侧,这是一个不错的设计,因为它们的链接不可单击(对我来说)。
– Ciro Santilli郝海东冠状病六四事件法轮功
2014年4月25日在20:08
我在Windows(7)/ Adobe Acrobat(XI)上-标题不可单击,链接文本为(在首选浏览器中一键打开(在Adobe关于打开链接的安全警告之后)。对我来说,那是次要的,但是我可以看到对于某些用例来说这可能是一个重大问题。
–尼克·迪金森·威尔德
2014年4月25日在20:13
我等一下能不能解决
–尼克·迪金森·威尔德
2014年4月25日在20:17
#2 楼
我个人是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
,q43120g79-mode(Emac) HTML幻灯片),org
(HTML幻灯片),S5
(HTML幻灯片),Slidy
(HTML幻灯片),Slideous
(HTML幻灯片),ImpressJS
,DZSlides
,HTML
,HTML5
...以及:
EPUB
(GROFF手册页)和EPUB3
(OpenDocument文本)。您还和我在一起吗?好。
您是否注意到最后两个
manpage
和ODT
吗?好,这些是我个人为了中间格式而“滥用”的两种输出格式在不希望使用LaTeX的情况下,可以在PDF中获取最终文档。
我借助Makefile自动化了我的工作流程和流程链。所以我只需要输入
manpage
或ODT
或make mydoc.latexpdf
。设置Makefile来查找make mydoc.odtpdf
的输入,然后设置运动中的适当命令:make mydoc.manpdf
直接创建PDF(在后台首先转换为LaTeX,然后运行mydoc.mmd
本身),ODT或联机帮助页。然后,下一个命令将创建最终格式:对于我的
pandoc
目标,它以无头模式运行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 - ; )
对于我的pdflatex
目标,它使用.odtpdf
从Pandoc的联机帮助页输出文件中创建PostScript,然后使用Ghostscript创建PDF。因此它可以运行:man -t <pandoc's manpage output file> \
| gs -o ${HOME}/<pandoc-sourcedoc-name>.pdf -sDEVICE=pdfwrite -
自定义ODT输出的外观
非LaTeX路径通过ODT进行的PDF对我来说是最“性感”的...
...因为Pandoc知道如何将一些漂亮的个性化样式应用于目标ODT(如果只有这些)在
.manpdf
中正确定义了样式! (这些样式当然也会转移到PDF。)然后我可以运行Pandoc命令(通过Makefile或在Shell中)以根据自己的喜好创建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)/$@ \
$<
man -t
参数告诉Pandoc接受我想在我的MD源文件中使用的几个Markdown语法扩展。在ODT文档中获取样式的最甜蜜的秘密在于
myreference.odt
命令行参数。即使您的Markdown输入是正确编写的,ODT输出也可以使用参考和参考书目!
使用Windows?工作流也应该在Windows上工作,因为Pandoc也可以在Windows上运行。我以前曾在Windows上运行过Pandoc,但是我自己还没有设置一个完全自动化的工作流程,但是首先基于此处的Makefile首先创建“
--from=markdown+...+...+
:Markdown-> ODT”,然后创建“ --reference-odt=/path/to/myreference.odt
:ODT-> PDF” ... ,但是您可能想探索Windows上的另一条路径:
首先从Pandoc创建DOCX输出;
然后将DOCX转换为PDF(自动或通过WinWord进行交互)。
是的,您还可以使用
Pandoc
开关自定义DOCX输出文件的样式。只需首先创建一个.\soffice
文件即可,它完全使用您想要的样式。 Pandoc然后将从参考doc中提取这些文件,并将其应用于它生成的输出DOCX!从那里,您可以了解如何将中间DOCX文件转换为PDF。这也可以自动完成:您可能还需要考虑OfficeToPDF.exe。它托管在CodePlex上,并已获得Apache 2.0许可证的许可,并且以二进制和源代码形式提供。
最后:确保使用最新最好的Pandoc版本(当前为v1.17.0.3或以后)-尤其是最近几个月增加了许多功能。谈到DOCX输出!
评论
我的markdown文件包含一个unicode字符和pandoc块。我该如何解决?
–chmike
2015年10月7日在8:38
将--latex-engine = xelatex或--latex-engine = lualatex添加到您的Pandoc命令中。 (默认)引擎pdflatex无法处理Unicode。
– Kurt Pfeifle
2015年10月7日在8:49
#3 楼
我研究了另一种选择。与Markdown-PDF相比:实际上可以建立正确的链接。
实际上运行起来稍快一些缺点:
不是“漂亮”的-除了链接外,Markdown-PDF看上去一切都更好。尽管可以在生成PDF之前在HTML中添加一些CSS来轻松解决*。
安装更加复杂。
这也是基于Node.js的解决方案使用Marked和wkhtmltopdf节点软件包。
安装:
安装Nodejs。
安装Marked-最简单的方法是通过命令行:
npm -g install marked
安装wkhtmltopdf NPM-通过命令行最简单:
npm -g install wkhtmltopdf
安装wkhtmltopdf主文件-没有可用的安装程序。
将wkhtmltopdf bin目录添加到PATH
用法:
使用需要两个CLI调用。当然,您也可以将其保存为批处理文件并运行。包装器以添加一些CSS(可以选择添加合理的默认值或用户定义的选项)。包装程序还将使其一次调用而不是两次运行,并且可能使其一次调用npm install cmd而不是手动安装。如果/当我这样做时,我会在这里分享。
评论
以下内容基于wkhtmltopdf:github.com/pdfkit/pdfkit。还没有尝试过,但是我还不了解wkhtmltopdf不能做什么。
– Ciro Santilli郝海东冠状病六四事件法轮功
2014年4月26日6:00
看起来这是wkhtmltopdf的红宝石包装
–尼克·迪金森·威尔德
14年4月26日在6:04
我还没有尝试过,所以我无法审查它的工作情况,但是在可安装性方面却做得不是很好:回购是1Gb,包括一个0.5 Gb Qt分支!
– Ciro Santilli郝海东冠状病六四事件法轮功
2014年4月27日6:10
呃,我猜这一定是PDFKit而不是我的建议-因为我的建议的总下载大小远低于30mb-〜6mb Nodejs,〜16mb wkhtmltopdf,然后包装器相对较小(node-wkhtmltopdf为2.8kb )。
–尼克·迪金森·威尔德
2014年4月27日在6:40
啊,我当时在谈论wkhtmltopdf信息库,但也许其中包括许多未安装的东西。谢谢。
– Ciro Santilli郝海东冠状病六四事件法轮功
2014-4-27 7:00
#4 楼
要以@ nick-wilde的解决方案为基础,如果您使用grunt,那么有标记和wkhtmltopdf的插件:grunt-marked
grunt-wkhtmltopdf
安装完主要的
wkhtmltopdf
二进制文件之后,您可以使用npm安装插件: /> npm install grunt-marked --save-dev
npm install grunt-wkhtmltopdf --save-dev
然后在您的构建中,只需连续调用两个即可:
marked: {
std : {
files: {
'out.html' : ['src.md']
}
}
},
wkhtmltopdf: {
std : {
src: 'out.html',
dest: 'out.pdf'
}
},
如果您希望它看起来很漂亮,您可以我将不得不花更多时间使用
Gruntfile.js
设置,但我确定它是可行的。#5 楼
它不是性感的,但是AbiWord会将HTML转换为PDF。因此,假设您已安装了abiword:
markdown some.md > some.html
abiword -t pdf -o some.pdf some.html
评论
谢谢你的提示。也许有人可以告诉我们他们使用哪种类型的后端:通用或重复使用第三方工具。
– Ciro Santilli郝海东冠状病六四事件法轮功
2015年11月22日0:00
#6 楼
我最近创建了一项将降价文档转换为PDF的服务。它支持GitHub风格的markdown以及语法突出显示。该服务位于:http://markdown2pdf.com评论
它是开源的吗?底层技术是什么?
– Ciro Santilli郝海东冠状病六四事件法轮功
15年8月27日在5:57
#7 楼
我只是从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);
$s_in = file_get_contents('index.html');
$dompdf->loadHtml($s_in);
$dompdf->render();
$s_out = $dompdf->output();
file_put_contents('index.pdf', $s_out);
此解决方案仅需要PHP(25 MB)和DomPdf(4 MB),因此轻巧
与其他选项相比。
评论
您是否关心什么OS / Web应用程序?价格也一样吗?@NickWilde越自由越好,越交叉越好。 Linux的支持会让我高兴。但我想听听所有选项=)
哦,忘了问您想要哪种界面-CLI或GUI。如果使用CLI,我可以确定不使用LaTex。
@NickWilde我更喜欢CLI,但是再次,我想了解所有这些。
比较喜欢CLI,那就好了:D ...答案马上就来了。