使用Puppeteer创建HTTP服务器将网页转换为PDF文件

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

你是一个资深nodejs程序员,请使用puppeteer开发一个http服务器,用于将用户提供的网页链接转换为pdf文件。 请列出代码

回答:

当然,以下是一个使用 Node.js 和 Puppeteer 创建的 HTTP 服务器的示例代码,该服务器可以将用户提供的网页链接转换为 PDF 文件。

首先,确保你已经安装了 Node.js 和 Puppeteer。你可以通过以下命令安装 Puppeteer:

npm install puppeteer

然后,创建一个新的 JavaScript 文件(例如 server.js),并将以下代码粘贴到文件中:

const http = require('http');
const url = require('url');
const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');

const PORT = 3000;

const requestHandler = async (req, res) => {
    const queryObject = url.parse(req.url, true).query;
    const targetUrl = queryObject.url;

    if (!targetUrl) {
        res.writeHead(400, { 'Content-Type': 'text/plain' });
        res.end('Please provide a URL as a query parameter, e.g., /?url=http://example.com');
        return;
    }

    try {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto(targetUrl, { waitUntil: 'networkidle2' });

        const pdfBuffer = await page.pdf({ format: 'A4' });

        await browser.close();

        const fileName = `output-${Date.now()}.pdf`;
        const filePath = path.join(__dirname, fileName);

        fs.writeFileSync(filePath, pdfBuffer);

        res.writeHead(200, {
            'Content-Type': 'application/pdf',
            'Content-Disposition': `attachment; filename=${fileName}`
        });
        res.end(pdfBuffer);

        // Optionally, delete the file after sending it to the client
        fs.unlink(filePath, (err) => {
            if (err) {
                console.error('Failed to delete the file:', err);
            }
        });
    } catch (error) {
        console.error('Error generating PDF:', error);
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Internal Server Error');
    }
};

const server = http.createServer(requestHandler);

server.listen(PORT, () => {
    console.log(`Server is listening on port ${PORT}`);
});

这个代码创建了一个 HTTP 服务器,监听在端口 3000 上。当用户访问服务器并提供一个 url 查询参数时,服务器���使用 Puppeteer 打开该网页并生成一个 PDF 文件,然后将该 PDF 文件返回给用户。

你可以通过以下命令启动服务器:

node server.js

然后在浏览器中访问,例如:

http://localhost:3000/?url=http://example.com

这将生成 http://example.com 的 PDF 文件并下载到你的计算机上。