代码之家  ›  专栏  ›  技术社区  ›  Ryan Shillington

使用NodeJS PDFKit时出现“错误:未知版本0”

  •  0
  • Ryan Shillington  · 技术社区  · 8 年前

    我想得到非常好的 NodeJS PDFKit Google Fonts . 我的代码如下所示:

    this.doc = new PDFDocument({bufferPages: true});
    this.doc.registerFont("Roboto-Black", path.join(__dirname, "fonts", "Roboto-Black.ttf"));
    

    C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:37
            throw new Error("Unknown version " + res.version);
            ^
    
    Error: Unknown version 0
        at VersionedStruct.decode (C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:37:15)
        at C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:69:30
        at Pointer.decode (C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:79:16)
        at ArrayT.decode (C:\projects\qbdvision\node_modules\restructure\src\Array.js:49:30)
        at VersionedStruct.Struct._parseFields (C:\projects\qbdvision\node_modules\restructure\src\Struct.js:53:22)
        at VersionedStruct.decode (C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:42:12)
        at VersionedStruct.decode (C:\projects\qbdvision\node_modules\restructure\src\VersionedStruct.js:40:23)
        at C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:69:30
        at Pointer.decode (C:\projects\qbdvision\node_modules\restructure\src\Pointer.js:79:16)
        at ArrayT.decode (C:\projects\qbdvision\node_modules\restructure\src\Array.js:49:30)
     FAILED
    

    我已经从fonts下载了字体。谷歌。com,点击“Select this font”,点击弹出的“1 Family Selected”弹出窗口,然后点击该弹出窗口右上角的下载图标。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Ryan Shillington    8 年前

    解决方案是将字体转换为base64编码,然后导入它们。因此,在命令行中,使用Linux/Cygwin键入:

    base64 --wrap=0 Roboto-Black.ttf > Roboto-Black-Base64.ttf
    

    这将生成一个新的TTF文件,该文件中应包含所有文本。如果您使用外部服务,请确保没有任何包装。它应该是一个连续的文本块。

    然后,在NodeJS代码中,执行以下操作:

    let fs = require("fs");
    
    let doc = new PDFDocument({bufferPages: true});
    let filePath = path.join(__dirname, "fonts", "Roboto-Black-Base64.ttf");
    let fileContents = fs.readFileSync(filePath, "utf8");
    this.doc.registerFont(fontName, new Buffer(fileContents, "base64"));
    

    然后你的字体就会显示得非常清晰。道具 this answer 谢谢你给了我需要的线索。