【问题标题】:Add Custom font in jspdf在jspdf中添加自定义字体
【发布时间】:2015-08-12 09:43:41
【问题描述】:

我想在 jsPDF 中使用自定义字体,例如“Comic Sans MS”或“Calibri”字体。 我发现了类似的问题here,但我的不工作。 我已经添加了最新的 jspdf。我的代码如下:

        var doc = new jsPDF('p','mm','a4');

        doc.addFont('ComicSansMS', 'Comic Sans', 'normal','StandardEncoding');
        doc.setFont('Comic Sans');          
        doc.text(10, 10, "Lorem ipsum dolor sit amet!");
        doc.output('dataurl');

但 pdf 结果的字体仍然是默认字体(不是 Comic sans )。 并且没有错误。请帮忙...

【问题讨论】:

    标签: javascript fonts jspdf


    【解决方案1】:

    我找到了解决办法,

    不要使用 jspdf.js,而是使用 debug.jspdf.js

    然后在 debug.jspdf.js 中添加这段代码

       API.addFont = function(postScriptName, fontName, fontStyle) {
           addFont(postScriptName, fontName, fontStyle, 'StandardEncoding');
       };
    

    【讨论】:

      【解决方案2】:

      我找到了这个github link

      1: https://github.com/MrRio/jsPDF/blob/master/examples/js/basic.js#L390 和函数名 demoUsingTTFFont() 对我有用。并转换为 base64 编码器link

      【讨论】:

      • 经过几次试验和错误后,我正在使用 JsPDF 1.5.3 和 Vue.JS。
      【解决方案3】:

      由于这里的其他答案有点过时,这是我正在使用的解决方案...

      首先,正如其他人所提到的 - 您需要这两个库:

      1. jsPDF:https://github.com/MrRio/jsPDF
      2. jsPDF-CustomFonts-支持:https://github.com/sphilee/jsPDF-CustomFonts-support

      下一步 - 第二个库要求您在名为 default_vfs.js 的文件中为其提供至少一种自定义字体。我正在使用 两个 自定义字体 - Arimo-Regular.ttf 和 A​​rimo-Bold.ttf - 都来自 Google Fonts。所以,我的default_vfs.js 文件看起来像这样:

      (

      (function (jsPDFAPI) { 
          "use strict";
          jsPDFAPI.addFileToVFS('Arimo-Regular.ttf','[Base64-encoded string of your font]');
          jsPDFAPI.addFileToVFS('Arimo-Bold.ttf','[Base64-encoded string of your font]');
      })(jsPDF.API);
      

      显然,您的版本看起来会有所不同,具体取决于您使用的字体。

      有很多方法可以为您的字体获取 Base64 编码的字符串,但我使用的是:https://www.giftofspeed.com/base64-encoder/

      它允许您上传字体 .ttf 文件,它会为您提供 Base64 字符串,您可以将其粘贴到 default_vfs.js

      您可以在此处使用我的字体查看实际文件的外观:https://cdn.rawgit.com/stuehler/jsPDF-CustomFonts-support/master/dist/default_vfs.js

      因此,一旦您的字体存储在该文件中,您的 HTML 应该如下所示:

          <script src="js/jspdf.min.js"></script>
          <script src="js/jspdf.customfonts.min.js"></script>
          <script src="js/default_vfs.js"></script>
      

      最后,您的 JavaScript 代码如下所示:

      const doc = new jsPDF({
            unit: 'pt',
            orientation: 'p',
            lineHeight: 1.2
          });
      
      doc.addFont("Arimo-Regular.ttf", "Arimo", "normal");
      doc.addFont("Arimo-Bold.ttf", "Arimo", "bold");
      
      doc.setFont("Arimo");
      doc.setFontType("normal");
      doc.setFontSize(28);
      
      doc.text("Hello, World!", 100, 100);
      
      doc.setFontType("bold");
      
      doc.text("Hello, BOLD World!", 100, 150);
      
      doc.save("customFonts.pdf");
      

      这对大多数人来说可能是显而易见的,但是在那个addFont() 方法中,三个参数是:

      1. 您在addFileToVFS() 文件中的addFileToVFS() 函数中使用的字体名称
      2. 您在 JavaScript 的 setFont() 函数中使用的字体名称
      3. 您在 JavaScript 的 setFontType() 函数中使用的字体样式

      你可以在这里看到这个工作:https://codepen.io/stuehler/pen/pZMdKo

      希望这对你和我一样有效。

      【讨论】:

        【解决方案4】:

        类似的问题 看起来你错过了这个

         **************
            API.addFont = function(postScriptName, fontName, fontStyle) {
                  addFont(postScriptName, fontName, fontStyle, 'StandardEncoding');
                };
            ****************
                doc.addFont('ComicSansMS', 'Comic Sans', 'normal');
                doc.setFont('Comic Sans');
                doc.text(50,50,'Hello World');
        
            http://stackoverflow.com/a/26981550/5086633
        

        【讨论】:

        • 我已经引用了您在“这里”中提到的链接。我试过了,但还是不行。
        • 在来自 github 的最新 jspdf.js 中,它已经包含了这些代码。 (API.addFont ....)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 2022-07-27
        • 2012-03-24
        • 2016-07-12
        • 2016-11-22
        • 1970-01-01
        • 2020-01-16
        相关资源
        最近更新 更多