У меня есть файл PDF, который я хочу прочитать в памяти с помощью NodeJS. В идеале я хотел бы закодировать его, используя base64
для его передачи. Но почему-то функция read
не читает полный файл PDF, что для меня не имеет смысла. Исходный PDF-файл был сгенерирован с помощью pdfKit
, и его можно просмотреть с помощью программы для чтения PDF-файлов.
Исходный файл test.pdf
имеет размер 90 КБ на диске. Но если я читаю и записываю его обратно на диск, там всего 82 КБ, а новый PDF test-out.pdf
не в порядке. Программа просмотра PDF говорит:
Невозможно открыть документ. PDF-документ поврежден.
Следовательно, кодировка base64 также работает некорректно. Я протестировал его, используя этот веб-сервис. Кто-нибудь знает, почему и что здесь происходит? И как решить.
Я уже нашел этот пост.
fs = require('fs');
let buf = fs.readFileSync('test.pdf'); // returns raw buffer binary data
// buf = fs.readFileSync('test.pdf', {encoding:'base64'}); // for the base64 encoded data
// ...transfer the base64 data...
fs.writeFileSync('test-out.pdf', buf); // should be pdf again
РЕДАКТИРОВАТЬ MCVE:
const fs = require('fs');
const PDFDocument = require('pdfkit');
let filepath = 'output.pdf';
class PDF {
constructor() {
this.doc = new PDFDocument();
this.setupdocument();
this.doc.pipe(fs.createWriteStream(filepath));
}
setupdocument() {
var pageNumber = 1;
this.doc.on('pageAdded', () => {
this.doc.text(++pageNumber, 0.5 * (this.doc.page.width - 100), 40, {width: 100, align: 'center'});
}
);
this.doc.moveDown();
// draw some headline text
this.doc.fontSize(25).text('Some Headline');
this.doc.fontSize(15).text('Generated: ' + new Date().toUTCString());
this.doc.moveDown();
this.doc.font('Times-Roman', 11);
}
report(object) {
this.doc.moveDown();
this.doc
.text(object.location+' '+object.table+' '+Date.now())
.font('Times-Roman', 11)
.moveDown()
.text(object.name)
.font('Times-Roman', 11);
this.doc.end();
let report = fs.readFileSync(filepath);
return report;
}
}
let pdf = new PDF();
let buf = pdf.report({location: 'athome', table:'wood', name:'Bob'});
fs.writeFileSync('outfile1.pdf', buf);