web-dev-qa-db-ja.com

ドキュメントにitextのページがありません

<%
OutputStream output=response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=details.pdf");
try{
    Document document = new Document();
PdfWriter writer=PdfWriter.getInstance(document, output);
document.open();
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/a", "root", "root");
Statement st=con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
List arrlist = new ArrayList();
ResultSet rs=st.executeQuery("Select * from user_start1");
 while(rs.next()){
 arrlist.add(rs.getString("data"));
 }  
for(int i=0;i<12;i++){
  String str =(String) arrlist.get(i);
  System.out.println(str); 
  worker.parseXHtml(writer, document, new StringReader("helloworld"));
}
document.close();
writer.flush();
writer.close();
output.close();
}catch(IOException e){e.printStackTrace();} 
%>

エラーをスローします

SEVERE: Servlet.service() for servlet [jsp] in context with path [/chieflegis] threw exception [ExceptionConverter: Java.io.IOException: The document has no pages.] with root cause
Java.io.IOException: The document has no pages.
    at com.itextpdf.text.pdf.PdfPages.writePageTree(PdfPages.Java:113)
    at com.itextpdf.text.pdf.PdfWriter.close(PdfWriter.Java:1217)
    at com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.Java:807)
    at com.itextpdf.text.Document.close(Document.Java:416)
    at org.Apache.jsp.print_jsp._jspService(print_jsp.Java:112)
    at org.Apache.jasper.runtime.HttpJspBase.service(HttpJspBase.Java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:722)
    at org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:419)
    at org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:391)
    at org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:722)
    at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:304)
    at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:210)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:240)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:164)
    at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:462)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:164)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:100)
    at org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:562)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:118)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:395)
    at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:250)
    at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:188)
    at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:302)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
    at Java.lang.Thread.run(Thread.Java:724)

以前に同じxmlworkerを使用したことがありますが、エラーは発生していません。hellowworldも表示されません。助けてください。

XMLWorkerHelper.parseXHtml()は(X)HTMLまたは(X)HTMLスニペットを想定しています。これを試して:

worker.parseXHtml(writer, document, new StringReader("<p>helloworld</p>"));
6
rhens

他の答えは良いです。これは代替手段です。

一般に、document.open()document.newPage()が呼び出された場合でも、そのドキュメントに他のページをスタンプした後でも、ドキュメントにコンテンツの意味のあるデータが含まれていない場合によく発生するこのエラーを防ぐため、ドキュメントを開いたときに空のチャンクを追加して、ライブラリがドキュメントを空と見なさないようにすることができます。例えば.

document.open(); 
document.add(new Chunk("")); // << this will do the trick. 
30
John K

ドキュメントに何かを書く前に、document.newPage()のようにページを新しくしてみてください。それが役立つことを願っています。

0
Leo Zhao