Itext Xpages使用XMLWorker类创建PDF

Itext Xpages使用XMLWorker类创建PDF,itext,xpages,Itext,Xpages,使用SSJS,我已经使用iText附带的简单HTML解析器成功地创建了一个PDF,但是简单HTML解析器不尊重CSS,而且非常有限。我从iText站点下载了XMLWorker类,并尝试使用它,但我对如何调用Java包的了解太有限。我能找到的所有示例都使用Java并直接引用类,例如 documentnewpdf=newdocument() 但是在SSJS中,我们必须使用点符号,例如 var newPDF:com.itextpdf.text.Document=new com.itextpdf.tex

使用SSJS,我已经使用iText附带的简单HTML解析器成功地创建了一个PDF,但是简单HTML解析器不尊重CSS,而且非常有限。我从iText站点下载了XMLWorker类,并尝试使用它,但我对如何调用Java包的了解太有限。我能找到的所有示例都使用Java并直接引用类,例如

documentnewpdf=newdocument()

但是在SSJS中,我们必须使用点符号,例如

var newPDF:com.itextpdf.text.Document=new com.itextpdf.text.Document()

我想这就是我绊倒的地方。我的代码如下所示:

function createLPO2(pReqDoc:NotesDocument) {

importPackage(com.itextpdf);
//importPackage(com.itextpdf.tool.xml.XMLWorkerHelper);
importPackage(java.io);

var con = facesContext.getExternalContext();
var response:com.ibm.xsp.webapp.XspHttpServletResponse = con.getResponse();

response.setContentType("application/pdf");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", -1);
response.setHeader("Content-Disposition","attachment; filename=\"LPO_" + pReqDoc.getItemValueString("RequisitionNo") + ".pdf\"");

var newPDF:com.itextpdf.text.Document = new com.itextpdf.text.Document();
var writer = com.itextpdf.text.pdf.PdfWriter.getInstance(newPDF,response.getOutputStream());
var xmlWorkerHelper = com.itextpdf.tool.xml.XMLWorkerHelper.getInstance();

var strHTML = getTestHTML(); //this is the HTML used in the examples on the iText site

xmlWorkerHelper.parseXHtml(writer, newPDF, new java.io.StringReader(strHTML));

newPDF.close();
writer.close();

facesContext.responseComplete();
}
如果按原样运行此脚本,则Domino控制台上会出现脚本错误。如果我删除了importPackage(com.itextpdf.tool.xml.XMLWorkerHelper)行中的注释它给出了一个完全不同的错误。我怀疑我必须导入XMLWorkerHelper包,而不仅仅是com.itextpdf包。我想,如果我使用7-zip这样的工具打开jar文件,我就可以找到路径,这就是我到达com.itextpdf.tool.xml.XMLWorkerHelper的原因

是这样吗?如果是这样,为什么我的脚本会失败?

Rob, 说真的,不要在SSJS中尝试这样做。iText完全是Java,如果你试图用另一种语言来处理它,你会感到压力很大。创建一个包装类,该类具有一个方法,该方法接受OutputStream和您需要的任何数据(文档、视图等)。获取SSJ中的OutputStream并调用函数。查找OpenNTF上的XAgent XSnippet和PDF创建上的我的博客系列(最后两个不见了-请注意)。
需要注意的是:iText是GPL,所以您可以将您的软件也GPL,购买商业iText许可证,或者寻找类似ApachePDFBox或ApacheFOP的替代方案。啊,第二个警告:HTML到PDF是一个Pita。您可以查看商业工具,例如Swing软件(或更改方法)

您遇到了什么脚本错误?您必须导入一个包,而不是类:importPackage(com.itextpdf.tool.xml)谢谢Sven-我不知道这一点。我对Java完全陌生,尽管我已经使用Notes很多年了。我对客户端javascript有很好的了解,并且发现学习服务器端javascript很容易,但Java仍然是一个谜。请关注即将到来的关于Notes9包装器的演讲谢谢您的回答。我承认你是对的,但我还是迷路了。我看了你的博客,找到了关于XML和XSL:FO和XSLT的文章。我理解这些原理,但如何创建“接受OutputStream的包装器类”的细节对我来说仍然是个谜。我花了太长时间在谷歌上搜索一本关于在Xpages中实现Java的初学者指南,但没有成功。例如,我发现了很多关于“托管bean”的东西,以及如何在“faces config.xml”中指向它们,但没有提到在nsf中存储托管bean的位置。我猜“包装类”是一个托管bean?嗨,Rob,要将Java类添加到XPage,只需在code/Java设计元素中编写一个即可(在8.5.3之前,您可以将它放在webcontent/web inf/src中,并将其添加到构建路径中)。包装器只是一个简单的Java类,它接受所有需要的参数。Follow com.notessensei.tools.PDFFormatter是一个包装类。除了实例化类之外,Java的所有东西都在里面,因此您的SSJS变得精干而吝啬