大清單報表的列印?

2021-08-31 01:20:45 字數 867 閱讀 7938

我們談了大清單報表的呈現方法,其實有時候這些報表還需要列印,比如銀行列印流水對賬單。

那麼,列印是不是也要像呈現那樣做乙個快取機制呢?

沒有這個必要。列印和瀏覽不同,一般是從頭到尾過一遍就行了,過程中沒有翻頁的需求。這樣,只要流式讀入資料逐步生成列印頁就可以了,不會發生記憶體溢位的問題。

我們來算算列印 100 萬行記錄是什麼情況。

假設一頁紙能列印 50 行記錄(這已經算多了),100 萬行記錄就意味著 2 萬頁紙。2 萬頁的連續列印,有多少印表機能做到這個指標?你的使用者真有這樣的裝置嗎?2 萬頁紙大概有 2 公尺厚,什麼印表機能把這些紙放進去?商用快速印表機一分鐘也就 30 幾頁,就按 50 頁 / 分鐘算,2 萬頁也需要 7 個鐘頭!作為乙個機械裝置能連續工作這麼久是不容易的。

而 100 萬行記錄需要占多大記憶體呢?一條記錄算 1k 已經很大(畢竟一頁要列印 50 行的),100 萬行也就 1g 記憶體。這對於前端用於列印的普通 pc 來講並不難滿足。

這還是只算了 100 萬記錄的情況,如果把 100 萬增加到 500 萬,記憶體仍然可以承受,而印表機是萬萬吃不消了。也就是說,在現代計算機的記憶體容量下,列印這個功能採用全記憶體方式是沒有問題的,幾乎找不到需要流式讀取的情況。作為乙個要重複銷售的商業軟體,報表工具沒必要去支撐這種極為罕見甚至根本不存在的應用場景。

這個計算結果,看起來有點荒唐,讀者可能會覺得可笑。但這確實是和使用者溝通需求時真實發生過的事情,實際上喊的記錄行數比 500 萬要大很多,而使用者並沒有認真計算過它意味著什麼。經過一些常規計算我們就會發現,雖然有些使用者在叫,大清單報表的列印其實是個偽需求。

大資料領域還有些類似的事,比如說 10t 資料想要 3 秒返回結果,使用者卻不會想到這很可能意味著 1 萬塊硬碟。

嚴謹認真一點,會推出許多想不到的有趣結論 :)。

列印報表的腳注

procedure treportform.printfooterreport2 sender tobject begin with sender as tbasereport do begin setfont times new roman 8 呼叫tbasereport元件的setfont方法設...

秒級展現的百萬級大清單報表怎麼做

資料查詢業務中,有時會碰到資料量很大的清單報表。由於使用者輸入的查詢條件可能很寬泛,因此會從資料庫中查出幾百上千萬甚至過億行的記錄,常見的包括銀行流水記錄,物流明細等。呈現時如果等著把這些記錄全部檢索出來再生成報表,那會需要很長時間,使用者體驗自然會非常惡劣。而且,報表一般採用記憶體運算機制,大多數...

水晶報表的列印

using system using system.data using system.configuration using system.collections using system.web using system.web.security using system.web.ui usin...