EmbedFullFonts
内容
[
隐藏
]PdfSaveOptions.EmbedFullFonts property
控制如何将字体嵌入到生成的 PDF 文档中。
public bool EmbedFullFonts { get; set; }
评论
默认值为错误的
,这意味着在嵌入之前对字体进行子集化。 如果您想让输出文件大小保持较小,子集化很有用。子集化会从字体中删除 all 未使用的字形。
当该值设置为真的
,将完整的字体文件嵌入到 PDF 中,无需 子集化。这将导致输出文件更大,但当您想要稍后编辑生成的 PDF(例如添加更多文本)时,这可能是一个有用的选项。
有些字体很大(几兆字节),在不使用 subsetting 的情况下嵌入它们将导致输出文档很大。
例子
演示如何在将文档渲染为 PDF 时嵌入字体时启用或禁用子集化。
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Font.Name = "Arial";
builder.Writeln("Hello world!");
builder.Font.Name = "Arvo";
builder.Writeln("The quick brown fox jumps over the lazy dog.");
// 配置我们的字体源以确保我们可以访问本文档中的两种字体。
FontSourceBase[] originalFontsSources = FontSettings.DefaultInstance.GetFontsSources();
Aspose.Words.Fonts.FolderFontSource folderFontSource = new Aspose.Words.Fonts.FolderFontSource(FontsDir, true);
FontSettings.DefaultInstance.SetFontsSources(new[] { originalFontsSources[0], folderFontSource });
FontSourceBase[] fontSources = FontSettings.DefaultInstance.GetFontsSources();
Assert.True(fontSources[0].GetAvailableFonts().Any(f => f.FullFontName == "Arial"));
Assert.True(fontSources[1].GetAvailableFonts().Any(f => f.FullFontName == "Arvo"));
// 创建一个“PdfSaveOptions”对象,我们可以将其传递给文档的“Save”方法
// 修改该方法将文档转换为 .PDF 的方式。
PdfSaveOptions options = new PdfSaveOptions();
// 由于我们的文档包含自定义字体,因此可能需要嵌入到输出文档中。
// 将“EmbedFullFonts”属性设置为“true”以在输出 PDF 中嵌入每个嵌入字体的每个字形。
// 文档的大小可能会变得很大,但是如果我们编辑PDF,我们将充分利用所有字体。
// 将“EmbedFullFonts”属性设置为“false”以对字体应用子集化,仅保存字形
// 该文档正在使用。文件将会小得多,
// 但如果我们编辑文档,我们可能需要访问任何自定义字体。
options.EmbedFullFonts = embedFullFonts;
doc.Save(ArtifactsDir + "PdfSaveOptions.EmbedFullFonts.pdf", options);
if (embedFullFonts)
Assert.That(500000, Is.LessThan(new FileInfo(ArtifactsDir + "PdfSaveOptions.EmbedFullFonts.pdf").Length));
else
Assert.That(25000, Is.AtLeast(new FileInfo(ArtifactsDir + "PdfSaveOptions.EmbedFullFonts.pdf").Length));
// 恢复原始字体源。
FontSettings.DefaultInstance.SetFontsSources(originalFontsSources);
也可以看看
- class PdfSaveOptions
- 命名空间 Aspose.Words.Saving
- 部件 Aspose.Words