从AWS Lambda生成的PDF文件具有所有空白页

问题描述

我从基于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 (将#修改为@)