欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PDF管理控件Aspose.PDF for .Net使用教程:在PDF文件中嵌入字体

程序员文章站 2022-06-07 12:20:21
Aspose.PDF for .NET是一种高PDF处理和解析API,用于在跨平台应用程序中执行文档管理和操作任务。API可以轻松用于生成、修改、转换、渲染、保护和打印PDF文档,而无需使用Adobe Acrobat。此外,API还提供PDF压缩选项,表格创建和操作,图形和图像功能,广泛的超链接功能 ......

aspose.pdf for .net是一种高pdf处理和解析api,用于在跨平台应用程序中执行文档管理和操作任务。api可以轻松用于生成、修改、转换、渲染、保护和打印pdf文档,而无需使用adobe acrobat。此外,api还提供pdf压缩选项,表格创建和操作,图形和图像功能,广泛的超链接功能,印章和水印任务,扩展的安全控制和自定义字体处理。

在现有的pdf文件中嵌入字体

pdf阅读器支持14种字体的核心,因此无论以何种平台显示文档,都可以以相同方式显示文档。当pdf包含不是14种核心字体之一的字体时,请将其嵌入pdf文件中以避免字体替换。

aspose.pdf for .net支持在现有pdf文件中嵌入字体,可以嵌入完整的字体或字体的子集。要嵌入字体,请使用document该类打开pdf文件。然后使用aspose.pdf.text.font该类将字体嵌入到pdf文件中。要嵌入完整字体,请使用fontclass的isembeded属性。要使用字体的子集,请使用issubset属性。以下代码段显示了如何在pdf文件中嵌入字体。

// 文档目录的路径。
string datadir = runexamples.getdatadir_asposepdf_workingdocuments();

//加载现有的pdf文件
document doc = new document(datadir + "input.pdf");

//遍历所有页面
foreach (page page in doc.pages)
{
    if (page.resources.fonts != null)
    {
        foreach (aspose.pdf.text.font pagefont in page.resources.fonts)
        {
            //检查字体是否已经嵌入
            if (!pagefont.isembedded)
                pagefont.isembedded = true;
        }
    }

    // 检查form对象
    foreach (xform form in page.resources.forms)
    {
        if (form.resources.fonts != null)
        {
            foreach (aspose.pdf.text.font formfont in form.resources.fonts)
            {
                //检查字体是否嵌入
                if (!formfont.isembedded)
                    formfont.isembedded = true;
            }
        }
    }
}
datadir = datadir + "embedfont_out.pdf";
//保存pdf文档
doc.save(datadir);

 

嵌入标准类型1字体

一些pdf文档的字体来自特殊的adobe字体集。该集合中的字体称为“标准类型1字体”。这套字体包括14种字体,嵌入此类字体需要使用特殊标志,即  aspose.pdf.document.embedstandardfonts。以下是可用于获取嵌入了所有字体(包括标准类型1字体)的文档的代码段:

//文档目录的路径。
string datadir = runexamples.getdatadir_asposepdf_text();
//加载现有的pdf文档
document pdfdocument = new document(datadir + "input.pdf");
// 设置文档的embedstandardfonts属性
pdfdocument.embedstandardfonts = true;
foreach (aspose.pdf.page page in pdfdocument.pages)
{
    if (page.resources.fonts != null)
    {
        foreach (aspose.pdf.text.font pagefont in page.resources.fonts)
        {
            //检查字体是否已经嵌入
            if (!pagefont.isembedded)
            {
                pagefont.isembedded = true;
            }
        }
    }
}
pdfdocument.save(datadir + "embeddedfonts-updated_out.pdf");

 

创建pdf文件时嵌入字体

如果需要使用adobe reader支持的14种核心字体以外的其他字体,则必须在生成pdf文件时嵌入字体说明。如果未嵌入字体信息,则adobe reader将在操作系统上安装它,如果安装在系统上,则会从操作系统中获取它,否则它将根据pdf中的字体描述符构造替代字体。

使用font类的isembedded属性将字体信息嵌入到pdf文件中。将此属性的值设置为'true'会将完整的字体文件嵌入到pdf中,因为它会增加pdf文件的大小。以下是可用于将字体信息嵌入到pdf中的代码段。

//文档目录的路径。
string datadir = runexamples.getdatadir_asposepdf_workingdocuments();

//通过调用其空构造函数实例化pdf对象
aspose.pdf.document doc = new aspose.pdf.document();

// 在pdf对象中创建一个部分
aspose.pdf.page page = doc.pages.add();

aspose.pdf.text.textfragment fragment = new aspose.pdf.text.textfragment("");

aspose.pdf.text.textsegment segment = new aspose.pdf.text.textsegment(" this is a sample text using custom font.");
aspose.pdf.text.textstate ts = new aspose.pdf.text.textstate();
ts.font = fontrepository.findfont("arial");
ts.font.isembedded = true;
segment.textstate = ts;
fragment.segments.add(segment);
page.paragraphs.add(fragment);

datadir = datadir + "embedfontwhiledoccreation_out.pdf";
//保存pdf文档
doc.save(datadir);

如果您有任何疑问或需求,请随时加入aspose技术交流群(642018183)