スタックトレースを含むコードは次のとおりです:https ://gist.github.com/2649430
2つのJavaクラスがあります。1つは複数のPDFをマージし、結果のマージされたPDFのバイト配列を返すことです。もう1つは、結果の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に感謝します。ここからiTextzipをダウンロードして、プロジェクトに入れました。それは私にこれらの瓶を提供するだけです: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をバイト配列として保存するのではなくファイルに書き込むと、すべてが正常に機能します...