【发布时间】:2012-05-09 22:43:20
【问题描述】:
这是包含堆栈跟踪的代码:https://gist.github.com/2649430
我有 2 个 java 类。一种是合并多个 PDF 并返回结果合并 PDF 的字节数组,然后另一种是在 servlet 上提供结果 PDF 字节数组。当我运行服务器时,我得到这个错误:
java.lang.NullPointerException
at java.io.ByteArrayInputStream.<init>(ByteArrayInputStream.java:106)
at testPackage.TestServlet.doGet(TestServlet.java:37)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
(完整的堆栈跟踪包含在要点链接中)
您能帮我弄清楚如何做到这一点吗?
更新:真实性指出没有调用 mergePDF()。所以我更新了文件TestServlet.java:
public class TestServlet extends HttpServlet {
private static byte[] PDF;
public static void mergePDF() {
try {
List pdfs = new ArrayList();
pdfs.add(new FileInputStream("/test.pdf"));
pdfs.add(new FileInputStream("/test2.pdf"));
ByteArrayOutputStream output = new ByteArrayOutputStream();
PDF = PDFMerger.concatPDFs(pdfs, output, true);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
mergePDF();
InputStream is = new ByteArrayInputStream(PDF);
// Set response headers
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setContentLength(PDF.length);
OutputStream os = response.getOutputStream();
IOUtils.copy(is, os);
os.flush();
os.close();
}
}
还是没有解决问题:
根本原因 java.lang.NoClassDefFoundError: com/itextpdf/text/pdf/PdfTemplate testPackage.TestServlet.mergePDF(TestServlet.java:28) testPackage.TestServlet.doGet(TestServlet.java:37) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 根本原因 java.lang.ClassNotFoundException:com.itextpdf.text.pdf.PdfTemplate org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) testPackage.TestServlet.mergePDF(TestServlet.java:28) testPackage.TestServlet.doGet(TestServlet.java:37) javax.servlet.http.HttpServlet.service(HttpServlet.java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)UPDATE2:
感谢@mprabhat 和@Zhanger,我从here 下载了iText zip 并将其放入项目中。它只为我提供了这些罐子:itextpdf-5.2.1.jar, itextpdf-5.2.1-javadoc.jar, itextpdf-5.2.1-sources.jar, itextpdf-xtra-5.2.1.jar, itextpdf-xtra-5.2.1-javadoc.jar, itextpdf-xtra-5.2.1-sources.jar
你觉得合适吗?
奇怪的是,如果我将合并的 PDF 写入文件而不是将其存储为字节数组,一切正常...
【问题讨论】:
-
fix什么?解释您的问题并在此处发布最少的代码。目前你有一个wall of code。 -
@KingsIndian 我已经更新了我的问题
-
赔率是
mergePDF()在doGet()之前不会被调用,PDF是null。 -
@trutheality OMG 你是对的