Xpages 如何在使用ApacheFop输出为PDF时输出富文本(html)字段内容
我正试图按照Stephen Wissel的建议,使用xAgent和Apache FOP生成一个PDF文件:。大部分过程都工作正常,调用xAgent,从我的文档创建XML,并通过转换将其输出为PDF。我只是被困在如何处理富文本字段上。这些字段包含用户生成的内容(在xPage中创建),因此包含HTML片段。有没有人想出一个好办法将富文本字段和其他内容一起输出到PDFXpages 如何在使用ApacheFop输出为PDF时输出富文本(html)字段内容,xpages,apache-fop,Xpages,Apache Fop,我正试图按照Stephen Wissel的建议,使用xAgent和Apache FOP生成一个PDF文件:。大部分过程都工作正常,调用xAgent,从我的文档创建XML,并通过转换将其输出为PDF。我只是被困在如何处理富文本字段上。这些字段包含用户生成的内容(在xPage中创建),因此包含HTML片段。有没有人想出一个好办法将富文本字段和其他内容一起输出到PDF RichText是一种[插入无法打印的内容]。有许多考虑因素: 您是否需要RichText的完整客户端功能(选项卡式表格、OLE、分
RichText是一种[插入无法打印的内容]。有许多考虑因素:
- 您是否需要RichText的完整客户端功能(选项卡式表格、OLE、分区、悬停等)
- RichText的HTML表示是否足够好(当您通过浏览器查看它时,最终丰富了by)
- 大纲显示转换选项,包括示例样式表
- FOP Wiki中的,指向样式表和工具的
要成功转换HTML,需要将其转换为xHTML。这大致是这样的:
org.jsoup.nodes.Document hDoc = Jsoup.parse(source);
String cleanHTML = hDoc.body().html();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
InputSource source = new InputSource(new StringReader(cleanHTML));
DocumentBuilder docb = factory.newDocumentBuilder();
Document d = docb.parse(source);
return d;
对于XSLT转换,您不需要首先查看完整的文档,InputSource
沿着这些路线
/* Stylesheet most likely would come from a getResourceAsStream */
public String getFO(String rawHTML, InputStream styleStream) {
org.jsoup.nodes.Document hDoc = Jsoup.parse(rawHTML);
String cleanHTML = hDoc.body().html();
InputSource source = new InputSource(new StringReader(cleanHTML));
StreamSource style = new StreamSource(styleStream);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(style);
StreamResult xResult = new StreamResult(new StringWriter());
transformer.setOutputProperty("omit-xml-declaration", "yes");
transformer.transform(source, xResult);
String result = xResult.getWriter().toString();
return result;
}
当然,您需要添加错误处理等。请让我们了解您的用户如何创建并仅使用CKEditor填充XPages中的RichText字段。这是转换为pdf的良好先决条件。您的Richtext字段是HTML格式的 使用以下步骤:
我没有直接与xAgent和ApacheFop合作过,但从我使用FOP产品生成PDF开始,我需要通过XSL将HTML管道传输到FOP理解的标记,以将格式转换为FOP理解的标记24pt'编辑:试图找出代码格式如果你能做到这一点,请在OpenNTF上以代码段的形式发布!Fop确实支持内联图像-因此可能需要使用JTidy或jsoup在HTML预处理中增加一些魔力。我只需要HTML表示,因为它都是在xpage上创建的,并且存储为MIME/HTML。我已经从字段中以字符串的形式检索了HTML片段,现在我想我只需要将其转换为DOM树。jTidy确实提供了直接使用DOM文档的可能性,但已经有一段时间没有更新了。jsoup有自己的树,需要进一步转换。我确实看过DeveloperWorks的文章,并且一直在与天线室样式表进行回顾/比较。这两种方法似乎都需要一个完整的HTML文档,并设置页面和所有内容。一旦它是有效的XML,标准的JavaXMLDOM方法就会很好地工作。在我的电脑旁边,我将深入研究“一次编写的代码”框,看看是否能找到样本。我看到soup还有一个助手类,它将返回一个w3c dom文档,因此我应该能够在将其传递给转换之前使用它与我的其他内容合并。这就是我将要尝试的,我将汇报我的成功。