我不确定我做错了什么。
我有一个 html 内容并想将其保存为 pdf。我使用 html-pdf(来自 npm)和下载库http://danml.com/download.html
实际上,当我直接保存到文件或显示它时,我可以毫无问题地获得 pdf。但是我从 js 方法调用我的 webservice 方法,我有一个流/缓冲区作为返回值并使用“下载”库保存
这是我的代码
pdf.create(html, options).toFile('./mypdf.pdf', function (err, res) {
if (err) return console.log(err);
console.log(res);
});
pdf.create(html,options).toBuffer(function (err, buffer) {
if (err) return reject(err);
return resolve(buffer);
});
//res.setHeader('Content-type', 'application/pdf');
pdf.create(html, options).toStream(function (err, stream) {
if (err) return res.send(err);
//res.type('pdf');
return resolve(stream);// .pipe(res);
});
我可以将内容保存为 pdf 它工作正常。但是当我尝试发送流或缓冲区时,页面不知何故为空。我用记事本打开了这两个pdf文件。有一些差异。例如,一个可能是 44kb,另一个是 78kb。空的还包含以下几行
%PDF-1.4 1 0 obj << /Title (��) /Creator (��) /Producer (�� Q t 5 . 5 . 1) /CreationDate (D:20190524152156)
结束对象
我认为 toBuffer 或 toStream 方法在我的情况下有问题。因为流似乎还不错。至少我可以看到它是一个pdf文件(没有错误,只是页面是空的)
无论如何,这是我的 API 路由器
let result = await
routerVoucher.CreatePdfStream(req.query.VoucherCode,req.query.AppName);
res.setHeader('Content-type', 'application/pdf');
res.type('pdf');
//result.pipe(res);
res.end(result, 'binary');
这是我的 js 消费者
$.ajax({
type: "GET",
url: '/api/vouchers/GetLicensePdf',
data:data,
success: function (pdfFile) {
if (!pdfFile)
throw new Error('There is nothing to download');
download(pdfFile,voucherCode + '.pdf', 'application/pdf')