pdfmake在node.js中不包含字体/文本



我的pdfmake有问题。我想在node.js服务器上生成一个PDF。我想从数据库中加载数据,绘制一个漂亮的表,然后简单地将其保存到文件夹中。

var pdfMakePrinter = require('pdfmake/src/printer');
    ...
      var fonts = {
        Roboto: {
            normal: './fonts/Roboto-Regular.ttf',
            bold: './fonts/Roboto-Medium.ttf',
            italics: './fonts/Roboto-Italic.ttf',
            bolditalics: './fonts/Roboto-Italic.ttf'
        }
    };
    var PdfPrinter = require('pdfmake/src/printer');
    var printer = new PdfPrinter(fonts);
    var docDefinition = {
        content: [
            'First paragraph',
            'Another paragraph, this time a little bit longer to make sure, this line will be divided into at least two lines'
        ]
    };
    var pdfDoc = printer.createPdfKitDocument(docDefinition);
    pdfDoc.pipe(fs.createWriteStream('pdf/basics.pdf')).on('finish', function () {
        res.send(true);
    });

生成的PDF为空。如果我添加一个图像,它插入得很好。但不包括字体。字体的路径(在示例中给出)是正确的。

有人知道为什么没有嵌入字体,以及如何在node.js中实现这一点吗?pdfmake文档中没有有效的示例。

经过一些调试,我发现这个应用程序在fontWrapper.js中崩溃了:

FontWrapper.prototype.getFont = function(index){
    if(!this.pdfFonts[index]){
        var pseudoName = this.name + index;
        if(this.postscriptName){
            delete this.pdfkitDoc._fontFamilies[this.postscriptName];
        }
        this.pdfFonts[index] = this.pdfkitDoc.font(this.path, pseudoName)._font; <-- Crash
        if(!this.postscriptName){
            this.postscriptName = this.pdfFonts[index].name;
        }
        }
        return this.pdfFonts[index];
    };

有人有主意吗?

TTF在您的情况下没有问题,您可以在node.js服务器上使用任何字体生成PDF。

内部pdfmake

TTFFont.open = function(filename, name) {
      var contents;
      contents = fs.readFileSync(filename);
      return new TTFFont(contents, name);
    };

contents = fs.readFileSync(filename);这条线上fs无法读取给定路径上的文件

根据本次对话,您必须将字体放在根文件夹中,但问题是,当我们创建字体对象时,我们给出了根路径,而这条路径对fs.readFileSync不起作用,所以你必须准确地确定字体的路径

在字体路径之前添加process.cwd().split('.meteor')[0]

我已经创建了相同功能的示例,请在下面链接

https://github.com/daupawar/MeteorAsyncPdfmake

最新更新