問題
最近同事詢問使用 Aspose.Words 是否有 Support ,分隔符號 -> 自下個奇數頁起。
Aspose.Words 可以使用 BreakType.SectionBreakOddPage 。
所以測試程式如下,
1 | var doc = new Aspose.Words.Document(); |
這樣子的話,如果第一節結束後,Word會替我們補上第2頁的隱藏頁,而這個隱藏頁在 Word 中是看不到的。
只有在列印時,才會顯示出來。如下,
在 Word 中看到的頁數為 1, 3, 5, 6 ,第4個頁碼為6是因為 Section3 之後是使用 BreakType.PageBreak 。
而在列印時, Word 替我們加的第2頁、第4頁,就會顯示出來了,如下,
可以發現,雖然在 Word 中看到的總共有4頁,最後一頁的頁碼為 6 。
列印出來是真的為 6 頁,只是第2頁、第4頁是完全空白的頁面,連頁碼都沒有。
那是否能為那個空白頁加上頁碼(或是讓那個空白頁可以呈現跟其他頁面一樣的 Header 及 Footer)呢?
研究
雖說是Word預設的行為,但是如果沒有頁碼的話,個人是覺得有點奇怪。
想了一下,應該可以將 SectionBreak 換成 PageBreak 這樣子就會顯示出真正的頁面。
所以在建立好資料後,再來個後製處理,將 SectionBreak 換成 PageBreak,如下,
1 | FontSettings.DefaultInstance.SubstitutionSettings.DefaultFontSubstitution.DefaultFontName = "新細明體"; |
經過後製處理後,原本的空白頁就產生出來,並且也有頁碼了,如下,
- 註: 你可能會想說,為什麼不一開始就自已控制去補空白頁呢? 這是因為內容是從資料庫來的,程式不好判斷目前是到第幾頁了,何時要補這個空白頁,所以使用 SectionBreakOddPage or EvenPage 比較方便。
- 註: 可以從 doc.Count 跟 doc.PageCount 比較,如果 PageCount 比較大則表示 Word 有替我們補隱藏頁
- 註: 要 Aspose.Words 算出來的頁數正確,文件內容的字型必須為 TrueType
- 註: 目前在 MAC 環境執行會有頁數不正確的狀況,測試請在 Windows 環境執行
參考資料
How Insert page break?
Aspose.Words Document.Sections Property
Aspose.Words Working with Headers and Footers