wkhtmltopdf是否提供任何孤儿或保持下一个控制?

时间:2013-08-03 19:39:13

标签: pdf-generation markdown wkhtmltopdf pandoc

我正在Github上写一系列Markdown文档,努力使编辑过程可分叉并合并。我打算首先渲染为PDF格式。我只需要这些印刷功能:

  • 标题级别1和2
  • 段落
  • 项目符号列表和项目符号项目
  • 页脚页码
  • 内联预格式样式(主要用于内联代码)
  • 阻止代码

我使用pandoc作为我的Markdown解析器,最初直接尝试LaTeX / PDF输出。然而I asked a question on that已经放弃了 - LaTeX使用起来很慢且难以使用(imo),并且似乎不鼓励对其他格式(特别是HTML)有用的内联预格式样式的类属性。

所以,我现在使用Pandoc转换为HTML,然后使用wkhtmltopdf将HTML转换为PDF。这让我获得了90%的我正在寻找的排版功能,而且只需要很少的努力,所以我认为这是一个很好的方法。但是,在段落之前的标题和无序列表之前的段落中,我希望保持下一个或孤立控制,但这似乎不受支持。我尝试过这些CSS功能:

li {
    /* Try to avoid breaking inside a bullet, doesn't work for me */
    break-inside: avoid-page;
}

ul {
    /* Try to avoid breaking before a bullet list, doesn't work for me */
    page-break-after: avoid;
}

p {
    /* Not supported by Webkit: https://developer.mozilla.org/en-US/docs/Web/CSS/orphans */
    orphans: 2;
}

从我的代码中可以看出,orphans听起来很理想,但它对PDF输出没有任何影响,Mozilla引用说Webkit(由Wkhtmltopdf内部使用)并不支持它

我能做些什么来实现这个目标?我觉得我非常接近,但令人沮丧的是,这是一个似乎没有任何明显解决方案的微不足道的问题。虽然我已经付出了一些努力来学习Pandoc和Wkhtmltopdf,但我愿意放弃其中一个或两个支持其他F / OSS工具,如果它们可以表现得更好。

策略2

我不想消失太多无意义的兔子洞,但我看到Pandoc可以渲染到ODT。我的主文档保存在ODT中(使用OpenOffice),其格式为完美,包括我想要的所有保持下一个。也许我可以有一个ODT文档来指定样式,然后将它与Markdown文档一起转换。这值得尝试吗?

策略3

Pandoc的HTML输出正确地区分了所有标记,所以我想知道是否可以添加新的HTML到PDF转换器。 Dompdf听起来不错,所以我也会给它一个。

策略4

我会在某些时候使用像Lyx这样的编辑器尝试原始的LaTeX - 我无法想象LaTeX没有与下一个保持一致,并且围绕它的GUI将软化锋利的边缘!这并不理想,因为LaTeX不像Markdown那样可读,但我认为它仍然可以以相同的方式合并。

1 个答案:

答案 0 :(得分:1)

尝试策略2

使用this article我试图将Markdown转换为ODT;然而,它仍然不完美。

使用这种方法,我可以包含一个包含预定义样式的“参考文档”。因此,孤立控制和保持与下一步现在已经触手可及 - 我只需重新定义参考文档中的样式,并将其正确添加到输出中。

  • 但是,无序列表只具有“文本正文”段落样式,因此无法将它们与段落文本区分为块。将HTML转换为PDF时,我当然可以为<ul>创建一种样式。
  • 我还有两个(单独的)内联预格式样式(一个用于代码,一个用于文件名),但这些样式都使用字符样式“Teletype”呈现。这意味着它们无法在最终文件中加以区分。
  • 我之前使用HTML的手动分页符不再有效。它们没有附加的样式,所以我认为我需要手动插入它们。

因此,这种方法向前迈出了一步,又退了几步!

尝试策略3

我已切换到DOMPDF,我的大多数分页控件似乎都在工作! :=)

  • 不要在标题元素之后中断
  • 手动分页符很好
  • 不要在无序列表项中打破
  • 不要在无序列表之前中断

我发现了一些小bug,但他们有CSS解决方法。我会继续研究这个文件,但我怀疑我最终会采用这个解决方案。