pdfMake:使用系统字体

时间:2014-08-13 11:50:52

标签: javascript pdf-generation

我正在使用pdfMake - 库在我的一个应用程序中在客户端生成PDF文档。使用库时我的主要问题是它依赖于在虚拟文件系统中使用可用字体。因此,字体在名为vfs_fonts.js的JavaScript文件中发送到客户端,然后加载到虚拟文件系统中,然后嵌入到生成的PDF文件中(当然只包含整个字体的已使用字符子集)。

使用默认设置,库使用Roboto字体,因此仅为字体发送略多于800kb的内容。我的主要直觉是:

为什么不使用系统字体,因此可以节省流量?

是否有解决方法使其使用系统字体?

我目前减少流量的方法是从vfs_fonts.js中删除未在我创建的文档中使用的字体样式。例如。只使用常规样式时,我会删除斜体,粗体样式和斜体/粗体样式。使用这种方法,我至少能够将字体文件的大小减少3/4。

3 个答案:

答案 0 :(得分:1)

我也在使用PDFmake,但我遇到了类似的问题。

您必须通过相应的密钥添加任何新来源,例如:

pdfmake.fonts = {
   'Roboto' : {
      normal: 'Roboto-Regular.ttf',
      bold: 'Roboto-Medium.ttf',
      italics: 'Roboto-Italic.ttf',
      bolditalics: 'Roboto-Italic.ttf'
   },

   'OpenSans' : {
      normal: 'OpenSans-Regular.ttf',
      bold: 'OpenSans-Medium.ttf',
      italics: 'OpenSans-Italic.ttf',
      bolditalics: 'OpenSans-Italic.ttf'
   }

}

然后在PDF内容中,您必须添加要使用的“字体”。

    {
   stack : [
      { 
         text : this is a test text
         font  : 'OpenSans',
         italic : true
      }, { 
         text : this is another test text
         font : 'Roboto',
         bold : true
      }  
  ]
}

我希望您为寻求解决方案的人找到一个很好的解决方案。

Source here.感谢Daniel Arbiol(Darbiol)。

答案 1 :(得分:0)

正如bartekp,pdfMake的主要维护者所指出的,由于底层pdfkit库的局限性,目前无法实现此功能。

因此,为了减小字体文件的大小,此时最佳选择可能是删除未使用的字体并为您的网络服务器使用gzip压缩。

答案 2 :(得分:-1)

PDFKit现在支持standard fonts

# Using a standard PDF font
doc.font('Times-Roman')
   .text('Hello from Times Roman!')
   .moveDown(0.5)

另见live example