我出口一個非常巨大的碧玉報告(約20000頁)。對於以避免內存不足的錯誤,通過不同的網站作爲建議的目的,我使用JRSwapFileVirtualize如下圖所示:正確使用JRSwapFileVirtualizer?
我的問題是:
1)我已經配置MAXSIZE 1000。 20000頁的報告可以嗎?
2)我在方法調用'fillReport'後立即清理虛擬器。是否正確,或者在將報告導出到XLS後需要清理虛擬器?
3)無論如何在導出報告後清理虛擬器,對我有幫助嗎?
4)創建JasperPrint對象,邏輯寫在服務器端。導出報告邏輯,用java客戶端編寫。如果我應該清理虛擬器,那麼在導出報告之後,我該如何處理這種情況?因爲在這種情況下,我需要在服務器端創建此虛擬器的靜態對象(因爲JRSwapFileVirtualizer不可序列化,因此我無法在服務器和客戶端之間創建並傳遞它),然後在導出後再次創建靜態對象,我需要調用服務器端方法來清理虛擬器。我在考慮創建靜態對象是一種風險,因爲如果對服務器端邏輯進行多次調用,那麼virtualizer靜態對象將持有對由最新調用創建的交換文件的引用,並且在清理之後由於這種情況,以前的交換文件可能不會被刪除。
我發現了更多關於此主題的信息: 在jasper爲使用virtualizer提供的示例中,他們只在調用common export時纔會清理虛擬器,這會導出多個類型的文件。他們沒有要求清理,當他們只出口單一類型的報告:
else if (TASK_CSV.equals(taskName))
{
exportCSV(jasperPrint);
}
else if (TASK_EXPORT.equals(taskName))
{
exportPDF(jasperPrint);
exportXML(jasperPrint, false);
exportHTML(jasperPrint);
exportCSV(jasperPrint);
// manually cleaning up
virtualizer.cleanup();
}
此外,他們還沒有提到XLS出口在這個例子中。我發現那裏的人也面臨着同樣的問題,另一個鏈接,但也沒有解決任何提到:
http://www.jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=95689
而且這個環節說,我們可以使用JRXlsxExporter代替。但JRXlsxExporter只導出excel 2007格式不在2003年。
我正在使用JExcelApiExporter.exportReport()將報告導出到XLS,對於大型報告它不起作用。 請幫我解決這個問題。 任何小提示或建議是可觀的。讓我知道,如果你需要更多的信息。 謝謝。
任何人都可以幫助找出這些問題的答案嗎?我無法在碧玉手冊中找到適當的信息。 – user613114 2012-08-02 05:36:38