int _MAX_ROWS = 1000;//最大行数,之后清理
int row_count = 0;//初始值
if (++row_count % _MAX_ROWS == 0) {
System.out.println("row_count % _MAX_ROWS="+ row_count % _MAX_ROWS);
// add table to Document
document.add(datatable);
// delete _MAX_ROWS from table to free memory
datatable.deleteBodyRows();
// let iText manage when table header written
//datatable.setSkipFirstHeader(true);
}
int fregmentSize = 1000;// 释放内存的行号
int k = 0;
for (int i = 0, h = bodys.size(); i < h; i++) {
if (i != 0 && i % fregmentSize == fregmentSize - 1) {
System.out.println("第[ " + (i + 1) + " ]行进行内存释放 " + ((k++) + 1) + " th");
document.add(datatable);
datatable.deleteBodyRows();
datatable.setSkipFirstHeader(true);
}
//.... 表格处理
}
int row_count = 0;//初始值
if (++row_count % _MAX_ROWS == 0) {
System.out.println("row_count % _MAX_ROWS="+ row_count % _MAX_ROWS);
// add table to Document
document.add(datatable);
// delete _MAX_ROWS from table to free memory
datatable.deleteBodyRows();
// let iText manage when table header written
//datatable.setSkipFirstHeader(true);
}
int fregmentSize = 1000;// 释放内存的行号
int k = 0;
for (int i = 0, h = bodys.size(); i < h; i++) {
if (i != 0 && i % fregmentSize == fregmentSize - 1) {
System.out.println("第[ " + (i + 1) + " ]行进行内存释放 " + ((k++) + 1) + " th");
document.add(datatable);
datatable.deleteBodyRows();
datatable.setSkipFirstHeader(true);
}
//.... 表格处理
}
在生成大型PDF报表时,为防止内存溢出,本文介绍了通过设置最大行数并定期清理表格内容的方法。每处理完指定行数(_MAX_ROWS),将表格添加到Document并从内存中删除已添加的行。同时,利用iText的特性管理表格头的写入,优化内存使用。此外,通过分段处理数据,每达到一定行数(fregmentSize)时,同样进行内存释放操作。
1万+

被折叠的 条评论
为什么被折叠?



