使用XMLWorker类创建Xpages PDF

时间:2013-05-20 20:17:48

标签: itext xpages

使用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的方式

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

1 个答案:

答案 0 :(得分:1)

罗布 严肃地说,不要试图在SSJS中这样做。 iText就是Java,如果你尝试用不同的语言来修改它,它会给你带来压力。创建一个包装类,该类包含一个方法,该方法接受OutputStream以及您需要的任何数据(Document,View等)。获取SSJS中的OutputStream并调用该函数。在OpenNTF上寻找XAgent XSnippet和我的博客系列(最后两个都不见了 - 请耐心等待)创建PDF。 需要注意的一点是:iText是GPL,因此您也可以使用GPL软件,购买商用iText许可证或寻找Apache PDFBox或Apache FOP等替代品。第二个警告:HTML到PDF是Pita。您可以查看一个商业工具,例如来自Swing软件(或改变你的方法)