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文件夹的扫描。

The issues you have found earlier (filed as WORDSNET-19555) have been fixed in this Aspose.Words for .NET 19.12 update and this Aspose.Words for Java 19.12 update.

@aspose.notifier
下面的压缩包中
word里显示正常,用word2019另存为PDF也正常,
用 Aspose.Words for .NET 20.6.0.0
转换以后字体发生变化
原文件及两种不同的转换方式 ,都在下面的压缩包里
word.zip (1.4 MB)
所用代码如下
string file = openFileDialog1.FileName;
Console.WriteLine(“start”);
Aspose.Words.LoadOptions lo = new Aspose.Words.LoadOptions();
lo.MswVersion = Aspose.Words.Settings.MsWordVersion.Word2019;
lo.LanguagePreferences.DefaultEditingLanguage = EditingLanguage.ChineseMacao;
Document document = new Document(file, lo);
Console.WriteLine($“页数:{document.PageCount}”);
document.Save($"{file}.pdf", new PdfSaveOptions());
Console.WriteLine(“success”);

@icejd,

您的Word文档使用特殊字体。 请ZIP并附加以下确切的字体文件,以进行进一步测试:

  • 思源宋体 CN Heavy

您的计算机上是否安装了上述字体文件?

计算机上没有这个字体,但是msword另存是可以正常显示的,只是用asp.word,字体发生了变化 ,我发的压缩包中有两种不同PDF,

@icejd,

请注意,我尚未安装以下字体:

  • 思源宋体 CN Heavy

当我使用MS Word 2019将此’source.docx’文档转换为PDF时,默认情况下它将上述字体替换为以下字体:

  • Microsoft YaHei

但是,在我的机器上,Aspose.Words代码将丢失的字体替换为以下字体:

但是当我显式添加字体替换时,MS Word和Aspose.Words的输出将变为相同(请参阅输出 20.6-ChineseMacao-AddSubstitutes .pdf (21.4 KB))

因此,请尝试使用以下代码:

Aspose.Words.LoadOptions lo = new Aspose.Words.LoadOptions();
lo.MswVersion = Aspose.Words.Settings.MsWordVersion.Word2019;
lo.LanguagePreferences.DefaultEditingLanguage = EditingLanguage.ChineseMacao;
            
Document doc = new Document("E:\\Temp\\205154\\source.docx", lo);

FontSettings fs = new FontSettings();
fs.SubstitutionSettings.TableSubstitution.AddSubstitutes("思源宋体 CN Heavy", new string[] { "Microsoft YaHei" });
doc.FontSettings = fs;

doc.Save("E:\\Temp\\205154\\20.6-ChineseMacao-AddSubstitutes.pdf");

或安装缺少的字体。 希望,这将有助于实现您的期望。

我试一下,感谢你的帮助,有问题我再来打扰