我们有一个基于Java的系统,该系统从数据库中读取数据,将各个数据字段与预设XSL-FO
标签合并,然后将结果转换为PDF
with Apache 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
等),或者从外部粘贴。
我的计划是遵循此JavaWorld文章的配方:
JTidy
将HTML格式的字符串转换为正确的XHTML 我有这样的代码的准系统版本,并收到以下错误:
(错误的位置未知)org.apache.fop1.fo.ValidationException:“ {
http://www.w3.org/1999/XSL/Format }
table-body”不是“ fo:block”的有效子代!(没有可用的上下文信息)
我的问题:
<fo:block>
用作嵌套了其他对象(包括表)的通用容器吗?如果有人已经“ 在那里做过 ”,请分享您的经验。
解决问题的最佳方法是使用验证查看器/编辑器检查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部分。这样,您实际上可以在像oXygen这样的XSL编辑器中逐步进行转换,并查看错误发生的位置以及原因。像任何其他骗子一样。
注意:您可能还希望查看其他XSL,尤其是在HTML可能具有任何style =“”
CSS属性的情况下。如果不是纯HTML的情况,那么您将需要一种更好的方法,使用CSS到FO处理HTML。
http://www.cloudformatter.com/css2pdf基于此完整的转换。该常规样式表可在此处获得:http : //xep.cloudformatter.com/doc/XSL/xeponline-fo-
translate-2.xsl
我是该样式表的作者。它的功能远远超出您的要求,但是具有相当复杂的解析递归,可以将CSS样式转换为XSL FO属性。
问题内容: 我想在Python / Django中编写包含以下部分的HTML邮件: HTML链接到logo.png logo.png应该在邮件用户代理中内联显示(不作为附件显示) info.pdf,应显示为附件 如果邮件用户代理无法显示HTML,则应显示的文本。 我关注了这篇博客文章。 结果: HTML和内嵌图片有效 但info.pdf文件的处理方式类似于内联logo.png,并且某些邮件用户代理
我需要将所有html报告转换为PDF。 这是一个nodejs应用程序,所以我找不到任何将html转换为pdf的核心模块。 所以我使用JAVA飞碟罐将html转换为PDF。除了html中嵌入的svg之外,其他一切都可以完美地工作。我在谷歌上搜索到了这个教程和Stackoverflow链接。我是一名nodejs开发人员,对java有基本的了解。我不知道如何将此代码与飞碟集成。 请指导我做什么 . 下面
虽然它按预期工作,并嵌入了使用的字体子集,但我想知道是否有一种方法可以使生成的PDF文档完全不嵌入字体。当创建实例并将属性设置为并使用它们来生成各种PDF构建块时,就可以使用这种方法。在使用时,我正在寻找同样的行为。
null ServerEndpoint: 谢谢你。
我在我的liferay自定义portlet中使用jasper报告,我用ireport 4.7.1设计了我的报告,但我的问题是为什么用html和pdf生成的报告有很大的差异。html格式和pdf格式的报告行有很大的差异。我如何使从同一个jasper文件生成的html和pdf报告完全相同。?我的意思是用相同的外观和感觉。下面是我的html和pdf报表片段 下面是我的jrxml文件,我从该文件生成。ja
问题内容: 将PDF嵌入HTML的推荐方法是什么? iFrame? Object? Embed? Adobe对此有何评价? 就我而言,PDF是即时生成的,因此在刷新之前无法将其上传到第三方解决方案。 问题答案: 最好的方法可能是使用PDF.JS库。它是用于PDF文档的纯HTML5 / JavaScript渲染器,没有任何第三方插件。