当前位置: 首页 > 面试题库 >

使用XSL-FO,CSS3而不是CSS2创建分页文档(如PDF)?

柯立果
2023-03-14
问题内容

有很多旧文本,例如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具有“打印的力量”:请参见PrinceXML,WebKit打印模块(或wkhtmltopdf),ABCpdf等工具。

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

PS:在这种情况下,有一些相关的问题/解答,例如有关Webkit转换,用PHP进行转换以及有关从HTML生成PDF的问题。没有人对这个提出的问题有好的答案。


问题答案:

CSS3正式增长
标准的CSS3页面是草稿,但是许多应用程序(例如PrinceXML v9和AntennaHouse Formatter v6) 证明它已经准备就绪(!);而且,2014年预期的HTML5发行将与CSS3预测发行版一起进行。

因此,我知道对于W3C,CSS3-page可以完成表达出色的印刷品和PDF所需的所有工作。

其他动机
有一天,在不远的将来……PDF将会死掉-它是复杂的,不属于XML系列或W3C投资的一部分-许多人声称EPUB将取代它。这是另一个很好的动机:平板电脑阅读器和PC浏览器将同时打印(HTML,XHTML和EPUB)以及PDF。因此,PDF将不再是必需的…而且,对于这一天,唯一的标准需求是ex。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,涵盖了所有的差距(和恐惧为@来自Alexs的)的CSS2。

  • 今天(2014年),您可以通过Google或我的链接(请参阅PrinceXML v9和AntennaHouse Formatter v6)进行检查,我们有一些不错的软件可以用CSS2或CSS3呈现内容。

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

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

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

....

2016年1月,确定的CSS3标准即将发布!
关于W3C标准:旧的“ css-page”替换为“ css-break”,“ paged media”改为“ fragmentation” ...现在是候选建议,请参见https://www.w3.org/ TR / css-break-3

2020年4月,Blimey,+ 4年,什么都没有!…好,需要更多测试
从问题发布到发布,总共有8年,从“ css-break-3失败了”,总共有4年!公告…

Chrome是第一个在2019年发布的Chrome,但在W3C的测试验证团队中有些错误,而在2020年,则出现了错误。现在的状态(在23个测试中)是:

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



 类似资料:
  • 我有一个软件,可以从文本文件创建描述,并将其转换为PDF文档。文本文件中的每一行都被转换为fo中的,这听起来是错误的,但我现在无法更改。我的文件包含1到3页A4纸。 我现在需要做的是在现有文本下方添加一个宽度约为8厘米的图形。它应该是左对齐的。在它旁边,我想放置一个带有(长)描述的文本块。 我查看了FO的几个文档并提出了这个: 这似乎是我想要的(当然经过一些微调),但不幸的是,FOP还不支持<co

  • 我想在我的标签上使用属性 这是我的xml的一个例子:

  • 我在用iText7做游戏。净c#。我正在尝试在内存中创建一个多页PDF文档(n页数),其中源PDF文档只包含一页。 我可以用一页创建一个新文档,但无法根据需要创建额外的页面。我试过了 但我得到了一个ArgumentOutOfRange例外。。。索引超出范围。。。等 我试图关闭destPdfDoc,然后重新打开它,认为第二页直到我关闭它才被写入。但是当第二次打开destPdfDoc时,它没有页面。我

  • 我正在尝试从Java结果集创建PDF报告。如果报告只有一页,我在这里就没有问题了。这个问题源于这样一个事实:这份报告可能有一到十页长。现在,我要创建一个单页文档: 所以我的问题是,如何根据需要动态创建页面。有没有一个面向对象的答案盯着我看,而我就是看不见?

  • 问题内容: 我在应用程序中对函数和我尝试过的包godoc -html以及应用程序和结果创建了简单的注释 为什么我没有看到其他文件?以及为什么包的空格 问题答案: 默认情况下,未记录未导出的标识符。至少设置为查看它们: 可以使用“ m” URL参数来控制godoc服务的网页的显示方式;它接受以逗号分隔的标志名称列表作为值: ones methods show all embedded methods

  • 我目前正在迭代一个数组,其中每个索引包含两个节点和一个关系(第1部分)- 我读了这篇文章,但我不明白如何实现它,使两个相同的节点具有相同的ID。我现在的代码是这样的: 创建两个节点 创造他们的关系 将关系添加到节点 坚持使用Neo4jTemplate.save() 我需要更改什么以合并而不是创建?我是否需要在持久化之前进行检查,或者在持久化SDN 4时是否有方法进行检查? 编辑: 我决定使用Neo