I am reading data from a database from which I am creating an HTML DOM. The amount of data is huge, so it can not immediately fit into memory, however, it can be provided separately.
I would like to convert the resulting HTML to PDF using Flying Saucer :
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.DOMWriter;
OutputStream bodyStream = outputMessage.getBody();
ITextRenderer renderer = new ITextRenderer();
DocumentFactory documentFactory = DocumentFactory.getInstance();
DOMWriter domWriter = new DOMWriter();
Element htmlNode = documentFactory.createElement("html");
Document htmlDocument = documentFactory.createDocument(htmlNode);
int currentLine = 1;
int currentPage = 1;
try {
while (currentLine <= numberOfLines) {
currentLine += loadDataToDOM(documentFactory, htmlNode, currentLine, CHUNK_SIZE);
renderer.setDocument(domWriter.write(htmlDocument), null);
renderer.layout();
if (currentPage == 1) {
renderer.createPDF(bodyStream, false);
}
else {
renderer.writeNextDocument(currentPage);
}
currentPage += renderer.getRootBox().getLayer().getPages().size();
}
renderer.finishPDF();
}
catch (DocumentException e) {
throw new IOException(e);
}
catch (org.dom4j.DocumentException e) {
throw new IOException(e);
}
finally {
IOUtils.closeQuietly(bodyStream);
}
, . - ? , , , , ( PDF), , , (currentLine ). , .