34

有很多旧文本,比如这本 2002 年的书,声明我们必须使用“CSS for Web”和“XSL-FO for print”。我认为在今天(2012 年),我们终于可以将 CSS 与能够理解CSS2和CSS3的分页媒体的渲染引擎一起使用……但是“新文本”、程序员的共识和软房的投资在哪里?

XSL-FO 或“XSL 格式化对象”(W3C 标准)是最常用的从 XML 或 XHTML 内容生成 PDF 文档的技术。XSL-FO 1.1版 于 2006 年发布,1.0 版于 2001 年发布。

CSS2.1 是从 2011 年开始的,但 CSS2.0 是 1998 年的标准,在 2008 年修订……我认为标准年龄不是问题。带有 HTML、XHTML 或 XML 的 CSS 具有“打印的力量”:参见PrinceXMLWebKit 打印模块(或wkhtmltopdf)、ABCpdf等工具。

在 CSS 和 XSL-FO 之间进行选择:使用 CSS2,您可以将文本完全适合纸页等。这不是分页、多列布局、放置脚注、运行页眉或页边距的问题......两者, CSS(分页媒体)和 XSL-FO 是执行此操作的良好标准。

PS:对于这种情况,有一些相关的问题/答案,关于 webkit 转换使用 PHP 转换和关于从 HTML 生成 PDF。没有人对这个提出的问题有好的答案。

4

5 回答 5

33

感谢所有评论和回答!

现在,2014 年,我的帖子已经过去了 1.5 年(2012 年 5 月 17 日),是时候巩固一下了:对我来说,没有答案是“完整的答案”,但所有答案(参见 Nenotlep 和 Alex 的)都有助于形成一个大的图片。我现在巩固的主要动机是2013-11 年 @mzjn 的新闻(此处)

XSL-FO 正式消亡

周六,2013 年 11 月 2 日,Liam RE Quin 写道“我们已经关闭了工作组,因为没有足够的人参与”,W3C XML 活动负责人,关于XSL-FO 2.0连续性的失败。(在此处查看更好的副本)。

工作草案的最后一次更新是在 2012 年 1 月,现在确认:W3C 停止开发 XSL-2

为什么?它将被CSS3-page取代,见下文。

PS:讨论“官方声明”,使用https://stackoverflow.com/a/21345449/287948

CSS3 正式成长

标准CSS3 页面是一个草案,但许多应用程序,如PrinceXML v9AntennaHouse Formatter v6 证明它已经准备好了(!);并且,预计 2014 年推出的HTML5将伴随着预测发布的 CSS3。

所以,我知道对于 W3C,CSS3-page做了我们需要表达好的印刷品和好的 PDF的一切。

其他动机

有一天,在遥远的未来…… PDF 将消亡——它很复杂,不属于 XML 家族或 W3C 投资——许多人声称 EPUB 将取代它。这是另一个很好的动机:平板电脑阅读器和 PC 浏览器将打印(HTML、XHTML 和 EPUB)以及 PDF。所以 PDF 将不是必需的......而且,对于这一天,唯一的标准需要,例如。Webkit 打印项目,将是CSS3 页面标准。

CSS3 是两个战略事务中的关键点:1)从 XML 或 HTML 内容生成好的 PDF;2)替换PDF。


注意:问题链接的另一个 2014 年更新:wkHtmlToPDF现在在这里。关于“新文本”,现在我们有很多,见前。使用 CSS3 构建书籍



程序员的更新答案,对于本页的问题,为什么使用 XSL-FO 而不是 CSS2,将 HTML 转换为好的 PDF?

如果您更进一步并为XML-Publishing实现一个新系统,那么没有充分的理由使用XSL-FO。总结:

  • XSL-FO 今天是一种死技术,仅由小众公司使用,用于维护大型出版公司(如 Elsevier)的遗留系统...... Stackoverflow 的大多数作者/读者来自中小型公司。像O'Reilly Media, Inc. 这样的公司已经使用 CSS3 进行印刷

  • CSS3将取代 CSS2,涵盖CSS2的所有空白(以及 @AlexS 的恐惧)。

  • 今天(2014 年),您可以通过 Google 或我的链接查看(参见 PrinceXML v9 和 AntennaHouse Formatter v6),我们有一些很好的软件可以使用CSS2CSS3呈现内容。

  • 正如@bytebuster 所说,“CSS 更容易开发”(而且更容易学习!)。

  • 正如我上面所说,CSS3 不是孤立的,它是“XML/HTML/SVG”家族的一部分。

  • 开发“HTML+CSS 模板”(一个标准网页设计师完成一项简单任务的每小时成本)比“XSL-FO 模板”(一个罕见的专业人士完成一项复杂任务的每小时成本)要便宜得多。

  • ……



消息...

2016 年 1 月,权威的 CSS3 标准即将到来!

关于W3C标准:旧的“css-page”“css-break”取代,“paged media”改为“fragmentation” ……现在是Candidate Recommendation,见https://www.w3.org/ TR/css-break-3

