如何解决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分钟)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。