pdfmake - 在 vfs 上找不到字体文件

use*_*395 8 javascript fonts pdfmake

我有以下代码用于测试驱动器PDFmake。我对字体文件的位置有问题。我看到的文档似乎表明在拉入vfs_fonts文件后我应该能够看到它们。然而,这对我来说并非如此。

function createPdf(assessmentId: string): string {
  const pdfMake = require('pdfmake/build/pdfmake.js');
  const pdfFonts = require('pdfmake/build/vfs_fonts.js');
  pdfMake.vfs = pdfFonts.pdfMake.vfs;

  //required font setup, requires that you link to the fonts shipped with npm

  const fontDescriptors = {
    Roboto: {
      normal: 'Roboto-Regular.ttf',
      bold: 'Roboto-Medium.ttf',
      italics: 'Roboto-Italic.ttf',
      bolditalics: 'Roboto-Italic.ttf',
    }
  };
  const termpaper = new PdfLayout();
  const docDefinition = termpaper.layout
  const printer = new Printer(fontDescriptors);

  //get a reference to the PdfKit instance, which is a streaming interface

  const pdfDoc = printer.createPdfKitDocument(docDefinition);

  return "pdflocation";
}
Run Code Online (Sandbox Code Playgroud)

当此代码执行时,我收到此错误。

错误:

ENOENT:没有这样的文件或目录,请在 Object.fs.openSync (fs.js:642:18) 处的 Error (native) 处打开“Roboto-Medium.ttf”,位于 Object.fs.readFileSync (fs.js:510:33) ) 在 Object.fontkit.openSync (/user_code/node_modules/pdfmake/node_modules/fontkit/index.js:43:19) 在 Function.PDFFont.open (/user_code/node_modules/pdfmake/node_modules/pdfkit/js/font.js :14:24) 在 PDFDocument.font (/user_code/node_modules/pdfmake/node_modules/pdfkit/js/mixins/fonts.js:39:28) 在 FontProvider.provideFont (/user_code/node_modules/pdfmake/src/fontProvider.js) :49:58) at /user_code/node_modules/pdfmake/src/textTools.js:258:27 at Array.forEach (native) at measure (/user_code/node_modules/pdfmake/src/textTools.js:240:13)

我需要做什么才能正确找到这些字体文件?

roz*_*058 7

我也为此苦苦挣扎。我找到的解决方案是在我的项目中实际包含字体文件。列出的文件位于我项目根目录的“fonts”文件夹中,我的代码通过 uri 引用它们:

const fonts = {
    Roboto: {
        normal: 'fonts/Roboto-Regular.ttf',
        bold: 'fonts/Roboto-Medium.ttf',
        italics: 'fonts/Roboto-Italic.ttf',
        bolditalics: 'fonts/Roboto-MediumItalic.ttf'
    }
};
Run Code Online (Sandbox Code Playgroud)

我从这里下载了字体文件。

希望这可以帮助。


Gau*_*ani 6

您也可以像这样使用,在我的例子中,我的字体、控制器、工作区目录中的帮助程序目录。

const path = require('path'); // path is give you a working directory path.resolve() and you can give your font file path.

const fontDescriptors = {
  Roboto: {
    normal: path.resolve('./fonts/Roboto-Regular.ttf'),
    bold: path.resolve('./fonts/Roboto-Medium.ttf'),
    italics: path.resolve('./fonts/Roboto-Italic.ttf'),
    bolditalics: path.resolve('./fonts/Roboto-MediumItalic.ttf')
  }
}
Run Code Online (Sandbox Code Playgroud)


use*_*395 -1

function createPdf(assessmentId: string): string {
  const pdfMake = require("pdfmake/build/pdfmake.js");
  const pdfFonts = require("pdfmake/build/vfs_fonts.js");
  pdfMake.vfs = pdfFonts.pdfMake.vfs;
  const projectId = "crds-wayfinder-int";
  const philstorage = new gcs({
    projectId: projectId
  });

  // required font setup, requires that you link to the fonts shipped with npm

  const termpaper = new PdfLayout();
  const docDefinition = termpaper.layout;

  // get a reference to the PdfKit instance, which is a streaming interface
  const pdfDoc = pdfMake.createPdf(docDefinition);
  pdfDoc.getBuffer((buffer: any) => {
    console.log('buffer: ', buffer);
  });

  console.log('pdfDoc: ', pdfDoc);

  return "pdflocation";
}
Run Code Online (Sandbox Code Playgroud)

  • 这里到底是什么问题?你的答案提到**无处字体**。 (3认同)