我正在尝试按照Stephen Wissel的建议使用xAgent和Apache FOP生成PDF文件:http://www.wissel.net/blog/d6plinks/SHWL-8TNLTV。大多数过程都运行正常,调用xAgent,从我的文档创建XML并将其传递给转换以输出PDF。我只是坚持如何处理富文本字段。这些字段包含用户生成的内容(在xPage中创建),因此包含HTML片段。有没有人想出一个很好的方法将富文本字段和其他内容输出到PDF?
富
答案 0 :(得分:1)
您的用户仅使用CKEditor创建并填充XPage中的RichText字段。这是转换为pdf的良好前提。您的Richtext字段是HTML格式。
使用以下步骤:
答案 1 :(得分:0)
RichText是[插入不可打印的东西]。有很多考虑因素:
在前一种情况下,你可能唯一的途径是抓住DXL表现并尝试转换那个 - 我玩过它,这似乎是可行的但是漫长而痛苦的道路。
在后一种情况下,您首先要了解HTML表示。这可以使用?OpenField命令或code snipped by Mark。
来完成现在您有了HTML,您可能希望使用jsoup进行清理,然后将其转换为XSL:FO。一些指导可以在这里找到:
不幸的是,不是复制/粘贴解决方案,但可能是可行的。让我们知道它是如何发展的,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;
}
当然你需要添加错误处理等。让我们知道它是怎么回事