前言
有些情況在透過 Aspose.Words 另存成 PDF 檔後,
有些字在 PDF 中會變成 空白框(square box) 或是變成 空白,
但那些字又不自造字,怎麼會這樣子呢?
例如,U+2FA6(⾦) 這個字,可是在 Word 中明明可以正常顯示。
解法
測試的 C# 程式如下(請先加入 Aspose.Words 套件),
1 | var docxPath = @"c:\temp\h2docx.docx"; |
產生的 Word 及 PDF 如上圖所示,
在 Word 檔中字型使用「Times New Roman」,
有同事說,如果是 「Microsoft YaHei」 字型,在 PDF 中顯示似乎是正常的。
那…
我們要如何將字型從 「Times New Roman」 改成 「Microsoft YaHei」 呢?
也就是將文字加到 Word Doc 時,就將字型設定成 「Microsoft YaHei」。
這時,我們可以透過 INodeChangingCallback.NodeInserted method ,在將文字寫到 Word 時,把字型強迫換成 「Microsoft YaHei」 。
所以建立一個 HandleNodeChangingFontChanger Class 來實作 INodeChangingCallback 介面,
1 | public class HandleNodeChangingFontChanger : INodeChangingCallback |
再來就是設定 doc 的 NodeChangingCallback 屬性為上面建立的 HandleNodeChangingFontChanger Class,並設定要更改的字型為 「Microsoft YaHei」
1 | var docxPath = @"c:\temp\h2docx.docx"; |
執行程式後可以發現 Word 中的字型已變成了 「Microsoft YaHei」 字型,
而在 PDF 中的 U+2FA6(⾦) 這個字,也可以正常顯示了。
參考資源
U+2FA6(⾦)
標楷體支援的 Unicode
INodeChangingCallback.NodeInserted method