我必须在我的 React 应用程序中实现以下场景:
我的做法是:
当我通过时,一切正常,例如https://google.com。 PDF 已正确生成。但 React App url 返回空 PDF。我不知道有什么问题:(
NestJS 服务器代码:
await axios
.get(`${PUPPETEER_APP_URL}/pdf`, {
responseType: 'arraybuffer',
params: { url: programUrl }
})
Puppeteer 应用程序代码:
路由器:
app.get('/pdf', async (req, res) => {
const url = req.query.url
const result = await generatePdf(`${CLOUD_APP_URL}/${url}`)
res.contentType('application/pdf');
res.send(result);
});
服务:
const puppeteer = require('puppeteer');
const generatePdf = async (payload) => {
try {
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto(payload, {
waitUntil: ['domcontentloaded', 'networkidle0', 'load']
})
await page.emulateMediaType('screen')
const pdf = await page.pdf();
await browser.close();
return pdf;
} catch (error) {
console.log('GENERATE PDF ERROR :>> ', error);
}
};
module.exports = generatePdf;
响应数据看起来像
data: <Buffer >
希望有帮助🙏🏻
const downloadAsPDF = async ({ documentId }) => {
let pdf = await fetch(url,{
endpoint: `services/pdf?documentId=${documentId}`,
method: 'GET',
headers: {
'Content-Type': 'application/pdf'
}
});
const link = document.createElement('a');
link.href = URL.createObjectURL(pdf);
link.download = `your-file-name.pdf`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};