跳到内容
  • 福昕首页
  • 开发中心
  • SDK文档资料
  • 插件商店
  • 福昕首页
  • 开发中心
  • SDK文档资料
  • 插件商店
申请试用
  • 企业自动化
    • Compressor
  • 福昕CloudAPI
  • 福昕PDF SDK 软件开发工具包
    • 福昕PDF SDK(ActiveX)
    • 福昕PDF SDK(桌面/服务器)
    • 福昕PDF SDK(Plug-in)
    • 福昕 PDF SDK(安卓)
    • 福昕PDF SDK(iOS)
    • 福昕PDF SDK(Web)
  • 福昕管理控制台
    • 公有云
    • 私有云
    • 通用情况
  • 福昕阅读器
    • RMS插件
  • 福昕高级编辑器
    • AI助手
    • Mac版本
      • 常规问题
    • Windows版本
      • ECM集成
      • 互联PDF
      • 企业管理指南
      • 保护
      • 内容编辑
      • 创建PDF
      • 压缩
      • 图章
      • 安装与卸载
      • 常见问题
      • 打印
      • 注释/评论
      • 福昕插件
      • 翻译助手
      • 翻译助手教程
      • 试用与激活
      • 转换
      • 页面管理
    • 教育用户
      • 论文查重
      • 论文畅
      • 操作指南
    • 网页版
      • Foxit eSign
      • 电子签章
    • 订阅
    • 资源
  • 福昕高级编辑器Linux版本
  • 福船图纸管理系统
  • 福昕PDF SDK 软件开发工具包 > 福昕PDF SDK(Web)
  • 标签:

如何映射渲染字体?

  • 福昕知识库
  • 2023-06-01

您是否曾尝试显示 PDF 但因内容乱码或文本外观呈现不正确而失败? 原因可能是 PDF 不包含用于呈现的正确字体。 您要么进行字体嵌入,要么进行字体映射以确保呈现的正确性。本教程介绍如何通过 API 和 UI 映射字体。

使用字体数据

Foxit PDF SDK for Web 提供两种后备字体数据。 一个包含在“FoxitPDFSDKforWeb \external\brotli”的包中。 另一个位于 https://webpdf.foxitsoftware.com/webfonts/。

要引用字体,请使用适当的路径声明 fontPath,如下所示:

Picture4.png

Picture5.png

获取字体信息

在开始映射字体之前,您需要了解当前文档中包含的字体信息。 您可以通过 PDFDoc::getFontsInfo 获取。

简易代码如下:

var pdfViewer = await pdfui.getPDFViewer();

var pdfDoc = await pdfViewer.getCurrentPDFDoc();

await pdfDoc.getFontsInfo()

 

在控制台执行代码,你会得到如下信息:

Picture6.png

添加字体映射

seJRFontMap 是一种帮助映射字体并为当前文档找到最佳匹配字体的方法。

 

注意:

*      如果您已经打开过文档,匹配后,打开前必须清空缓存

*      Freetext 和 Form 仅在 8.2 及更高版本中支持

1)      假设pdf中使用的字体是Rage,就需要配置Rage字体。 配置后,文档可以显示更好的效果。 代码如下:

pdfui.getPDFViewer().then(function (pdfViewer){

    pdfViewer.setJRFontMap([{

        nameMatches: [/Rage/, /Rage Italic/, /RageItalic/],

        glyphs: [

            {

                bold: -1,

                flags: -1,

                url: path + '/RAGE.TTF'

            }]

        }

        //more fonts

        // ,{      

        //     nameMatches:nameMatches

        //     glyphs:glyphs

        // }

    ]);

});

设置前后效果对比如下:

Picture7.png

2)      假设 PDF 文档需要字体 CALIBRI 和 ARIAL,但默认字体不需要。 随之,就会出现乱码。 映射这两种字体后,就可以正常显示。 代码如下:

var pdfViewer = await pdfui.getPDFViewer();

await pdfViewer.setJRFontMap([{

    nameMatches: [/CALIBRI/i],

    glyphs: [

        {

            bold: -1, //0b00001000

            flags: -1,

            url: 'http://10.103.4.217:9898/Fonts/CALIBRI.TTF'

        }]

},{

    nameMatches: [/Arial/i],

    glyphs: [

        

        {

            bold: -1, //0b00001000

            flags: -1,

            url: 'http://10.103.4.217:9898/Fonts/ARIAL.TTF'

        }]

}]);

var resp = await fetch('http://10.103.4.217:9898/customer/exported.pdf');

