Free Support Forum - aspose.com

Aspose.Words for NET 转换为PDF文字被替换的问题

我的系统中是有Word中显示的字体的,但是转换为PDF以后,字体变了,请问如何处理,是BUG还是我用的方法不对,请技术支持,
out.zip (2.0 MB)
我用的转换代码如下

            Console.WriteLine("Start....");

        string outFile = Path.GetDirectoryName(txtpicDir.Text) + "\\" + Path.GetFileNameWithoutExtension(txtpicDir.Text) + ".pdf";
        Aspose.Words.Document document = new Aspose.Words.Document(txtpicDir.Text);
        Aspose.Words.Saving.PdfSaveOptions options = new Aspose.Words.Saving.PdfSaveOptions
        {
            JpegQuality = 100,
            Compliance = Aspose.Words.Saving.PdfCompliance.Pdf15,
            CreateNoteHyperlinks = true,
            ExportDocumentStructure = true,
            FontEmbeddingMode = Aspose.Words.Saving.PdfFontEmbeddingMode.EmbedNone,
            ImageCompression = Aspose.Words.Saving.PdfImageCompression.Jpeg,
            TextCompression = Aspose.Words.Saving.PdfTextCompression.None,
            SaveFormat = Aspose.Words.SaveFormat.Pdf
        };
        document.Save(outFile, options);
        Console.WriteLine("SUCCESS");

@icejd,

我们已经安装了您的字体“方正楷体简体”,然后使用MS Word 2019和Aspose.Words 19.11将您的“ out_1.docx”转换为PDF格式,并将其附加在此处供您参考:

两个PDF文件看起来都不同。 您能告诉我哪个PDF输出可接受吗? 您是否对“ msw-2019.pdf”中显示的输出感到满意? 谢谢你的合作。

1 Like

第二个可以接受
我这里也查到问题了,原因是Windows\Fonts下的文件,有些只是虚拟的路径,真正的字体文件是在C:\Users\用户名AppData\Local\Microsoft\Windows\Fonts\ 这个目录下,从而导致的这个问题,我现在已经解决了,感谢您的帮助,代码如下:
//取用户字体目录
string userfontsfoloder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)+ “\Microsoft\Windows\Fonts\”;
Console.WriteLine(“userfontsfoloder:” + userfontsfoloder);
string outFilePdf = Path.GetDirectoryName(txtpicDir.Text) + “\” + Path.GetFileNameWithoutExtension(txtpicDir.Text) + “.pdf”;
Aspose.Words.Document document = new Aspose.Words.Document(txtpicDir.Text);
ArrayList fontSources = new ArrayList(FontSettings.DefaultInstance.GetFontsSources());
//将用户目录字体添加到字体源中
Aspose.Words.Fonts.FolderFontSource folderFontSource = new Aspose.Words.Fonts.FolderFontSource(userfontsfoloder, true);
fontSources.Add(folderFontSource);
Aspose.Words.Fonts.FontSourceBase[] updatedFontSources = (Aspose.Words.Fonts.FontSourceBase[])fontSources.ToArray(typeof(Aspose.Words.Fonts.FontSourceBase));
FontSettings.DefaultInstance.SetFontsSources(updatedFontSources);

@icejd,

我们测试了这种情况,并最终设法重现了同样的问题。 为了更正,我们已将此问题记录在问题跟踪系统中。 此问题的ID为WORDSNET-19555。 我们将进一步调查该问题的详细信息,并让您及时了解更正的状态。 对于给您带来的不便,我们深表歉意。

另请参阅文档的以下部分:
如何指定True Type字体位置

@icejd,

关于WORDSNET-19555,也请使用MS Word将文档转换为PDF格式,并在此处提供MS Word生成的PDF文件,以进行进一步测试。 还请从MS Word的GUI截取屏幕截图,并在此处提供以供我们参考? 这是因为英文MS Word版本不能通过本地化的中文名称解决有问题的字体,但中文MS Word版本可能应该这样做。 此外,Aspose.Words似乎可以通过中文名称正确解决有问题的字体。 谢谢您的合作。

image.png (135.4 KB)
out_1.pdf (32.7 KB)
word另存是正常的

@icejd,

感谢您的附加信息。 我们会及时通知您任何进一步的更新,并让您知道将来何时可以解决此问题。

@icejd,

据我们了解,您的问题是有问题的字体位于以下文件夹中:

%userprofile%\AppData\Local\Microsoft\Windows\Fonts

默认情况下,Aspose.Words不会对其进行处理。 您似乎已经通过直接在字体源中指定以下文件夹解决了此问题。

关于这一点,我们将在下一版本的Aspose.Words中提供一项功能来扫描以下文件夹:

%userprofile%\AppData\Local\Microsoft\Windows\Fonts

通过使用SystemFontSource。

其次,Aspose.Words和MS Word输出到我的机器上的差异是由于英语MS Word无法按中文名称解析字体。 但是,您似乎也正在确认Aspose.Words输出在您端也是正确的。

您能否确认我们的理解是否正确? 并感谢您的合作。

恩恩,是这样的,你们的理解是正确的

@icejd,

当然,我们还将在下一个19.2版本的Aspose.Words中引入SystemFontSource对%userprofile%\AppData\Local\Microsoft\Windows\Fonts文件夹的扫描。