iText7 - C# - 如何計算頁數
我們在用iText輸出列表若有頁數計算需求時(如1/3、2/3、3/3這種)
目前是算1頁中會輸出多少筆後,除以總筆數得到會輸出多少頁
但如果有格子資料太多導致列高撐大,1頁中容納不下當初設定的筆數就會跑版
例如原先預估可容納14筆,結果輸出的內容文字過多導致1頁塞10筆就滿了
這時候就會導致排版亂掉,表頭也會出現在不該出現的地方
iText7的官網有提供範例程式碼(java版本,method大小寫改一下就能對應C#)
可在整個文件完成後再插入頁碼
但如果直接應用的話,會出現「Cannot draw elements on already flushed pages」的Exception
這是因為,Document本身有一個參數immediateFlush預設為true
這參數為true時,代表當執行了Document.Add(),就會順便執行Flush指令
也因為immediateFlush=true,導致無法在Document.Add()後再插入頁碼
因此需要在new Document時,先將immediateFlush改為false(建構子)
並在完成頁碼插入後,手動下Flush()
或許會有疑問為何不將Document.Add()放在後面再執行
這是因為只有在Add()了table之後,才能依靠PdfDocument.GetNumberOfPages()取得真實總頁數
參考文件
留言
張貼留言