itext PDF在段落中运行缓慢 更新

问题描述

我有一个任务来创建一个最多10000条记录的PDF文件。每个记录都是JSON表示形式的Java对象。 10个对象约为15000字节(jsonString.length())。包含1000条记录的结果文件在磁盘上大约需要900 KB。然后我做:

private static Font font = new Font(Font.FontFamily.TIMES_ROMAN,12,Font.NORMAL);

Document document = new Document();
PdfWriter.getInstance(document,new FileOutputStream(FILE));
document.open();

Paragraph p = new Paragraph();
p.add(new Paragraph("Title",font));

String jsonString = "{....}"; // 10 objects; jsonString.length()==15000
for (int i = 0; i < 100; i++) // add 1000 objects
    p.add(new Paragraph(jsonString,font));

document.add(p);
document.close();

但是,当我运行这段代码时,我正在等待80年代。为什么这么慢?可以更快地做到吗?

更新

当我仅使用一个具有200个对象的段落时,它的运行速度甚至更慢:

Paragraph p = new Paragraph("{......}"); // ~300_000 bytes
document.add(p);

将200个对象另存为PDF需要2分钟,而不是第一种情况下的1000个对象需要1.5分钟。

解决方法

我找到了一个具有OpenPdf库的解决方案。我创建了pdf文件,其中10000条记录的时间为7到17秒,pdf大小为4到32 MB,具体取决于单个记录的大小。

public static void main(String[] args) throws FileNotFoundException {
    Document doc = new Document();
    PdfWriter writer = PdfWriter.getInstance(doc,new FileOutputStream("OpenPDF-example.pdf"));
    //setting font family,color
    Font font = new Font(Font.HELVETICA,10);
    doc.open();
    for (int j=0; j<10000; j++) {
        Paragraph para = new Paragraph("single record from 1 to 5kB",font);
        doc.add(para);
    }
    doc.close();
    writer.close();
}

注意,需要按小段添加数据。当我尝试将所有数据添加到一个段落中时,它的运行速度非常慢(超过10分钟)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...