ASP.NET報表打印的實現(xiàn):分頁計算方式
報表離不開打印,打印離不開分頁。
常見的ASP.NET報表打印方法
比較常見的報表的分頁,一般是根據(jù)紙張尺寸自動分頁。即根據(jù)紙張的尺寸和頁邊距,計算出每一頁能擺下多少行多少列,從而計算出每一頁的報表,然后進行打印或者展現(xiàn)。
這種方式,對于行列的寬度、高度固定的情況,比較容易實現(xiàn),很簡單的計算罷了。可是不要忘了,單元格里的數(shù)據(jù)是從數(shù)據(jù)庫里動態(tài)取出來的,因此如果單元格里的數(shù)據(jù)超出了單元格的寬度,就意味著需要撐寬單元格或者自動折行,而自動折行則意味著撐高單元格。
因此最常見最普通的分頁方式計算起來并不容易,你需要先把數(shù)據(jù)取出來,根據(jù)每一行的數(shù)據(jù)長度先判斷是否存在自動折行或者撐寬單元格的現(xiàn)象,然后才能計算出每一頁的行數(shù)和列數(shù)。如果存在自動折行,那么每一頁的行數(shù)并不會相同,因為只是某些行自動折行。
另一種也比較常見的分頁方式是固定行數(shù)分頁,即規(guī)定每一頁必須且只能顯示固定的行數(shù),多余的顯示到下一頁。
這種分頁方式似乎更加簡單,沒有那么復(fù)雜的運算??墒莿e高興得太早,用戶的需求永遠是合理且復(fù)雜的。對于固定行數(shù)的報表,用戶的目的往往是為了格式的規(guī)整統(tǒng)一,甚至有時候是為了套打。因此如果格子里的數(shù)據(jù)超出了單元格的寬度怎么辦?不能撐寬,那么自動折行可以嗎?在不撐高單元格的前提下是可以的,那么如果撐高了怎么辦?對不起,不允許就是不允許,自己想辦法縮小字體吧。
縮小字體也不是那么容易的,因為如果僅僅根據(jù)單元格的寬度來縮小字體,往往會導(dǎo)致文字過分縮小而缺少可讀性。因此需要根據(jù)單元格的高度和寬度進行綜合計算,既要折行又要縮小,從而算出一個***的縮小系數(shù),保證可讀性。
解決了縮小的問題,事情還沒結(jié)束。由于數(shù)據(jù)是從數(shù)據(jù)庫里動態(tài)取出來的,那么記錄的行數(shù)是不固定的,假設(shè)要求一頁顯示10行,而你取出來的記錄正好是15行,那么意味著第二頁只有5行,此時意味著第二頁的格式不標準了,怎么辦?于是用戶很自然地提出補足空行。
暈了吧,補多少空行呢?不一定,只能根據(jù)取出來的記錄數(shù)結(jié)合每頁顯示的行數(shù)進行動態(tài)計算。
當然還有更復(fù)雜的分頁方式,比如自動適應(yīng)紙張大小。這種情況更多見于動態(tài)橫向擴展的報表。由于報表的列數(shù)不固定,可是用戶希望不管多少列,都在一張紙里打印,不要橫向分頁,此時需要根據(jù)最終的列數(shù)動態(tài)調(diào)整列寬;當然縱向的情況也同樣存在。
因此總的來說,很小的一個分頁問題,卻會引發(fā)一系列的麻煩,如果都要自己編程解決,實在太麻煩了,而且很難做的通用。博計報表在打印分頁方面考慮很周到,提供了一系列的簡單配置,使用方便。
ASP.NET報表打印實現(xiàn)步驟
1、設(shè)計報表;
2、設(shè)置分頁方式及相關(guān)屬性,比如說固定行數(shù)的分頁方式,需要配置每頁顯示的行數(shù)等;自動適應(yīng)紙張尺寸的方式,需要配置橫向適應(yīng)還是縱向適應(yīng)。
效果演示
以上就介紹了ASP.NET報表打印的實現(xiàn)方法。
【編輯推薦】