Custom font faces in jsPDF?

后端 未结 6 715
無奈伤痛
無奈伤痛 2020-12-08 15:30

Is it possible to include custom fonts in jsPDF ?

With the basic library, if I console log \'doc.getFontList()\' I get:

Courier, Helvetica, Ti

6条回答
  •  一个人的身影
    2020-12-08 15:49

    Here is the solution I'm using...

    First, as others have mentioned - you need these two libraries:

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

    Next - the second library requires that you provide it with at least one custom font in a file named default_vfs.js. I'm using two custom fonts - Arimo-Regular.ttf and Arimo-Bold.ttf - both from Google Fonts. So, my default_vfs.js file looks like this:

    (

    (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);
    

    Obviously, you version would look different, depending on the font(s) you're using.

    There's a bunch of ways to get the Base64-encoded string for your font, but I used this: https://www.giftofspeed.com/base64-encoder/.

    It lets you upload a font .ttf file, and it'll give you the Base64 string that you can paste into default_vfs.js.

    You can see what the actual file looks like, with my fonts, here: https://cdn.rawgit.com/stuehler/jsPDF-CustomFonts-support/master/dist/default_vfs.js

    So, once your fonts are stored in that file, your HTML should look like this:

        
        
        
    

    Finally, your JavaScript code looks something like this:

    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");
    

    This is probably obvious to most, but in that addFont() method, the three parameters are:

    1. The font's name you used in the addFileToVFS() function in the default_vfs.js file
    2. The font's name you use in the setFont() function in your JavaScript
    3. The font's style you use in the setFontType() function in your JavaScript

    You can see this working here: https://codepen.io/stuehler/pen/pZMdKo

    Hope this works as well for you as it did for me.

提交回复
热议问题