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

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

将CSS用于PDF发布相关推荐

  1. 使用PHP将HTML + CSS转换为PDF? [关闭]

    关闭. 这个问题是题外话 . 它当前不接受答案. 想改善这个问题吗? 更新问题 ,使其成为Stack Overflow 的主题 . 3年前关闭. 我有一个HTML(不是XHTML)文档,可以在Fire ...

  2. html pdf支持css%写法吗,flying-saucer-pdf终于完美解决了(中文问题,换行问题,分页,页眉页脚,水印),html+css控制pdf样式...

    集成freemarker+flying-saucer-pdf+itext,通过html模板生成PDF 折腾了很久,flying-saucer-pdf终于完美解决了(中文问题,换行问题,页眉页脚,水印) ...

  3. [css] 你知道CSS的标准发布流程吗?

    [css] 你知道CSS的标准发布流程吗? 随着 CSS 3 的广泛应用,很多新的 CSS 属性层出不穷,有很多陌生的 CSS 属性出现,所以经常需要去学习新的 CSS 属性.新的属性往往介绍文章不多 ...

  4. linux下怎么将html换成pdf,如何在Linux上使用PHP将HTML/CSS转换为PDF

    我一直试图将html页面转换为PDF,但没有任何运气,我尝试使用wkhtmltopdf(http://code.google.com/p/) wkhtmltopdf /)和虽然下面的命令在终端正确执行 ...

  5. 发布 'xx' 的并发快照不可用,因为该快照尚未完全生成,或者日志读取器代理未运行,无法激活它。如果并发快照的生成过程中断,则必须重新启动用于该发布的快照代理,直到生成完整的快照。

    发布 'xx' 的并发快照不可用,因为该快照尚未完全生成,或者日志读取器代理未运行,无法激活它.如果并发快照的生成过程中断,则必须重新启动用于该发布的快照代理,直到生成完整的快照. 这些步骤是在分发服 ...

  6. 发布一个MsBuild任务组件-可用于同时发布多个网站

    组件项目: /Files/jillzhang/Publishers.rar 演示项目: /Files/jillzhang/PubliserSample.rar 在Vs 2005 没有打Sp1的时候,可 ...

  7. pypdf2 存储pdf_PyPDF2:用于PDF文件操作的Python库

    pypdf2 存储pdf PyPDF2 is a pure-python library to work with PDF files. We can use the PyPDF2 module to ...

  8. TCP/IP协议精华指南pdf发布

    hi ,大家好,应小伙伴们的要求,昨天分享了个人的一些学习经验: 个人学习方法分享 这些经验是我自己多年不断总结得出的,希望可以给大家一点参考借鉴,但路还是需要自己走,大家还是要自己多总结,后面也可以 ...

  9. python读取pdf文件 pdfplumber_Python pdfprumber用于PDF表提取,pythonpdfplumber,表格

    import pdfplumber import pandas as pd import xlwt def toEcel(): workbook = xlwt.Workbook() # 定义workb ...

最新文章

  1. 吴恩达新书《Machine Learning Yearning》中7个实用建议(附论文)
  2. 安装SeleniumPhantomJS
  3. 关于RNA-seq数据集的小结
  4. Linux中写入ISO镜像
  5. Spring JPA
  6. mutable和volatile关键字
  7. 普通队列(数组实现)
  8. 【Hadoop学习】Super用户以其他用户的名义执行操作
  9. cpu vtx测试软件,推荐几个好用的检测电脑CPU是否支持(Virtualization Technology)虚拟化技术的工具-推荐实用小软件 -亦是美网络...
  10. 攻击日志分析 中职网络安全
  11. 第三方支付之支付宝支付
  12. NERO刻录ISO镜像图解教程
  13. 关于本人树莓派捣鼓过程中的一些记录
  14. 基于自适应反向学习的黏菌算法
  15. 原始混合合成器:Arturia Analog Lab for Mac
  16. 物联网智能硬件与嵌入式系统
  17. 每日自动签到签退的程序
  18. “路漫漫其修远兮,吾将上下而求索”,方向、方向、方向在哪里?
  19. 提高bp神经网络预测精度,bp神经网络数据预处理
  20. Vegas13安装教程图文附下载地址

热门文章

  1. 【看表情包学Linux】软硬链接
  2. 广度优先搜索以及C++实现
  3. Black Hole Routing
  4. 你的桌面IE图标还在吗?
  5. 写给不需要学python的人的python教程(二)—不能当厕纸的草稿本
  6. 机器学习-逻辑斯蒂回归(Logistic Regression)
  7. 试题 算法提高 找出出卖耶稣的人(Java)
  8. PHP魔术方法的总结
  9. PHP如何判断年月日时间是否存在重叠
  10. ArcGIS空间统计—Moran‘s莫兰指数上