直接使用浏览器内置 PDF viewer。
<iframe src="/files/demo.pdf" width="100%" height="800px"></iframe>或
<embed src="/files/demo.pdf" type="application/pdf" width="100%" height="800px">或
<object data="/files/demo.pdf" type="application/pdf" width="100%" height="800px"></object>如果 后端返回 PDF 二进制,可以这样处理:
async function previewPdf() {
const res = await fetch("/api/file/pdf");
const blob = await res.blob();
const url = URL.createObjectURL(blob);
window.open(url);
}或
iframe.src = URL.createObjectURL(blob);流程:
后端返回 PDF binary
↓
fetch / axios
↓
new Blob()
↓
URL.createObjectURL()
↓
iframe / window.open最专业、最常见方案。
由 Mozilla 开发的 PDF 渲染库。
npm install pdfjs-distimport * as pdfjsLib from "pdfjs-dist";
const loadingTask = pdfjsLib.getDocument("/demo.pdf");
loadingTask.promise.then(function(pdf) {
pdf.getPage(1).then(function(page) {
const scale = 1.5;
const viewport = page.getViewport({ scale });
const canvas = document.getElementById("canvas");
const context = canvas.getContext("2d");
canvas.height = viewport.height;
canvas.width = viewport.width;
page.render({
canvasContext: context,
viewport: viewport
});
});
});HTML
<canvas id="canvas"></canvas>功能非常强:
PDF.js 自带完整 viewer:
web/viewer.html使用方式:
/viewer.html?file=/demo.pdf示例:
<iframe src="/pdfjs/web/viewer.html?file=/demo.pdf"></iframe>完整功能:
如果你用 Vue / React,可以用封装好的组件。
npm install vue-pdf示例
<pdf src="/demo.pdf"></pdf>常用库:
库 | 特点 |
|---|---|
vue-pdf | 简单 |
vue3-pdfjs | Vue3 |
pdfvuer | 支持分页 |
常用:
react-pdf安装
npm install react-pdf示例
<Document file="/demo.pdf">
<Page pageNumber={1} />
</Document>适合 企业网盘 / 文档系统。
例如:
其中:
都支持:
将 PDF 转图片:
PDF
↓
Image (PNG / JPG)
↓
前端展示后端常用工具:
方案 | 难度 | 功能 | 推荐指数 |
|---|---|---|---|
iframe | ⭐ | ⭐ | ⭐⭐⭐ |
Blob | ⭐⭐ | ⭐ | ⭐⭐⭐ |
PDF.js | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
PDF.js viewer | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
Vue/React组件 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
图片化 | ⭐⭐⭐ | ⭐ | ⭐⭐ |