我在一个打开PDF文件的按钮中有SSJS,写入它的一些字段(Acroform),然后将文件下载到用户。所有的作品都很棒(使用pdfbox),但我想成为一名优秀的程序员,如果原始pdf文件不可用,请取消操作。否则,用户仍会被提示打开文件,但Adobe Reader报告该文件已损坏(显然会是)。我在我调用的Java类中执行我的pdf操作,并传递响应对象的outputStream。以下是我的SSJS。如果我测试来自newVal.outputPdf的ret值并将所有其他代码放在if语句中,那么我的XPage只是空白。我假设,因为响应和outputStream已经打开?取消创建用于创建新PDF文件的outputteam的最佳方法?
霍华德
importPackage(com.tlcc);
var newVal = new PdfBoxTest();
importPackage(java.net);
importPackage(java.lang);
var con = facesContext.getExternalContext();
var response:com.ibm.xsp.webapp.XspHttpServletResponse = con.getResponse();
try {
var writer:javax.servlet.ServletOutputStream = response.getOutputStream();
//get the stream
var ret = newVal.outputPdf(writer, "http://localhost/pdfexportcc.nsf/certificate.pdf");
// setting response headers for browser
print("Good output");
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", -1);
response.setHeader("Content-Disposition", "attachment; filename=\"mypdf.pdf\"");
writer.flush();
writer.close();
print("in close");
facesContext.responseComplete();
} catch (e) {
var errorMessage = "An error has occured: " + e.toString();
_dump(errorMessage);
writer.close();
response.sendError(500, errorMessage);
}
与所有的工作再次尝试是用Java语言实现。我从一个按钮调用了这个方法。与有效的网址工作正常,但当网址不好时,会引发错误。异常在OutputStream已被使用时无法获得Writer。
public boolean outputAllInJavaPdf() {
try {
FacesContext context = FacesContext.getCurrentInstance();
XspHttpServletResponse response = (XspHttpServletResponse) context.getExternalContext().getResponse();
ServletOutputStream writer = response.getOutputStream();
InputStream docUrl = new URL("http://localhost/pdfexportcc.nsf/certifxxicate.pdf").openStream();
pdfDoc = PDDocument.load(docUrl);
System.out.println("Number of pages is " + pdfDoc.getNumberOfPages());
setField("Student", "James Namce");
setField("CourseName", "XPages Development 2 for Notes and Domino 9");
setField("Instructor", "John Smith");
System.out.println("After set field");
pdfDoc.save(writer);
pdfDoc.close();
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", -1);
response.setHeader("Content-Disposition", "attachment; filename=\"mypdf.pdf\"");
writer.flush();
writer.close();
context.responseComplete();
return true;
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
return false;
}
}
我确实需要XPage。我想在页面上有按钮来创建pdf并下载/打开它。但XPage应该保持开放。 – Howard 2015-04-03 13:26:22