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
[email protected]
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