【发布时间】:2020-08-12 15:10:56
【问题描述】:
我的任务是创建一个最多包含 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 分钟。
【问题讨论】:
-
为什么要将所有这些小段落添加到那个大段落而不是直接添加到文档中?
-
这很奇怪,但是当我用一个段落进行测试时,它的运行速度会更慢。在我的问题中查看更新
-
我刚刚提交了对上面代码的编辑,因为缺少花括号和奇怪的缩进并不能清楚地表明您的原始策略是什么(仅将段落添加到文档中在周期结束时),而不是您建议的解决问题的方法(随时将段落添加到文档中)
标签: java json performance pdf itext