我正在使用pdfMake - 库在我的一个应用程序中在客户端生成PDF文档。使用库时我的主要问题是它依赖于在虚拟文件系统中使用可用字体。因此,字体在名为vfs_fonts.js的JavaScript文件中发送到客户端,然后加载到虚拟文件系统中,然后嵌入到生成的PDF文件中(当然只包含整个字体的已使用字符子集)。
使用默认设置,库使用Roboto字体,因此仅为字体发送略多于800kb的内容。我的主要直觉是:
为什么不使用系统字体,因此可以节省流量?
是否有解决方法使其使用系统字体?
我目前减少流量的方法是从vfs_fonts.js中删除未在我创建的文档中使用的字体样式。例如。只使用常规样式时,我会删除斜体,粗体样式和斜体/粗体样式。使用这种方法,我至少能够将字体文件的大小减少3/4。
答案 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。