Word 檔中有 Kangxi 字,透過 Aspose.Words 另存成 PDF,該字無法呈現

您好,
Word 檔有 「⾦⾦」這個字,一個為「Microsoft JhengHei UI」字型,另一個為「標楷體」,當透過 Aspose.Words 來另存時,「Microsoft JhengHei UI」字型的 ⾦ ,在PDF中是一個空白,無法正常呈現。
unicode.png (80.7 KB)
範例檔案如附件 unicode.zip (131.8 KB)

unicode.docx 為原始 Word 檔
unicode_word.pdf 為透過 Word 另存成 PDF
unicode_aspose.pdf 為透過 Aspose.Words 另存成的 PDF

代碼如下,

var docxPath = @"c:\temp\unicode.docx";
var pdfPath = @"c:\temp\unicode_aspose.pdf";
var doc = new Aspose.Words.Document(docxPath);
doc.Save(pdfPath);

@rainmaker_ho 感谢您向我们报告问题。 为了更正,它已被记录为 WORDSNET-24591。 我们会及时通知您,并在问题解决后通知您。

@alexey.noskov
目前發現,當字型為"DFKai-SB" 時,另存到 PDF 中的字就無法正常呈現。
而將字型改成"Microsoft YaHei"另存到 PDF 中的字就可以正常呈現。
所以我們在將 Word 另存 PDF 前,先透過 Document.Accept Method ,
來將所有的字型先轉成 “Microsoft YaHei” 後,再將它另存成 PDF 檔案。
完整的程式碼如下,

var docxPath = @"c:\temp\h2docx.docx";
var pdfPath = @"c:\temp\h2pdf.pdf";
var doc = new Aspose.Words.Document(docxPath);
var fontChanger= new FontChanger("Microsoft YaHei");
doc.Accept(fontChanger);
doc.Save(pdfPath);
public class FontChanger : DocumentVisitor
{
    private readonly string _NewFont = "DFKai-SB";
    public FontChanger(string newFont)
    {
        _NewFont = newFont;
    }
    public override VisitorAction VisitFieldEnd(FieldEnd fieldEnd)
    {
        //Simply change font name
        ResetFont(fieldEnd.Font);
        return VisitorAction.Continue;
    }
    public override VisitorAction VisitFieldSeparator(FieldSeparator fieldSeparator)
    {
        ResetFont(fieldSeparator.Font);
        return VisitorAction.Continue;
    }
    public override VisitorAction VisitFieldStart(FieldStart fieldStart)
    {
        ResetFont(fieldStart.Font);
        return VisitorAction.Continue;
    }
    public override VisitorAction VisitFootnoteEnd(Footnote footnote)
    {
        ResetFont(footnote.Font);
        return VisitorAction.Continue;
    }
    public override VisitorAction VisitFormField(FormField formField)
    {
        ResetFont(formField.Font);
        return VisitorAction.Continue;
    }

    public override VisitorAction VisitParagraphEnd(Paragraph paragraph)
    {
        ResetFont(paragraph.ParagraphBreakFont);
        return VisitorAction.Continue;
    }
    public override VisitorAction VisitRun(Run run)
    {
        ResetFont(run.Font);
        return VisitorAction.Continue;
    }
    public override VisitorAction VisitSpecialChar(SpecialChar specialChar)
    {
        ResetFont(specialChar.Font);
        return VisitorAction.Continue;
    }

    private void ResetFont(Aspose.Words.Font font)
    {
        font.Name = _NewFont;
    }
}

以上 :slight_smile:

@rainmaker_ho 您之前报告的问题已在当前代码库中修复。 该修复将包含在下一个 22.12 版本的 Aspose.Words 中。 一旦问题得到解决,我们一定会通知您。

1 Like

The issues you have found earlier (filed as WORDSNET-24591) have been fixed in this Aspose.Words for .NET 22.12 update also available on NuGet.