近年来,随着人们使用多种尺寸屏幕的设备(笔记本、平板、手机、智能手表等),将结构化文档发布成适应这些设备的电子格式需求旺盛。另一方面,PDF格式的文档具有可以保证内容和格式不被修改、方便保存和传递等特点。所以,发布成基于纸张输出的需求并没有消失。本文讨论发布基于纸张输出(PDF)的技术探索和进展。
XSL-FO和CSS都是W3C的标准。
最初,CSS被设计用于支持HTML的Web浏览;XSL-FO被用于支持基于纸张的发布(打印)。
近年来有一个新的趋势:使用CSS来支持基于纸张的发布。
一方面XSL-FO 1.1已经很成熟稳定,后续需求少,并未定义下一版本发布时间。另一方面,CSS除支持HTML的Web浏览外,2014年CSS3增加了基于页面媒体模块的工作草案,可用于支持基于纸张的发布。
那么是否我们应该放弃XSLT/XSL-FO,而使用CSS呢?本文探讨这个话题。
首先,XSLT/XSL-FO人才稀缺性。
一方面,掌握XSLT和XSL-FO技能的人少,市场上难以找到相关的人才。如果只掌握XSLT/XSL-FO,应用的领域就是数据处理和发布,职业发展路径狭窄,造成培养人才和保留人员困难。
另一方面,CSS技术在Web上使用广泛,掌握CSS的人相对较多,通过学习CSS中页面相关知识即可开发PDF样式。
其次,是降低复杂度的需求。
XSLT虽然是一门操控性很强的数据处理语言,但是对于大型发布系统它相对复杂、代码不容易维护。开发人员容易出现头痛医头、脚痛医脚的情况,造成每次发布都要根据数据来调整样式表的情况。
反观CSS,它更加直观、简单,更容易维护。
最后,是降低成本的需求。
1. 使用CSS,让共用PDF和Web浏览的样式成为可能,能够节约开发和维护成本;
2. 它避免技术人员为输出PDF和HTML而学习两种语言;
3. 缩短开发时间。
调研了业界专家的思考,总结如下:
作者:来自Antenna House的Michael Miller,2020年6月
https://www.antennahouse.com/news/css-or-xsl-fo-webinar-recording?hsLang=en
注:视频中,Michael并没有偏向CSS或者XSL-FO。Antenna House既支持XSL-FO也支持CSS,他希望大家使用XSL-FO或者CSS来做纸质出版。
PDF输出需求依然存在;
什么时候使用XSL-FO:飞机、潜艇、汽车的手册;
XSL-FO与CSS的比较。
XSL-FO
存在20多年;
可以实现复杂的文档排版需求;
业界已经在此技术上投入很大努力;
有更多的可用资源。
已经开发好的DITA、DockBook、S1000D样式;
可用的产品:开源的和商业的。
CSS
已存在13年;
可以实现几乎同级别的复杂排版需求;
容易使用也容易学习 = 容易维护并更经济;
CSS的简单也意味着限制(并没有提到具体的限制)。
问答环节
CSS能实现XSL-FO能实现功能的90-95%,Antenna House网站有CSS和XSL-FO详细功能对比;
有人从XSL-FO转到CSS,说减少1/3的开发时间。
来自:Oxygen Chemistry帮助文档
https://www.oxygenxml.com/doc/versions/24.1/ug-chemistry/topics/ch_getting_started.html
没有一个简单的答案。这实际上取决于所需的输出,但这两种方法都可以生成PDF文档,没有任何问题。那么为什么要使用CSS呢?
CSS比XSLT更容易学习和掌握。
更多的人知道CSS而不是XSLT(而且可用的CSS教程比XSLT教程更多)。
CSS调试可以直接从任何浏览器或者Oxygen Author完成。
在大多数情况下,CSS定制将覆盖用户的所有需求。
CSS定制可以在任何HTML输出中重用。
级联优先级方案使CSS更易于扩展(无需知道以前的规则即可创建新规则)。
PDF处理器通常支持这两种解决方案(Oxygen Chemistry, Antenna House, Prince XML)。
作者:来自RockWeb的Mike Kelly,2019年4月
https://readwritecode.net/ebooks/2019/04/27/xsl-fo-is-dead-css-paged-media-is-prime-suspect.html
1)XSL-FO优势:
有开源实现FOP;
有稳定的商业实现:RenderX,Antenna House,他们都提供了对XSL-FO标准的支持;
XSLT一般和XSL-FO一起使用,XSLT是一个处理XML数据的语言,对数据有很强的控制能力。
W3C XML活动负责人Liam R. E. Quin 2013年11月说:
我们关闭了工作组,因为没有足够的人参加。
不在新项目中使用XSL-FO的一个理由是,负责规范的W3C工作组不再活跃,也不再维护。从另一方面说,这也表示它现在已经足够好了,不需要进一步的修订或扩展。
2)CSS是未来吗?
是的,我相信在未来几年内,CSS将取代XSL-FO在世界出版社的地位,就像在O’Reilly公司已经发生的那样。
但根据Mozilla的说法,到目前为止,浏览器中还不能使用CSS页面媒体,目前只有基本支持。
因此,您需要使用PDF处理器将XHTML和CSS转换为PDF。
3)供应商锁定?
支持CSS用于PDF发布的处理器并不便宜,而且有很多特定于供应商的扩展属性,我会对代码的可移植性和供应商的锁定有一些担心。
4)结论
XSL-FO还没有死,现在仍然能够胜任作为基于XML的发布系统基础的任务。如果您只对印刷媒体感兴趣,并且没有支持ePub的计划,我建议您毫无保留地使用XSL-FO。
然而,如果您还需要支持ePub,CSS应该出现在您的计划中。它的发展很快,页面媒体规范现在是一个工作草案,这意味着浏览器供应商开始实施它。
总而言之,这是一个有趣的时间来参与打印开发。
使用Oxygen Chemistry做了初步的测试,用CSS做PDF输出容易上手。
对一些典型的PDF格式用户手册进行了分析,挑出来可能有实现难度的样式。实验表明对于很多常见的输出要求,厂家的发布引擎已经有解决方案。 如果需要代码具备可移植性,目前还有挑战,使用时要关注。
CSS具有很好的群众基础,并且发展速度比XSL-FO快,是一个值得投资的技术方向。
1)Antenna House
https://www.antennahouse.com/
网站有丰富的CSS相关资源和很详细的对CSS支持的信息。
2)Oxygen Chemistry
https://www.oxygenxml.com/doc/versions/24.1/ug-chemistry/
Oxygen Chemistry底层使用了FOP(对,就是Apache那个XSL-FO开源引擎)。需要对输出的PDF,尤其是包括中文的PDF进行验证。
3)Prince XML
https://www.princexml.com/download/
4)PDFreactor
https://www.pdfreactor.com/
5)XHTML2PDF
https://xhtml2pdf.readthedocs.io/en/latest/#
更多结构化内容和工具,请见:www.manualsware.com