2020 年 4 月,Blimey,+4 年,什么都没有!...好的,需要更多测试

从问题的发布总共 8 年,从“css-break-3 Fineshed!”到 4 年 公告 ...

Chrome 是 2019 年第一个完善的,但在 W3C 的测试验证团队中出现了一些错误,并且在 2020 年又回来了......现在状态(在 23 次测试中)是:

  • Chrome 的Blink引擎未通过 1 次测试;
  • Firefox 的Gecko引擎未通过 3 次测试。

xxx

草案现在在这里,测试在这里

于 2014-01-25T02:09:18.377 回答
9

2015 年 1 月 10 日更新

我曾经做过 CSS to PDF (wkhtmltopdf) 和 XSL-FO to PDF,我更喜欢 CSS,但它有很多问题。IMO 最好的 CSS/HTML 到 PDF 渲染器是 wkhtmltopdf,但它存在大量问题,例如打印质量问题、分页问题、CMYK 着色、精确定位和全屏渲染。

诸如“将盒子向右和向上移动 1.8 毫米以使其接触到纸的顶部”“我们需要最后一页是 100% 宽的无边距表格”之类的要求在 XSL-FO 中都非常可行,但在 CSS 中甚至考虑都太可怕了。在某些情况下,即使标签存在,CSS 也无法将其削减为足够好的软件来呈现它不存在。甚至 wkhtmltopdf(0.11,以后不确定)在渲染 TOC 时也使用 XSLT,并且并不真正支持@page.

我不能代表 PrinceXML,因为虽然它看起来很棒,但我事先知道价格标签是不可能的,所以这不是一个选择——我怀疑这对很多开发人员和公司来说都是正确的。

如果有更好的软件来进行渲染和更多的用户,我真的认为 CSS 通常会是一个更好的选择,因为它写起来更好(css 和源代码 (x)html),并且那里有大量的编辑器。这有点像旧的 Linux 与 Windows 辩论——IMO Linux 更好用,但缺乏通常需要的软件、现有专业知识和支持。

为了回应评论,源材料始终是 CSS 的问题。XML 的 CSS 是一个有点未知的领域,几乎所有地方都是 XML。很遗憾。我非常不喜欢 XML,尽管它实际上比 (X)HTML 更有用。

于 2012-07-18T10:41:04.320 回答
4

未来依赖 CSS 而不是 XSL-FO 的一个可能原因是 W3C 的XML 打印和页面布局工作组不再活跃。没有足够的兴趣来维持这个工作组。该小组在 2012 年初发布了XSL 2.0 工作草案,但现在似乎不太可能出现更新的 W3C 建议。

XSL-List 邮件列表上有一个最近的帖子,关于关闭工作组的原因以及关于 XSL-FO 与 CSS 的未来。请参阅http://markmail.org/thread/65j2ah2kulcp35fm

顺便说一句,尽管这是一个有趣的话题,但我不确定这个问题是否适合 Stack Overflow。恕我直言,这更像是一个开放式邀请来讨论某事,而不是一个关于特定、实际、可回答问题的问题

于 2013-11-03T18:32:15.863 回答
3

我同意@Nenotlep 发布的一些内容。但我不确定 CSS 标记对于分页文档是否还像 XSL-FO 一样广泛。但我不知道。

我还将这部分添加到他的答案中,因为我无法对答案“发表评论”。

整个问题有一些历史。

此外,XSL-FO 的丰富性及其过去 10 多年在 FO 渲染上的学习和老化曲线已经有相当长的时间来解决“更多”问题。

早在 2003 年,我就负责为财富 20 强的企业范围内的 XML 内容相关系统进行概念验证和原型设计。

当人们更改、添加和修改内容 XML 时,该系统的其中一个部分必须即时渲染 PDF、Word、X/HTML 版本的文档。

即使是 XSL-FO > PDF 和 Word-ML 在当时也有很多初期问题。

由于以下原因,这些是固有的:

  • 标记和样式语言的原始和新目标和功能
  • 最终渲染组件准确表示给定标记的能力和限制(即 XSL-FO 到 PDF 组件或 X/HTML 通过 Web 浏览器到屏幕)

自从我经常接触 XSL-FO/HTML/CSS 以来已经 10 年了,但是与当时的 XML/XSL 世界(Dave Pawson、Michael Kay、Wendell Piez 等)讨论上述问题很有趣。 )

XSL-FO 在 CSS 上用于分页输出的所有代表性标记很可能现在(2013 年)可能在 CSS3 中复制并正确呈现。

我希望这有帮助。

2017年编辑:

显然,CSS 在某些方面仍在追赶,我记得大部分时间都在 2003 年——那是 14 年,在网络技术领域,这太慢了 :)。

https://twitter.com/t_machine_org/status/917025348646199297

在此处输入图像描述

于 2013-10-04T12:14:01.643 回答
-3

据我所知,您无法使用 CSS 生成 SVG 图表或 SVG 条形码。

于 2012-07-13T08:53:44.530 回答