Hi folks, I'm getting a beginText/endText imbalance that I think I've narrowed down to NoNewLineParagraph or related functions. I'm using version 5.4.3 of iTextPDF and XMLWorker to generate a PDF file from an HTML file. JRE 6. If the length of a paragraph forces a newPage, it looks like things aren't(?) getting cleaned up properly.
I've included below a sample application that reproduces the failure, an input file, and a stack trace on an exception that occurs when the first newPage() is encountered. That exception is later ignored. The real problem is the beginText/endText imbalance when Document.close() is called at the end. As you'll see, I don't issue any beginText/endText. It's all handled by the XMLWorkerHelper. If you delete one character in the input file, everything is fine. Coincidentally you also get exactly one complete page on the pdf file, instead of running into the following page. Am I missing something simple here? Any help appreciated. - Chuck (Aside, are the files I've included below better sent as attachments, rather than in-line?) ******************* Here's a test application which reproduces the problem: import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.OutputStream; import java.awt.RenderingHints; import com.itextpdf.awt.DefaultFontMapper; import com.itextpdf.awt.PdfGraphics2D; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.FontFactory; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.tool.xml.XMLWorkerHelper; public class EndTextFailure { private DefaultFontMapper fontMapper; private PdfGraphics2D g2d; private PdfWriter writer; private XMLWorkerHelper helper; //-------------------------------------------------------------------------- - // EndTextFailure() //-------------------------------------------------------------------------- - public EndTextFailure() { fontMapper = new DefaultFontMapper(); FontFactory.registerDirectories(); } //-------------------------------------------------------------------------- - // doit() //-------------------------------------------------------------------------- - public void doit(String inFilename, String outFilename) { Document doc = null; helper = XMLWorkerHelper.getInstance(); try { OutputStream output = new FileOutputStream(outFilename); doc = new Document(PageSize.LETTER); doc.addTitle("This is the Title"); writer = PdfWriter.getInstance(doc, output); doc.open(); PdfContentByte cb = writer.getDirectContent(); g2d = new PdfGraphics2D(cb, 612, 792, fontMapper); drawFile(doc, inFilename); g2d.dispose(); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } if(doc != null) { doc.close(); } } //-------------------------------------------------------------------------- - // drawFile() // // Draws this.test into a Document. //-------------------------------------------------------------------------- - private void drawFile(Document doc, String inFilename) throws DocumentException { g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); String htmlFile = getFileContents(inFilename); try { helper.parseXHtml(writer, doc, new ByteArrayInputStream(htmlFile.getBytes())); } catch (IOException e) { e.printStackTrace(); } } //-------------------------------------------------------------------------- - // getFileContents() //-------------------------------------------------------------------------- - private String getFileContents(String inFilename) { String html = ""; BufferedReader reader = null; try { FileInputStream inStream = new FileInputStream(inFilename); reader = new BufferedReader(new InputStreamReader(inStream)); String inStr; boolean bDone = false; while(!bDone) { inStr = reader.readLine(); if(inStr != null) { inStr = inStr.trim(); if(inStr.length() != 0) { html += inStr; } } else { bDone = true; } } if(reader != null) { reader.close(); } } catch(IOException e) { e.printStackTrace(); } return(html); } //-------------------------------------------------------------------------- - // main() //-------------------------------------------------------------------------- - public static void main(String[] args) throws IOException { boolean bError = false; if(args.length != 2) { bError = true; } if(!bError) { EndTextFailure obj = new EndTextFailure(); obj.doit(args[0], args[1]); } else { System.out.println("Usage: EndTextFailure HTMLFILE"); } } } ******************* Here's an input file that fails: <HTML> <HEAD> <TITLE> </TITLE> </HEAD> <BODY> 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890123456789012345 67890 </BODY> </HTML> ******************* Here's a stack trace of the first suspicious exception that gets generated, as the file is parsed: EndTextFailure [Java Application] EndTextFailure at localhost:57314 Thread [main] (Suspended) PdfContentByte.sanityCheck() line: 3496 PdfContentByte.reset(boolean) line: 1465 PdfContentByte.reset() line: 1453 PdfWriter.resetContent() line: 759 PdfDocument.initPage() line: 1123 PdfDocument.newPage() line: 982 PdfDocument.carriageReturn() line: 1211 PdfDocument.add(Element) line: 463 NoNewLineParagraph(Phrase).process(ElementListener) line: 218 PdfDocument.add(Element) line: 512 Document.add(Element) line: 278 PdfWriterPipeline.write(WorkerContext, ProcessObject) line: 144 PdfWriterPipeline.content(WorkerContext, Tag, String, ProcessObject) line: 184 XMLWorker.text(String) line: 163 XMLParser.callText() line: 382 XMLParser.endElement() line: 393 ClosingTagState.process(char) line: 70 XMLParser.parseWithReader(Reader) line: 235 XMLParser.parse(Reader) line: 213 XMLParser.parse(InputStream) line: 174 XMLWorkerHelper.parseXHtml(PdfWriter, Document, InputStream, InputStream, Charset, FontProvider) line: 223 XMLWorkerHelper.parseXHtml(PdfWriter, Document, InputStream) line: 185 EndTextFailure.drawFile(Document, String) line: 83 EndTextFailure.doit(String, String) line: 56 EndTextFailure.main(String[]) line: 138 C:\Program Files (x86)\Java\jre6\bin\javaw.exe (Aug 26, 2013 3:43:23 PM) ------------------------------------------------------------------------------ Introducing Performance Central, a new site from SourceForge and AppDynamics. Performance Central is your source for news, insights, analysis and resources for efficient Application Performance Management. Visit us today! http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk _______________________________________________ iText-questions mailing list iText-questions@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/itext-questions iText(R) is a registered trademark of 1T3XT BVBA. Many questions posted to this list can (and will) be answered with a reference to the iText book: http://www.itextpdf.com/book/ Please check the keywords list before you ask for examples: http://itextpdf.com/themes/keywords.php