这是包含堆栈跟踪的代码: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)
(完整的堆栈跟踪包含在 gist 链接中)
你能帮我弄清楚如何做到这一点吗?
更新:真实性指出没有调用 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)
更新2:
谢谢@mprabhat 和@Zhanger,我从这里下载了 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 写入文件而不是将其存储为字节数组,一切正常......