使用XMLWorker类创建Xpages PDF



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

Document newPDF = new Document();

但是在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和所需的任何数据(文档、视图等)。在SSJS中获取OutputStream并调用该函数。请查看OpenNTF上的XAgent XSnippet和我的关于PDF创建的博客系列(最后两篇不见了——请原谅我)。需要注意的是:iText是GPL的,所以您要么也使用GPL,要么购买商业iText许可证,要么寻找替代品,如Apache PDFBox或Apache FOP。第二个警告:从HTML到PDF是皮塔饼。你可以看看商业工具,比如Swing软件(或者改变你的方法)

最新更新