【问题标题】:Does wkhtmltopdf offer any orphan or keep-with-next control?wkhtmltopdf 是否提供任何孤立或保留下一个控件?
【发布时间】:2013-08-04 21:15:40
【问题描述】:

我正在 Github 上编写一系列 Markdown 文档,以使编辑过程可分叉和可合并。我打算首先呈现为 PDF 格式。我只需要这些排版功能:

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

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

所以,我现在使用 Pandoc 转换为 HTML,然后使用 wkhtmltopdf 从 HTML 转换为 PDF。这让我得到了我正在寻找的 90% 的印刷功能,而且工作量很小,所以我认为这是一个很好的方法。但是,在段落之前的标题和无序列表之前的段落中,我希望有 keep-with-next 或孤立控件,但这似乎不受支持。我已经尝试过这些 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),其格式完美,包括我想要的所有 keep-with-next。也许我可以有一个 ODT 文档来指定样式,然后将其与 Markdown 文档一起转换。这值得一试吗?

策略 3

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

策略 4

我也会在某个时候尝试原始 LaTeX,使用像 Lyx 这样的编辑器 - 我无法想象 LaTeX 没有 keep-with-next,而且它周围的 GUI 会柔化锐利的边缘!这并不理想,因为 LaTeX 不像 Markdown 那样易于阅读,但我应该认为它仍然可以以几乎相同的方式进行合并。

【问题讨论】:

标签: pdf-generation markdown wkhtmltopdf pandoc


【解决方案1】:

尝试策略 2

使用this article 我正在尝试将 Markdown 转换为 ODT;但是,它仍然不完美。

使用这种方法,我可以包含一个包含预定义样式的“参考文档”。因此,孤儿控制和 keep-with-next 现在触手可及——我只是在参考文档中重新定义了样式,并将其正确添加到输出中。

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

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

尝试策略 3

我已切换到 DOMPDF,并且我的大部分分页符控件似乎都在工作! :=)

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

我发现了几个小错误,但它们有 CSS 解决方法。我将继续处理文档,但我怀疑我最终会采用这个解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多