web-dev-qa-db-ja.com

PDFMakeとvfs_fontsを使用してNode.jsでPDFを作成するにはどうすればよいですか?

このように見えます 質問 古いバージョンのPDFMakeでは 質問 かなりの数 ですが、表示されるもので更新されていません最新のディレクトリ構造。さらに、フォントをルートの「fonts」フォルダにコピーするのは良くありません。

含まれているvfs_fonts.jsファイルを使用してNode.jsで実行されているPDFMake( "pdfmake": "^ 0.1.31")のサーバー側バージョンを取得するにはどうすればよいですか?

コマンドラインでnpmを使用してインストールします

npm install pdfmake fs --save

以下を使用してNode.jsアプリindex.jsを起動します。

var fonts = {
    Roboto: {
        normal: 'fonts/Roboto-Regular.ttf',
        bold: 'fonts/Roboto-Medium.ttf',
        italics: 'fonts/Roboto-Italic.ttf',
        bolditalics: 'fonts/Roboto-MediumItalic.ttf'
    }
};

var PdfPrinter = require('pdfmake/src/printer');
var printer = new PdfPrinter(fonts);

var dd = {
    content: [
        'First paragraph',
        'Another paragraph'
    ]
}
var pdfDoc = printer.createPdfKitDocument(dd);
pdfDoc.pipe(fs.createWriteStream('basics.pdf')).on('finish',function(){
    //success
});
pdfDoc.end();

ヒットランとバム:

/usr/local/bin/node index.js
fs.js:640
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT: no such file or directory, open 'fonts/Roboto-Regular.ttf'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)

問題は、fonts/Roboto ...ファイルの場所にあるようです。クライアント側では、これはvfs_fonts.jsファイルを含めることで解決されます。サーバー側、よくわかりません。 NO fontsフォルダーまたは.ttfファイル は含まれていません。流星フレームワーク 私が見つけたのは適用できないようです。

何か案は?すべての公式 src/fontsフォルダーを参照します。 npmインストールサーバーモジュールを使用するのは良い方法ではありません。

8
Will Lovett

これは私がこれを解決するためにしたことです。

「roboto-font」:「0.1.0」モジュールをダウンロードし、Robotoオブジェクトでそのフォントのパスを割り当てました。正常に機能しました。

let fonts = {
    Roboto: {
        normal: 'node_modules/roboto-font/fonts/Roboto/roboto-regular-webfont.ttf',
        bold: 'node_modules/roboto-font/fonts/Roboto/roboto-bold-webfont.ttf',
        italics: 'node_modules/roboto-font/fonts/Roboto/roboto-italic-webfont.ttf',
        bolditalics: 'node_modules/roboto-font/fonts/Roboto/roboto-bolditalic-webfont.ttf'
    }
};
let printer = new pdfMake(fonts);
let pdfDoc = printer.createPdfKitDocument(pdfData);
pdfDoc.pipe(fs.createWriteStream(reportName));
pdfDoc.end();
4
Ninja

最初にここでRobotoフォントをダウンロードする必要があります https://fonts.google.com/specimen/Roboto そしてそれらをfontsフォルダー内にコピーします。次のようにフォントオブジェクトを更新します。

var fonts = {
  Roboto: {
    normal: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-Regular.ttf'),
    bold: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-Medium.ttf'),
    italics: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-Italic.ttf'),
    bolditalics: path.join(__dirname, '..', 'your_public_folder', '/fonts/Roboto-MediumItalic.ttf')
  }
}

この例では、「your_public_folder」を、すべてのhtml、css、およびjsファイルがあるフォルダー名に置き換えます。

2
Harry