问题描述
我从基于nestJS的AWS Lambda函数生成的PDF文件的所有页面均为空白。当我生成PDF文件并将其附加到电子邮件中时,我会收到包含所有内容的正确文件。
但是,当我从AWS Lambda GET API请求在浏览器中下载相同文件时,则会得到一个包含空白页面的文件。
以下代码可以正常工作。
@Get('/send-pdf-email')
async sendPDF() {
const buffer = await this.reportsService.getPDFBuffer();
this.emailService.sendApplicationPDF({ filename: "report.pdf",data: buffer });
}
但是当我生成相同的PDF文件并返回响应时,下载的文件的所有页面均为空白。
@Get('/download-pdf')
@Header('Content-Type','application/pdf')
@Header('Content-disposition','attachment; filename=report.pdf')
async getApplicationCompilancePDF(
@Param('id',ParseIntPipe) id: number,@Res() res: Response,) {
const buffer = await this.reportsService.getPDFBuffer();
const stream = this.reportsService.getReadableStream(buffer);
stream.pipe(res);
}
这是我的ReportsService
import { Injectable } from '@nestjs/common';
import htmlPdf from 'html-pdf';
import path from 'path';
import { Readable } from 'stream';
@Injectable()
export class ReportsService {
async getPDFBuffer(): Promise<Buffer> {
const html = "<p>Hello World!</p>";
return new Promise((resolve,reject) => {
htmlPdf.create(html,{
phantomPath: path.resolve(
process.cwd(),"node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs"
),}).toBuffer((err,buffer) => {
if (err) {
reject(err);
} else {
resolve(buffer);
}
});
});
}
getReadableStream(buffer: Buffer): Readable {
const stream = new Readable();
stream.push(buffer);
stream.push(null);
return stream;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)