document has no pages with 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();} 
%>

throws an error

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)

I have used the same xmlworker previously but never had any errors.even hellowworld isnt displayed.please help

Upvotes: 6

Views: 53444

Answers (6)

Ivan
Ivan

Reputation: 26

I dont know why dislike was on version upgrade answer, but realy look -> document created in case of

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

with 2 libraries

itextsharp.xmlworker
iTextSharp

In this case I have firlst library very old and same error. So I could suggest if some one will face with the error in the future to compare both version of app. Currently work

iTextSharp 5 5 13 4
itextsharp.xmlworker 5 5 13 4

Upvotes: 0

loakesh bachhu
loakesh bachhu

Reputation: 381

document.add(new Chunk("")); worked for me after document.open(); when the data is not there in the report text.

Upvotes: -1

fmk
fmk

Reputation: 39

I know it's a bit late to this answer, but in my case just upgraded iTextSharp to v. 5.5 from 5.0 and started to work correctly.

Upvotes: 0

John K
John K

Reputation: 28917

Other answers are good. This is an alternative.

In general, to prevent this error which often occurs when the document contains no meaningful data for content, even despite document.open() and document.newPage() having been called, and even after stamping other pages into that document, you can add an empty chunk when the document is opened to ensure the library never considers it empty. e.g.

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

Upvotes: 35

rhens
rhens

Reputation: 4871

XMLWorkerHelper.parseXHtml() expects (X)HTML or (X)HTML snippets. Try this:

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

Upvotes: 7

Leo Zhao
Leo Zhao

Reputation: 544

Try to new a page just like document.newPage() before you write something to document, hope that helps.

Upvotes: 3

Related Questions