您好,
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;
}
}
以上
@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.