var file = await resp.blob();

var pdfdoc = await pdfViewer.openPDFByFile(file);

 

设置前后效果对比如下:

Picture8.png

将映射字体添加到UI的字体列表中

通过 PDFViewer::addFontMaps 接口,可以将映射的字体作为选项添加到 UI。

 

注意:

*      使用的字体必须已经在映射列表中。 若无,就需要通过setJRFontMap添加。 否则,如果您将会收到错误的提示。

*      SetJRFontMap 可以在上篇 “添加字体映射”中找到

 

映射 Rage 字体后,将其添加到 UI。 代码如下:

const fontMapsInfo = [

    {

        "name": "Rage", //The font face name.

        "style": 0, //The font styles.

        "charset": 0 //The charset of the font.

    },

    //more fonts

    //{

    //    "name": "Tahoma", //The font face name.

    //    "style": 0, //The font styles.

    //    "charset": 222 //The charset of the font.

    //},

]

viewer.addFontMaps(fontMapsInfo)

 

设置完成后在UI上查看效果。

1)      查看表单域中的字体列表

Picture9.png

2) 检查文本编辑器中的字体列表

Picture10.png

如何设置FreeText显示字体为映射字体

通过 FreeText::setDefaultAppearance 接口设置。 使用的字体必须已经在映射列表中,不需要的通过setJRFontMap添加。如有需要,请翻阅上篇“添加字体映射”。

代码如下:

//traverse documents

for(var i=0;i<pageCount;i++){

    var page = await pdfDoc.getPageByIndex(i);

    //Get the freetexts on the specified page

    var annots = await page.getAnnotTree();

     

    annots.forEach(async annot => {

        var type = await annot.getType();

        switch (type) {

            case "freetext":

                var jsonAppearance = {

                    textColor:0Xff000000,

                    textSize:20,

                    font: {

                        "name": "Rage",

                        "styles": 0,

                        "charset": 0

                    }

                }

                await annot.setDefaultAppearance(jsonAppearance);

                break;

            default:

                break;

        }

 

    });

}

设置前后效果对比如下:

Picture11.png

如何编辑模块的字体列表和UI默认选择的字体

查看相关样式后,通过组件方法修改。

*      如何设置默认选择的字体

代码如下:

let fontComponent = await pdfui.getComponentByName('fv–addon-textobject-font-family-size-dropdown');

let fontFamilie = fontComponent.controller.fontFamilies.find((font)=>{return font && font.name=='Rage'});

if(fontFamilie){

    fontComponent.controller.selectFontFamily(fontFamilie)

}

–          UI 上默认选择的字体是 Helvetica:

Picture12.png

–        调用代码设置后,默认选择的字体是Rage:

Picture13.png

如何设置字体列表的顺序

Picture14.png

UI 上的默认字体列表顺序,Rage 字体在最后:

Picture15.png

调用代码设置后,将 Rage 字体设置为第一种字体:

Picture16.png

相关内容

RDK Android 如何设置单页上下滑动翻页?

PDF转Word时,如何仅处理指定页面?

PDF和OFD如何批量互转?

Bitmap 类如何与其他的图像类互转?

打印管理PrintManager怎么判断文档打印是否完成?

软件如何打开嵌入在office文档中Adobe PDF图标

福昕高级PDF编辑器专业版如何在文档中嵌入一个3D模型

福昕高级PDF编辑器专业版如何实现对图片和文档内容添加马赛克

福昕高级PDF编辑器如何显示注释内容图标

福昕高级PDF编辑器如何添加和调整快速访问工具栏功能

推荐内容

RDK Android 如何设置单页上下滑动翻页?

PDF转Word时,如何仅处理指定页面?

PDF和OFD如何批量互转?

Bitmap 类如何与其他的图像类互转?

打印管理PrintManager怎么判断文档打印是否完成?

软件如何打开嵌入在office文档中Adobe PDF图标

福昕高级PDF编辑器专业版如何在文档中嵌入一个3D模型

福昕高级PDF编辑器专业版如何实现对图片和文档内容添加马赛克

福昕高级PDF编辑器如何显示注释内容图标

福昕高级PDF编辑器如何添加和调整快速访问工具栏功能

产品
  • 应用行业
  • 白皮书
开发支持
  • 开发中心
  • SDK文档资料

销售咨询:010-50951668

客服电话:0591-38509808

销售咨询
微信公众号

©2026 福建福昕软件开发股份有限公司 版权所有

隐私策略