使用SSJS,我已经成功地使用iText附带的简单HTML解析器创建了一个PDF,但是这个简单的HTML解析器不支持CSS,并且非常有限。我从iText站点下载了XMLWorker类,并尝试使用它,但我对如何调用iText包的了解太有限了。我能找到的所有示例都使用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的方式
是这样的吗?如果是这样,为什么我的脚本失败了?
发布于 2013-05-21 08:50:52
Rob,说真的,不要在SSJS中这样做。iText完全是Java语言,如果你试图用一种不同的语言来处理它,它会给你带来压力。创建一个包装类,该类的方法可以接受OutputStream和所需的任何数据(文档、视图等)。获取SSJS中的OutputStream并调用函数。在OpenNTF上查找XAgent XSnippet和我的博客系列(最后两个是缺失的-请耐心等待)。需要注意的一点是: iText是通用公共许可证,所以您要么也对您的软件进行GPL,购买一个商业iText许可证,要么寻找像Apache PDFBox或Apache FOP这样的替代品。啊,第二个警告: HTML到PDF是一个Pita。你可以考虑一个商业工具,比如来自Swing软件的(或者改变你的方法)
https://stackoverflow.com/questions/16657641
复制相似问题