前端實(shí)現(xiàn)pdf文件預(yù)覽的操作步驟方法
1. 使用 PDF.js 進(jìn)行自定義預(yù)覽
PDF.js 是一個(gè)用 JavaScript 實(shí)現(xiàn)的 PDF 閱讀器,可以嵌入到網(wǎng)頁(yè)中進(jìn)行 PDF 文件的預(yù)覽,并且可以自定義其功能。
步驟如下:
1. 引入 PDF.js 庫(kù)
import pdfjsLib from 'pdfjs-dist'; import 'pdfjs-dist/web/pdf_viewer';
2. 創(chuàng)建 PDF 預(yù)覽組件
import React, { useEffect, useRef } from 'react';
import pdfjsLib from 'pdfjs-dist';
import 'pdfjs-dist/web/pdf_viewer';
const PdfPreview = ({ url }) => {
const pdfContainer = useRef(null);
useEffect(() => {
// 配置 PDF.js
pdfjsLib.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsLib.version}/pdf.worker.js`;
// 加載 PDF
const loadingTask = pdfjsLib.getDocument(url);
loadingTask.promise.then((pdf) => {
// 獲取第一頁(yè)
pdf.getPage(1).then((page) => {
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
};
page.render(renderContext).promise.then(() => {
pdfContainer.current.appendChild(canvas);
});
});
});
}, [url]);
return <div ref={pdfContainer} style={{ width: '100%', height: '600px' }}></div>;
};
export default PdfPreview;3. 使用
if (record.name.endsWith('.pdf')) {
const baseUrl = new URL(API_BASE_URL_PRO).origin;
const fileUrl = `${baseUrl.replace(/:\d+$/, ':3100')}/api/common/file/download?fileId=${record.fileId}&bucketName=dataset`;
const previewModal = Modal.info({
title: (
<>
文件預(yù)覽
<span
style={{ fontSize: '14px', textDecoration: 'underline', marginLeft: '15px' }}
>
{record.name}
</span>
</>
),
content: <PdfPreview url={fileUrl} />,
footer: null,
width: '75%',
style: { top: 35 },
closable: true,
onCancel: () => previewModal.destroy(),
});
return;
}2. 使用 iframe 嵌入并自定義參數(shù)
如果不想使用 PDF.js,也可以通過(guò) iframe 嵌入 PDF 文件,并通過(guò)特定參數(shù)來(lái)禁用下載功能。
步驟如下:
當(dāng)檢測(cè)到文件為 PDF 時(shí),使用 iframe 進(jìn)行嵌入,并添加 #toolbar=0 參數(shù)來(lái)禁用工具欄(包括下載按鈕)。
if (record.name.endsWith('.pdf')) {
const pdfFileUrl= new URL(API_BASE_URL_PRO).origin;
// window.open(pdfFileUrl, '_blank'); 或者使用打開(kāi)新窗口方式
const fileUrl = `${baseUrl.replace(/:\d+$/, ':3100')}/api/common/file/download?fileId=${record.fileId}&bucketName=dataset#toolbar=0`;
const previewModal = Modal.info({
title: (
<>
文件預(yù)覽
<span
style={{ fontSize: '14px', textDecoration: 'underline', marginLeft: '15px' }}
>
{record.name}
</span>
</>
),
content: (
<iframe
src={pdfFileUrl}
style={{ width: '100%', height: '600px', border: 'none' }}
></iframe>
),
footer: null,
width: '75%',
style: { top: 35 },
closable: true,
onCancel: () => previewModal.destroy(),
});
return;
}選擇適合你項(xiàng)目需求的方法進(jìn)行實(shí)現(xiàn)即可。如果你希望有更高的定制性和更好的用戶體驗(yàn),推薦使用 PDF.js。如果你希望實(shí)現(xiàn)簡(jiǎn)單快捷,可以選擇 iframe 方法。
總結(jié)
到此這篇關(guān)于前端實(shí)現(xiàn)pdf文件預(yù)覽操作步驟方法的文章就介紹到這了,更多相關(guān)前端pdf文件預(yù)覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)動(dòng)態(tài)表單生成
這篇文章主要來(lái)和大家一起深入探討如何使用JavaScript實(shí)現(xiàn)一個(gè)動(dòng)態(tài)表單生成器,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-01-01
js用于樹(shù)型結(jié)構(gòu)級(jí)聯(lián)選擇
js用于樹(shù)型結(jié)構(gòu)級(jí)聯(lián)選擇...2007-01-01
JavaScript數(shù)據(jù)結(jié)構(gòu)之單鏈表和循環(huán)鏈表
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之單鏈表、循環(huán)鏈表,詳細(xì)的介紹了JavaScript如何實(shí)現(xiàn)單鏈表、循環(huán)鏈表,有興趣的可以了解一下2017-11-11
JavaScript中的Array對(duì)象使用說(shuō)明
JavaScript中的Array對(duì)象是一個(gè)動(dòng)態(tài)的數(shù)組,也是一個(gè)Stack,還是一個(gè)Dictionary2011-01-01
uni-app設(shè)置緩存過(guò)期時(shí)間的操作方法
uni-app 是一個(gè)使用 Vue.js 開(kāi)發(fā)所有前端應(yīng)用的框架,開(kāi)發(fā)者編寫(xiě)一套代碼,可發(fā)布到iOS、Android、Web(響應(yīng)式)、以及各種小程序,本文給大家介紹了uni-app設(shè)置緩存過(guò)期時(shí)間的操作方法,需要的朋友可以參考下2024-12-12
JavaScript原型繼承_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript原型繼承的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
JS?Angular?服務(wù)器端渲染應(yīng)用設(shè)置渲染超時(shí)時(shí)間???????
這篇文章主要介紹了JS?Angular服務(wù)器端渲染應(yīng)用設(shè)置渲染超時(shí)時(shí)間,???????通過(guò)setTimeout模擬一個(gè)需要5秒鐘才能完成調(diào)用的API展開(kāi)詳情,需要的小伙伴可以參考一下2022-06-06

