Xpages 如何在使用ApacheFop输出为PDF时输出富文本(html)字段内容

Xpages 如何在使用ApacheFop输出为PDF时输出富文本(html)字段内容,xpages,apache-fop,Xpages,Apache Fop,我正试图按照Stephen Wissel的建议,使用xAgent和Apache FOP生成一个PDF文件:。大部分过程都工作正常,调用xAgent,从我的文档创建XML,并通过转换将其输出为PDF。我只是被困在如何处理富文本字段上。这些字段包含用户生成的内容(在xPage中创建),因此包含HTML片段。有没有人想出一个好办法将富文本字段和其他内容一起输出到PDF RichText是一种[插入无法打印的内容]。有许多考虑因素: 您是否需要RichText的完整客户端功能(选项卡式表格、OLE、分

我正试图按照Stephen Wissel的建议,使用xAgent和Apache FOP生成一个PDF文件:。大部分过程都工作正常,调用xAgent,从我的文档创建XML,并通过转换将其输出为PDF。我只是被困在如何处理富文本字段上。这些字段包含用户生成的内容(在xPage中创建),因此包含HTML片段。有没有人想出一个好办法将富文本字段和其他内容一起输出到PDF


RichText是一种[插入无法打印的内容]。有许多考虑因素:

  • 您是否需要RichText的完整客户端功能(选项卡式表格、OLE、分区、悬停等)
  • RichText的HTML表示是否足够好(当您通过浏览器查看它时,最终丰富了by)
在前一种情况下,您可能唯一的途径是获取DXL表示并尝试转换该表示-我使用了它,这似乎是可行的,但这是一条漫长而痛苦的道路

在后一种情况下,您首先要了解HTML表示。可以使用命令或

现在有了HTML,您可能希望使用清理,然后将其转换为XSL:FO。可以在这里找到一些指导:

  • 大纲显示转换选项,包括示例样式表
  • FOP Wiki中的,指向样式表和工具的
不幸的是,这不是一个复制/粘贴解决方案,但可能是可行的。让我们了解它的进展情况,对于XPages和Domino来说,这个主题似乎是人们普遍感兴趣的

更新
要成功转换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格式的

使用以下步骤:

  • 将HTML转换为XHTML。这是一个很好的工具。XHTML具有比HTML更强的语法,并且通过这种方式更容易转换为FOP
  • 将AntennaHouse集成到XSL中。有一种可用的方法,效果很好
    我没有直接与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文档,因此我应该能够在将其传递给转换之前使用它与我的其他内容合并。这就是我将要尝试的,我将汇报我的成功。