#node.js #pdfmake
#node.js #pdfmake
Вопрос:
Я пытаюсь сгенерировать несколько файлов PDF на стороне сервера с помощью PDFMake. Каждый PDF-файл имеет определенный раздел, который является постоянным для всех создаваемых PDF general
-файлов. Затем этот general
раздел разделяется line
символом, а затем под ним загружается информация, относящаяся к этому документу.
Это отлично работает с первым PDF. Однако на втором этапе макет прерывается. Как я могу это исправить?
"use strict";
const fs = require("fs");
const PdfPrinter = require("pdfmake");
const fonts = {
Helvetica: {
normal: "Helvetica",
bold: "Helvetica-Bold",
italics: "Helvetica-Oblique",
bolditalics: "Helvetica-BoldOblique",
},
};
const printer = new PdfPrinter(fonts);
const general = [{ text: "This is general text" }];
const first = [{ text: "This is the text for the first pdf" }];
const second = [{ text: "This is the text for the second pdf" }];
const line = [{canvas: [{ type: 'line', x1: 0, y1: 5, x2: 595-2*40, y2: 5, lineWidth: 2 }],margin: [ 0, 10, 0, 10 ]},];
let docDefinition = {
pageSize: "letter",
defaultStyle: {
font: "Helvetica"
}
};
docDefinition.content = [general,line,first];
let pdfDoc = printer.createPdfKitDocument(docDefinition);
pdfDoc.pipe(fs.createWriteStream('one.pdf'));
pdfDoc.end();
docDefinition.content = [general,line,second];
pdfDoc = printer.createPdfKitDocument(docDefinition);
pdfDoc.pipe(fs.createWriteStream('two.pdf'));
pdfDoc.end();
Ответ №1:
Итак, я задал вопрос на странице проблем GitHub, и ответ был:
Одна
docDefinition
переменная может быть использована только один раз для создания PDF.
Хотя это может быть правдой, я нашел адекватный обходной путь, используя таблицу только с заголовком. Это не моя идея, но я не могу вспомнить, откуда я ее взял.
function line() {
//Usually one would use a canvas to draw the line
//{canvas: [{ type: 'line', x1: 0, y1: 5, x2: 595-2*40, y2: 5, lineWidth: 2 }],margin: [ 0, 10, 0, 0 ]},
//For some reason, that's not working and the layout just breaks
return {
table : {
headerRows : 1,
widths: ['100%'],
body : [
[''],
['']
]
},
layout : 'headerLineOnly'
}
}
Затем вы используете line()
любую docDefinition
нужную вам строку.
"use strict";
const fs = require("fs");
const PdfPrinter = require("pdfmake");
const fonts = {
Helvetica: {
normal: "Helvetica",
bold: "Helvetica-Bold",
italics: "Helvetica-Oblique",
bolditalics: "Helvetica-BoldOblique",
},
};
const printer = new PdfPrinter(fonts);
const general = [{ text: "This is general text" }];
const first = [{ text: "This is the text for the first pdf" }];
const second = [{ text: "This is the text for the second pdf" }];
let docDefinition = {
pageSize: "letter",
defaultStyle: {
font: "Helvetica"
}
};
docDefinition.content = [general,line(),first];
let pdfDoc = printer.createPdfKitDocument(docDefinition);
pdfDoc.pipe(fs.createWriteStream('one.pdf'));
pdfDoc.end();