将CSS用于PDF发布

近年来,随着人们使用多种尺寸屏幕的设备(笔记本、平板、手机、智能手表等),将结构化文档发布成适应这些设备的电子格式需求旺盛。另一方面,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呢?本文探讨这个话题。

- 1 -

为什么考虑使用CSS来生成PDF

首先,XSLT/XSL-FO人才稀缺性。

一方面,掌握XSLT和XSL-FO技能的人少,市场上难以找到相关的人才。如果只掌握XSLT/XSL-FO,应用的领域就是数据处理和发布,职业发展路径狭窄,造成培养人才和保留人员困难。

另一方面,CSS技术在Web上使用广泛,掌握CSS的人相对较多,通过学习CSS中页面相关知识即可开发PDF样式。

其次,是降低复杂度的需求。

XSLT虽然是一门操控性很强的数据处理语言,但是对于大型发布系统它相对复杂、代码不容易维护。开发人员容易出现头痛医头、脚痛医脚的情况,造成每次发布都要根据数据来调整样式表的情况。

反观CSS,它更加直观、简单,更容易维护。

最后,是降低成本的需求。

1. 使用CSS,让共用PDF和Web浏览的样式成为可能,能够节约开发和维护成本;

2. 它避免技术人员为输出PDF和HTML而学习两种语言;

3. 缩短开发时间。

- 2 -

业界观点

调研了业界专家的思考,总结如下:

一、CSS还是XSL-FO?

作者:来自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的比较。

将CSS用于PDF发布_第1张图片

XSL-FO

  • 存在20多年;

  • 可以实现复杂的文档排版需求;

  • 业界已经在此技术上投入很大努力;

  • 有更多的可用资源。

    • 已经开发好的DITA、DockBook、S1000D样式;

    • 可用的产品:开源的和商业的。

CSS

  • 已存在13年;

  • 可以实现几乎同级别的复杂排版需求;

  • 容易使用也容易学习 = 容易维护并更经济;

  • CSS的简单也意味着限制(并没有提到具体的限制)。

问答环节

  • CSS能实现XSL-FO能实现功能的90-95%,Antenna House网站有CSS和XSL-FO详细功能对比;

  • 有人从XSL-FO转到CSS,说减少1/3的开发时间。

二、为什么使用CSS而不是XSL-FO?

来自: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)。

三、XSL-FO已没落,CSS页面媒体是主要嫌疑人。

作者:来自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快,是一个值得投资的技术方向。

- 3 -

现有引擎

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

你可能感兴趣的:(排版,XSL-FO,CSS,css,前端)