0

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

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

4

1 回答 1

1

Rob,说真的,不要试图在 SSJS 中这样做。iText 完全是 Java,如果你试图用不同的语言来处理它,它会让你感到压力。创建一个包装类,该类具有一个方法,该方法采用 OutputStream 和您需要的任何数据(文档、视图等)。在您的 SSJS 中获取 OutputStream 并调用该函数。查找 OpenNTF 上的 XAgent XSnippet 和我的关于 PDF 创建的博客系列(最后两个缺少 - 请耐心等待)。提醒一句:iText 是 GPL,因此您要么将软件也采用 GPL,要么购买商业 iText 许可证,要么寻找 Apache PDFBox 或 Apache FOP 等替代品。啊第二个警告:HTML 到 PDF 是一个 Pita。您可以查看例如来自 Swing 软件的商业工具(或更改您的方法)

于 2013-05-21T00:50:52.220 回答