java – 具有嵌入式HTML的PDF报告
我们有一个基于
Java的系统,可以从数据库中读取数据,将各个数据字段与预设的XSL-FO标签合并,并将结果转换为PDF格式的PDF FOP.
在XSL-FO格式中,它看起来像这样: <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE Html [ <!ENTITY nbsp " "> <!-- all other entities --> ]> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/"> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" font-family="..." font-size="..."> <fo:layout-master-set> <fo:simple-page-master master-name="Letter Page" page-width="8.500in" page-height="11.000in"> <!-- appropriate settings --> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="Letter Page"> <!-- some static content --> <fo:flow flow-name="xsl-region-body"> <fo:block> <fo:table ...> <fo:table-column ... /> <fo:table-body> <fo:table-row> <fo:table-cell ...> <fo:block text-align="..."> <fo:inline font-size="..." font-weight="..."> <!-- Header / Title --> </fo:inline> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> </fo:block> <fo:block> <fo:table ...> <fo:table-column ... /> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block ...> <!-- Field A --> </fo:block> </fo:table-cell> </fo:table-row> </fo:table-body> </fo:table> <!-- Other fields in a very similar fashion as the above "Field A" --> </fo:block> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> </xsl:stylesheet> 现在我正在寻找一种允许某些字段包含静态HTML格式的内容的方法.该内容将由我们的启用HTML的编辑器(与CLEditor,CKEditor等相似的内容)生成,或从外部粘贴. 我的计划是遵循食谱from this JavaWorld article: >使用JTidy将HTML格式的字符串转换为正确的XHTML 我有一个裸骨版本的这样的代码,并得到以下错误:
我的问题: >解决这个问题的方法是什么? 如果有人已经“在那里做了”,请分享你的经验. 解决方法
解决问题的最佳方法是使用验证的查看器/编辑器来检查XSL FO.许多(如oXygen)会在您打开它们时显示XSL FO结构中的错误,并将描述问题(就像报告的错误).
在你的情况下,你显然有一个fo:table-body作为fo:block的小孩.它不可能是.一个fo:table-body只有一个有效的父类,fo:table.您将丢失fo:table标签,或者您错误地将fo:block插入到此位置. 在我看来,我可能做的事情略有不同.我会把XHTML内容放在你想要的XSL FO里??面.然后,我将创建一个身份转换,复制所有基于fo的内容,但是使用XSL转换XHTML部分.这样,您可以在XSL编辑器(如oXygen)中实际进行该转换,并查看发生错误的原因以及为什么.像其他任何人一样. 注意:您也可以查看其他XSL,特别是如果您的HTML可能有任何style =“”CSS属性.如果是这种情况,它不是简单的HTML,那么您将需要一个更好的方法来处理HTML到CSS. http://www.cloudformatter.com/css2pdf是基于这个完整的转换.一般样式表可在这里:http://xep.cloudformatter.com/doc/XSL/xeponline-fo-translate-2.xsl 我是那个样式表的作者.它比你所要求的要多得多,但是将一个相当复杂的解析递归用于将CSS样式转换为XSL FO属性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |