Creating a large PDF file from a huge amount of data

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) {
            // For the first page the PDF writer is created:
            renderer.createPDF(bodyStream, false);
        }
        else {
            // Other documents are appended to current PDF writer:
            renderer.writeNextDocument(currentPage);
        }

        currentPage += renderer.getRootBox().getLayer().getPages().size();
    }

    // Finalise the PDF:
    renderer.finishPDF();
}
catch (DocumentException e) {
    throw new IOException(e);
}
catch (org.dom4j.DocumentException e) {
    throw new IOException(e);
}
finally {
    IOUtils.closeQuietly(bodyStream);
}

, . - ? , , , , ( PDF), , , (currentLine ). , .

+4
2

, , PDF , HTML, HTML PDF. .

, moveTo() lineTo(). , , .

PdfPTable. ArrayToTable - POC, List<List<String>>. , :

PdfPTable table = new PdfPTable(8);
table.setWidthPercentage(100);
List<List<String>> dataset = getData();
for (List<String> record : dataset) {
    for (String field : record) {
        table.addCell(field);
    }
}
document.add(table);

: , table , , ​​ . . MemoryTests. :

table.setComplete(false);

( : 10 ). , :

table.setComplete(true);
document.add(table);

.

/ , PDF : header_footer_1.pdf

HeaderFooter1 HeaderFooter2 , .

+5

, , , .

, , LaTeX, pdflatex.

:

  • LaTeX, , - , HTML.
  • TeX . LaTeX . .
  • , . ? ? ? Clickable .. .. .
  • LaTeX .

:

  • LaTeX - , Java lib.

, .

+3

Source: https://habr.com/ru/post/1546021/


All Articles