生成与操纵木偶的PDF没有保存

问题描述 投票:2回答:1

我有node.js编写的应用程序托管在heroku和我的前端应用程序是用Vue.js,它是hostinger。我想知道,如果是有可能产生与操纵木偶的PDF文件,并立即将其发送给客户端前端没有把它保存到磁盘第一?如果是的话,你可以给我如何做它的一些例子吗?

目前,我的职责是这样的:

exports.gerarPDFAvaliacao = async (dadosAvaliacao) => {
    try {
        const compile = async (fileName, data) => {

            const filePath = path.join(process.cwd(), 'src/templates/client/operation/', `${fileName}.hbs`);
            const html = await fs.readFile(filePath, 'utf-8');
            return await hbs.compile(html)(data);
        }

        const browser = await puppeteer.launch();
        const page = await browser.newPage();

        let content = await compile('avaliations', dadosAvaliacao);

        await page.goto(`data:text/html,${content}`, { waitUntil: 'networkidle0' });
        await page.emulateMedia('screen');
        await page.pdf({
            path: 'src/dist/pdf/' + dadosAvaliacao.arquivo + '.pdf',
            format: 'A4',
            printBackground: true
        })
        await browser.close();

        return dadosAvaliacao.arquivo + '.pdf';
    } catch (error) {
        console.log('Errors => ', error);
    }
};
node.js vue.js puppeteer
1个回答
6
投票

official documentation,如果你不提供路径的文件将不会被保存到磁盘。

page.pdf(选择):选择对象,它可能具有以下属性:路径的文件路径PDF保存。如果路径是相对路径,则相对于当前工作目录解析。如果没有提供路径,PDF将不会被保存到磁盘。

这意味着它应该返回类似的缓冲区或生成的文件的二进制表示。你只需要到或管道返回到响应,这取决于你所使用的架构。

这只是输出PDF到控制台:

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');

console.log(await page.content());
const pdf = await page.pdf();

await browser.close();
console.log(pdf) // maybe do response(pdf).type('x-pdf')

编辑:这是使用快递和操纵傀儡直接在内存中返回PDF内容一个完整的例子。它运行在runkit,所以我想的一样限制应用(甚至更多)。如果您导航到的例子有,你可以看到浏览器是如何检测到它是一个PDF文件,并可以正确显示,它的公共端点。

const puppeteer = require ('puppeteer');
const express = require('express');
var app = express(exports);
const browser = await puppeteer.launch();

const main = async () => {

    const page = await browser.newPage();
    await page.goto('https://example.com');

    const pdf = await page.pdf();
    return pdf;
 }


app.get('/', async function (req, res) {
        const pdf = await main();
        res.contentType("application/pdf");
        res.send(pdf);
});

app.listen(3000, function(){ console.log('Listening on 3000') });
© www.soinside.com 2019 - 2024. All rights reserved.