2009-11-06 64 views
8

我想用JSP創建一個動態報告網頁。基本上它應該包含以下部分:JasperReports html和pdf輸出

  1. 過濾器:用戶可以指定過濾條件並按過濾按鈕。
  2. HTML-output:過濾器的結果可以在這裏看到。這是一個大的html頁面(或者如果一個頁面太大,就會有幾個頁面)。它可能包含到系統其他部分的鏈接。
  3. PDF輸出:用戶應該能夠保存PDF版本的報告用於打印或歸檔目的。

我不想自己實現所有的東西,我想使用java報告庫,所以我使用JasperReports創建了我的報告。 pdf輸出非常好,但報告的html導出不適合我的目的。

JasperReport的html導出創建了一個包含大量硬連線代碼和相當隨機配置選項的html文件。例如,它默認創建一個白色背景的表格(<table style="... bgcolor="white" ... ">),該表格可以使用IS_WHITE_PAGE_BACKGROUND選項關閉,另一方面,cellpadding="0" cellspacing="0" border="0"table標籤中被硬連線。這也是奇怪的(並且使css造型困難),而不是span類,html文件包含所有我的字段的<span style="font-family: sansserif; color: #000000; font-size: 10.0px;">

當然,我可以使用JSP實現html輸出,但這意味着我必須設計輸出兩次(一次在jrxml中用於JasperReports,一次在JSP中),並且我必須重新實現報告功能(如小計計算,總計算,分組......),這是違反DRY原則。

實現此目的的最佳實踐是什麼?使用JasperReports可以創建更好的HTML導出嗎?

回答

12

要改變JasperReports的HTML輸出效果並不容易。這是爲什麼一個古老的名言:

...文檔格式,如HTML或XLS, 不支持的 文本和圖形元素絕對定位。這些文檔的內容 在網格或表格結構中排列爲 。的 當然,有些人可能會在HTML元素是絕對 定位 可能由於CSS,但你可以 確保CSS標準 功能遠未 在所有瀏覽器中實現,或者 相同的HTML文檔不會看到相同的地方 。

這就是爲什麼產生HTML, XLS或CSV文件,內置的出口商^ JasperReports的使用一種特殊的算法 以安排存在於某種網格的某個文件 頁面上的 元素。當 報表設計非常複雜或 團聚,從絕對 定位傳遞給電網或表格佈局 產生非常複雜的表格有許多 未使用的行和列,使其 的元素 或他們的特殊定位之間的空間。

source

如前所述它是舊的,但據我可以告訴它仍然是準確的。

的事情你可以控制的HTML出口列表是非常有限的:

net.sf.jasperreports.export.html.frames.as.nested.tables 
net.sf.jasperreports.export.html.remove.emtpy.space.between.rows 
net.sf.jasperreports.export.html.size.unit 
net.sf.jasperreports.export.html.using.images.to.align 
net.sf.jasperreports.export.html.white.page.background 
net.sf.jasperreports.export.html.wrap.break.word 
net.sf.jasperreports.export.{format}.exclude.origin.{suffix}.{arbitrary_name} 
net.sf.jasperreports.export.{format}.exclude.origin.keep.first.{suffix}.{arbitrary_name} 

documentation here

我已經從HTML待在一邊,只使用PDF,Excel和CSV除非客戶需求HTML。如果您必須使用HTML,您可以定義一個樣式表來處理您的網站,並使用jQuery刪除所有內聯樣式,以便樣式表接管。像這樣:

$(document).ready(function() { 
    $('span').removeAttr('style'); 
}); 
+1

我今天碰到這個帖子,我使用html,我需要刪除這個跨越得到生成。正如你在答案中提到的,我理解使用jQuery。我的問題是在哪裏編寫這段代碼,以及如何將它集成到我的報告中?請指導我 – 2012-12-27 10:35:21