公司導入電子發票,被要求要能列印 A4、A5 格式,根據 電子發票實施作業要點 P12 A5 範例,截圖如下來設計
個人設計是把這兩頁當成兩張報表來設計,第一頁稱呼為主頁,第二頁為明細頁,因為明細頁設計方式會涵蓋主頁,該紀錄會以明細頁為主,歸納明細頁報表重點,分別為
- 分頁顯示標題列
- 強迫固定每頁資料筆數
- 資料表最後橫線
- 頁數顯示
主頁則是應用到 [強迫固定每頁資料筆數] 和 [頁數顯示] 這兩點而已
Layout 設計
分頁顯示標題列
明細頁超過一頁時,後續頁面也必須能夠正常顯示標題列,參考 [SSRS] 分頁資料表標題列
強迫固定每頁資料筆數
- 確定 tablix 一筆資料要一行或 N 行來顯示,並取消 tablix 內文字方塊的 [允許高度增加 (預設為啟用)],資料太長會被截斷不折行
- 決定每頁要顯示固定資料筆數,資料筆數不足情況下,必須補齊資料筆數,藉此來固定 tablix,參考 [SSRS] 強迫分頁、[SSRS] 分頁固定筆數
- 補齊固定資料筆數的空白資料,數值型態預設值為 0,必須透過條件設定來隱藏,所謂的隱藏就是變更字型顏色,0 的話就跟背景同色,背景顏色理論上是白色才是
依據條件來變化字型顏色,在報表內有兩種做法
- 資料來源有一個 flag 欄位,根據該欄位來判斷
- 判斷數值是否為 0
下圖是以數值為 0 來判斷來變更字型顏色
資料表最後橫線
tablix 框線設定分別為
- 標題列:預設有外框線(上下左右)
- 資料列:設定只有左框線和右框線就行
- 最後橫線:頁尾頂端放一條同 tablix 等寬線條來呈現,再透過調整頁尾高度來讓頁尾線條逼近 tablix
tablix 資料列和資料列之間不顯示橫線,所以資料列無法使用下框線,因為強迫固定每頁資料筆數,所以資料列會一直延伸到接近頁尾才會進行換頁
下圖框線設定 (紅線:標題列、綠線:資料列、黃線:最後橫線)
最後橫線是苦力慢慢調整逼近 tablix,下圖是還沒有調整到位情況
因為拆成兩張報表,所以
- 無法直接在主頁取得全部頁數,必須先列印明細頁後取得明細總頁數,之後加 1 才會是總頁數
- 無法讓使用者預覽,必須直接輸出,參考 [RV] 列印本機報表而不進行預覽
直接輸出是使用 PrintDocumnet 進行輸出,沒有內建函數可以直接取得總頁數,必須依賴PrintDocument 進行 render 時,每產生一頁會呼叫 PrintPage 事件一次,透過該特性來取得總頁數
private int _pageCount { get; set; } = 0;
private static void PrintDoc_PrintPage(object sender, PrintPageEventArgs e)
{
_pageCount++;
}
先列印明細頁取得總頁數後,在把總頁數塞回主頁後,參考 [RV] 從 C# 傳遞參數至 ReportViewer 就可以完成
執行結果
可以觀察到明細頁跨頁情況,該結果是以每頁固定 20 筆 資料來呈現
明細頁第一頁 (總頁數第二頁)
明細頁第二頁 (總頁數第三頁)
沒有留言:
張貼留言