Nodejs 有什么好的网页显示pdf的插件

Nodejs 有什么好的网页显示pdf的插件

如题求教?

4 回复

Node.js 有什么好的网页显示 PDF 的插件

在 Node.js 中,想要在网页上显示 PDF 文件,可以使用一些现成的库或工具。这里介绍几个常用的插件和方法:

1. 使用 pdfjs

pdfjs 是一个基于浏览器的 PDF 渲染引擎,由 Mozilla 开发。虽然它主要用于浏览器环境,但也可以通过一些技巧在 Node.js 环境中使用。

安装

npm install pdfjs-dist

示例代码

const express = require('express');
const path = require('path');
const pdfjsLib = require('pdfjs-dist');

async function servePdf(req, res) {
    const url = req.query.url;
    if (!url) {
        return res.status(400).send('URL parameter is required');
    }

    try {
        const loadingTask = pdfjsLib.getDocument(url);
        const pdf = await loadingTask.promise;

        // 获取第一页
        const page = await pdf.getPage(1);

        // 渲染页面为图像
        const viewport = page.getViewport({ scale: 1.5 });
        const canvas = document.createElement('canvas');
        const context = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = viewport.width;

        const renderContext = {
            canvasContext: context,
            viewport: viewport
        };
        await page.render(renderContext).promise;

        // 将 canvas 转换为 Base64 编码的图像数据
        const imgData = canvas.toDataURL();
        res.send(imgData);
    } catch (error) {
        console.error(error);
        res.status(500).send('Error loading PDF');
    }
}

const app = express();
app.get('/pdf', servePdf);
app.listen(3000, () => {
    console.log('Server running on port 3000');
});

注意:上面的代码示例在服务器端渲染 PDF 页面为图像,然后发送给客户端。由于 pdfjs 主要设计用于浏览器环境,所以在 Node.js 环境中使用时需要一些额外的配置和调整。

2. 使用 express-pdf 插件

express-pdf 是一个更简单的解决方案,可以直接将 PDF 文件作为响应发送到客户端。

安装

npm install express-pdf

示例代码

const express = require('express');
const pdf = require('express-pdf');

const app = express();

// 设置静态文件目录
app.use(express.static('public'));

// 使用 express-pdf 中间件
app.use(pdf.middleware());

app.get('/pdf', (req, res) => {
    res.sendFile(path.join(__dirname, 'public/sample.pdf'));
});

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

在这个例子中,我们使用了 express-pdf 中间件来处理 PDF 文件,并将其直接发送到客户端。

总结

以上两种方法都可以实现 Node.js 服务端渲染 PDF 并展示在网页上的功能。选择哪种方法取决于你的具体需求和应用场景。pdfjs 提供了更强大的功能和灵活性,而 express-pdf 则更加简单易用。


要求用户用chrome :D

Node.js 显示 PDF 的插件推荐

如果你希望在网页中嵌入并显示 PDF 文件,可以使用 pdfjs-dist 这个库。它是一个轻量级的库,专门用于在浏览器中渲染 PDF 文件。此外,你可以结合 express 框架来提供静态文件服务。

安装依赖

首先需要安装 pdfjs-distexpress

npm install pdfjs-dist express

示例代码

接下来是简单的服务器端和客户端代码示例。

服务器端(Express)

const express = require('express');
const path = require('path');
const app = express();
const port = 3000;

// 静态文件服务配置
app.use(express.static(path.join(__dirname, 'public')));

// 提供 PDF 文件
app.get('/pdf', (req, res) => {
    res.sendFile(path.join(__dirname, 'public', 'sample.pdf'));
});

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

客户端 HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PDF Viewer</title>
</head>
<body>
    <canvas id="pdf-canvas"></canvas>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.9.359/pdf.min.js"></script>
    <script>
        const url = '/pdf';
        
        pdfjsLib.getDocument(url).promise.then(pdfDoc => {
            pdfDoc.getPage(1).then(page => {
                const scale = 1.5;
                const viewport = page.getViewport({ scale: scale });
                
                const canvas = document.getElementById('pdf-canvas');
                const context = canvas.getContext('2d');
                canvas.height = viewport.height;
                canvas.width = viewport.width;
                
                const renderContext = {
                    canvasContext: context,
                    viewport: viewport
                };
                page.render(renderContext);
            });
        });
    </script>
</body>
</html>

这段代码会启动一个 Express 服务器,并提供一个 PDF 文件。同时,HTML 页面会使用 pdfjs-dist 库来加载并显示 PDF 文件的第一页。

这样,你就有了一个基本的框架来展示 PDF 文件。根据需求,你可以进一步调整和扩展功能。

回到顶部