使用XSL-FO,CSS3而不是CSS2来创建像PDF这样的分页文档?

时间:2012-05-17 18:43:35

标签: css xml pdf pagination xsl-fo

有许多旧文本,如this 2002 book,声明我们必须使用“CSS for Web”和“XSL-FO for print”。 我认为在现今(2012)我们最终可以使用CSS来理解paged media of CSS2CSS3的某些内容...但是“新文本”,程序员的共识和softhouses的投资?

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

CSS2.1来自2011年,但CSS2.0是1998年的标准,2008年修订......我认为标准年龄不是问题。 包含HTML,XHTML或XML的CSS具有“打印力”:请参阅PrinceXMLWebKit print module(或wkhtmltopdf),ABCpdf等工具和其他人。

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

PS:此上下文有一些相关的问题/答案,about webkit transformconverting with with PHPGeneration PDF from HTML。对于这个提出的问题,没有人有好的答案。

5 个答案:

答案 0 :(得分:30)

感谢所有评论和回答!

现在,2014年超过我职位的1。5年(12月17日),是时候巩固了:对我来说,没有答案是“完整答案”,但所有答案(见Nenotlep和Alex的)都有助于形成一幅大图。 我现在的主要动机是巩固,是2013-11的@mzjn's news (here)

XSL-FO正式死亡

星期六,2013-11-02,Liam R. E. Quin wrote“我们已经关闭了工作组,因为没有足够的人参与”,W3C XML活动主管,关于XSL-FO 2.0连续性的失败。 (见better copy here)。

工作草案的最新更新于2012年1月,现已确认: W3C停止开发XSL-2

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

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

CSS3正式发展

标准CSS3-page是一个草稿,但许多应用程序,如PrinceXML v9AntennaHouse Formatter v6都证明它已准备就绪(!);并且,HTML5 for 2014的预期发布带有预测版本CSS3。

所以,我知道W3C的 CSS3-page 可以完成表达良好打印和良好PDF 所需的一切。

其他动机

有一天,在遥远的未来...... PDF将会死亡 - 它很复杂,不属于XML系列或W3C投资的一部分 - 并且许多人声称EPUB将取代它。 这是另一个好动机:平板电脑阅读器和PC浏览器将打印(HTML,XHTML和EPUB)以及PDF。因此PDF不是必需的...而且,对于这一天,唯一的标准需求,例如。 Webkit printing project,将是 CSS3-page 标准。

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


注意:2014年的另一个问题链接更新:wkHtmlToPDF is now here。关于“新文本”,现在我们有很多,见前。 Building Books with CSS3



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

如果您进一步为 XML-Publishing 实施新系统,没有充分理由使用 XSL-FO 。总结:

  • XSL-FO今天是一种死技术,仅供小众公司使用,用于维护大型出版公司的遗留系统,如Elsevier ...... Stackoverflow的大多数作者/读者来自中小型公司。像O'Reilly Media, Inc. already use CSS3 for print

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

  • 今天(2014年),您可以通过Google或我的链接查看(请参阅PrinceXML v9和AntennaHouse Formatter v6),我们有一些很好的软件可以使用 CSS2 CSS3

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

  • 如上所述,CSS3不是孤立的,它是“XML / HTML / SVG”系列的一部分。

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

  • ....



新闻...

2016年1月,确定的CSS3标准即将到来!

关于W3C标准:旧的“css-page”“css-break”“paged media”替换为“fragmentation” ...现在它是候选推荐标准,请参阅https://www.w3.org/TR/css-break-3

答案 1 :(得分:9)

2015年10月1日更新

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

这样的要求“向右移动1.8毫米的盒子以便触及纸张顶部”“我们需要最后一页是100%宽的无边距表“在XSL-FO中都非常可行,但在CSS中,即使考虑也太可怕了。在某些情况下,CSS只是不会将其剪切为足够好的软件,即使标签存在也不存在。甚至wkhtmltopdf(0.11,稍后不确定)在渲染TOC时使用XSLT并且不支持@page

我不能代表PrinceXML,因为虽然它看起来很棒但我事先知道价格标签是不可能的所以它不是一个选项 - 我怀疑这对很多开发商和公司都是如此。

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

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

答案 2 :(得分:4)

将来使用CSS而不是XSL-FO的一个可能原因是W3C的XML Print and Page Layout Working Group不再有效。没有足够的兴趣维持这个工作组。该小组在2012年初发布了XSL 2.0 working draft,但现在似乎不太可能出现更新的W3C建议。

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

顺便说一下,即使这是一个有趣的话题,我也不确定这个问题是否适合Stack Overflow。恕我直言,它更像是一个开放式的邀请来讨论某事而不是关于specific, practical, answerable problem的问题。

答案 3 :(得分:3)

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

我还在答案中添加了这部分内容,因为我无法对答案进行“评论”。

整个问题有一些历史。

此外,XSL-FO的丰富性及其学习与发展。 FO渲染过去10多年来的老化曲线已经有了很长的时间,可以让“更多”的东西得到解决。

2003年,我负责财富20强的企业级XML内容相关系统的概念验证和原型设计。

该系统的其中一部分必须随着人们的变化而动态地呈现PDF,Word,X / HTML版本的文档,并添加&修改内容XML。

甚至XSL-FO> PDF和Word-ML在当时有很多问题。

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

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

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

很有可能XSL-FO对于Paginated输出的所有代表性标记都超过CSS,现在(2013)可能在CSS3中复制并且被适当地呈现。

我希望这会有所帮助。

2017编辑:

显然,CSS在某些方面仍然在追赶,我记得在2003年大部分都是这样 - 这是14年,在网络技术方面,这是一个太慢的:)。

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

enter image description here

答案 4 :(得分:-3)

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