PDF.js

什么是 PDF.js?

PDF.js 是由 Mozilla 開發的一個用于呈現 PDF 文件的 JavaScript 庫。它允許開發者將 PDF 文件直接嵌入到網頁中,而無需使用插件或其他外部工具。PDF.js 使用 HTML5 技術,利用 Canvas 元素來呈現 PDF 內容,并提供了一組 API,用于在網頁中對 PDF 進行各種操作。

如何使用 PDF.js with React?

與普通的 JavaScript 項目類似,在 React 項目中使用 PDF.js 也非常簡單。您可以將 PDF.js 作為依賴項添加到您的項目中,并編寫相應的 React 組件來呈現 PDF 文件。以下是一個基本的示例:

import React, { useState, useEffect } from 'react';
import pdfjs from 'pdfjs-dist/build/pdf';
import 'pdfjs-dist/web/pdf_viewer.css';const PdfViewer = ({ pdfUrl }) => {const [pdfDoc, setPdfDoc] = useState(null);useEffect(() => {const loadPdf = async () => {const pdf = await pdfjs.getDocument(pdfUrl).promise;setPdfDoc(pdf);};loadPdf();}, [pdfUrl]);return (<div>{pdfDoc && (<div>{[...Array(pdfDoc.numPages)].map((_, index) => (<PdfPage key={index} pageNum={index + 1} pdfDoc={pdfDoc} />))}</div>)}</div>);
};const PdfPage = ({ pageNum, pdfDoc }) => {const canvasRef = React.createRef();useEffect(() => {const renderPage = async () => {const page = await pdfDoc.getPage(pageNum);const viewport = page.getViewport({ scale: 1 });const canvas = canvasRef.current;const context = canvas.getContext('2d');canvas.height = viewport.height;canvas.width = viewport.width;await page.render({canvasContext: context,viewport: viewport}).promise;};renderPage();}, [pageNum, pdfDoc]);return <canvas ref={canvasRef} />;
};export default PdfViewer;

在這個示例中,我們創建了一個名為 PdfViewer 的 React 組件,它接受一個名為 pdfUrl 的 prop,該 prop 指定要加載的 PDF 文件的 URL。在 PdfViewer 組件內部,我們使用 useState 鉤子來存儲 PDF 文檔,并使用 useEffect 鉤子來異步加載 PDF 文件。一旦 PDF 文檔加載完成,我們遍歷文檔的每一頁,并為每一頁創建一個 PdfPage 組件來呈現。

示例演示

在 React 應用中顯示 PDF 文件

我們首先將展示如何在 React 應用中使用上述 PdfViewer 組件來顯示一個簡單的 PDF 文件。

import React from 'react';
import PdfViewer from './PdfViewer';const App = () => {const pdfUrl = 'example.pdf';return (<div><h1>PDF.js with React 示例</h1><PdfViewer pdfUrl={pdfUrl} /></div>);
};export default App;

其他功能

除了簡單地顯示 PDF 文件之外,您可以根據需求添加搜索、縮放、旋轉、注釋等功能。在 React 應用中,您可以輕松地將這些功能集成到 PdfViewer 組件中,并使其更加強大和靈活。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16564.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16564.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于集成經驗模態分解的心電信號降噪和基于希爾伯特變換的R峰檢測(MATLAB R2018)

近年來&#xff0c;心臟病已成為危害人類健康最常見的疾病。為了有效預防心臟疾病的發生&#xff0c;往往需要更加準確地采集與診斷心電信號&#xff0c;以便于更好地反映心臟情況。心電信號作為人體生理信號&#xff0c;對于識別心臟異常和心臟疾病具有重要的參考價值。心電信…

ubuntu如何安裝gitlab runner

一、什么是GitLab Runner GitLab Runner 是 GitLab 提供的一個開源工具,用于在構建、測試和部署過程中執行作業。它是 GitLab 持續集成和持續部署(CI/CD)工作流的核心組件之一。 GitLab Runner 有以下主要功能: 作業執行:GitLab Runner 會接收來自 GitLab 的作業請求,并在指定…

ROS基礎學習-ROS通信機制研究

研究ROS通信機制 研究ROS通信機制 0.前言1.話題通信1.1 理論模型1.2 話題通訊的基本操作1.2.1 C++1.2.2 Python0.前言 機器人是一種高度復雜的系統性實現,在機器人上可能集成各種傳感器(雷達、攝像頭、GPS…)以及運動控制實現,為了解耦合,在ROS中每一個功能點都是一個單獨的…

從File類開始,學習Java文件操作

哈嘍&#xff0c;各位小伙伴們&#xff0c;你們好呀&#xff0c;我是喵手。運營社區&#xff1a;C站/掘金/騰訊云&#xff1b;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相學習&#xff0c;一…

windows安裝SQL Server

1、下載 下載網頁&#xff1a;SQL Server 下載 | Microsoft 2022版下載地址&#xff1a;https://go.microsoft.com/fwlink/p/?linkid2215158&clcid0x404&culturezh-tw&countrytw 下載結果&#xff1a;SQL2022-SSEI-Dev.exe 打開選第三個&#xff0c;下載介質&…

自定義Linux命令,顯示docker鏡像、容器信息

1、修改環境變量&#xff08;僅對當前用戶有效&#xff09; vim ~/.bashrc2、給命令取別名 alias dpsdocker ps --format "table{{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" alias disdocker images#保存并退出 :wq3、讓配置重新生效 source ~/.bashrc4、測試&…

ChatGPT技術演進簡介

chatGPT&#xff08;chat generative pre-train transformer&#xff0c; 可以對話的預訓練trasformer模型&#xff09;&#xff0c;討論點&#xff1a; 1、chatGPT為什么突然火了 2、GPT 1.0、2.0、3.0、3.5 、4和4o區別和特性&#xff0c;在不同應用場景中如何選對模型 3、未…

基于ESP8266的無線通信系統設計

本文介紹了一種基于ESP8266的無線通信系統設計方案。ESP8266是一款功能強大且成本低廉的WiFi模塊&#xff0c;非常適合用于構建無線通信系統。本設計主要圍繞ESP8266模塊的功能特點&#xff0c;闡述了系統的硬件組成、軟件設計以及實際應用示例。 關鍵詞&#xff1a;ESP8266&a…

【docker】倉庫harbor的部署

harbor介紹 Harbor 是一個用于存儲和管理 Docker 鏡像的開源倉庫。它提供了一系列的功能&#xff0c;比如用戶管理、訪問控制、鏡像管理、日志審計和安全掃描等。Harbor 可以作為私有倉庫來使用&#xff0c;也可以與公有倉庫&#xff08;如 Docker Hub&#xff09;集成使用。 …

python數據分析——apply 1

參考資料&#xff1a;活用pandas庫 apply是指把函數同時作用于DataFrame的每一行或每一列。類似于編寫一些跨每行或每列的for循環&#xff0c;并同時調用apply函數。 1、函數 函數是對python代碼進行分組和復用的一種方法。如果某段代碼會被多次使用&#xff0c;并且使用時是需…

JS Lab

如何用 JavaScript 在瀏覽器中彈窗如何在 JavaScript 中制作鼠標滑過按鈕改變背景顏色如何在 JS 中點擊按鈕使數字增加如何在 JS 中循環打印多少次 HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title…

優化FPGA SelectIO接口VREF生成電路

引言&#xff1a;FPGA設計中使用了各種PCB SelectIO?接口VREF生成電路。有時即使在以前的設計中已經成功的在電路板上設計了VREF生成電路&#xff0c;也會在VREF引腳上發現大量噪聲&#xff08;200–400mV&#xff09;。大量VREF噪聲的存在可能導致高性能SelectIO接口&#xf…

瑞昱半導體AMB82 MINI(RTL8735B)Arduino 方法介紹

介紹瑞昱半導體&#xff08;Realtek &#xff09;AMB82-Mini 物聯網 AI開發板 Ameba是一個易于編程的平臺&#xff0c;用于開發各種物聯網應用程序。AMB82 MINI配備了各種外設接口&#xff0c;包括WiFi、BLE、GPIO INT、I2C、UART、SPI、PWM、ADC。通過這些接口&#xff0c;AM…

找出只出現一次的數字

輸入一些數字&#xff0c;每個數字以逗號分隔&#xff0c;其中有一個數字出現1次&#xff0c;其余數字均會出現2次。請找出那個只出現一次的數字! 提示&#xff1a;使用字典的方式實現 # 輸入一些數字&#xff0c;每個數字以逗號分隔 input_nums input("請輸入一些數字…

從0開始學統計-秩和檢驗

1.什么是秩和檢驗&#xff1f; 秩和檢驗&#xff0c;也稱為Wilcoxon 秩和檢驗&#xff0c;是一種非參數統計檢驗方法&#xff0c;用于比較兩個獨立樣本的中位數是否有顯著差異。它不要求數據滿足正態分布假設&#xff0c;因此適用于小樣本或者數據不滿足正態分布假設的情況。 …

51單片機-實機演示(單個數碼管)

仿真單個數碼管鏈接&#xff1a;http://t.csdnimg.cn/BLMut 一。插線 注意P00連接到A 測試代碼為 #include <reg52.h> //此文件中定義了單片機的一些特殊功能寄存器// sbit KEY2 P3^2; // 獨立按鍵2void main() {P0 0x00;while (1) {}…

Spring AOP實現Mapper層查詢返回重新賦值

需求&#xff1a; 針對查詢返回的數據&#xff0c;在數據庫層處理可能會影響到性能&#xff0c;在考慮性能及維護方便的情況下&#xff0c;采用AOP實現 1&#xff0c;自定義注解 import java.lang.annotation.*;/*** 針對 mapper層返回值 按照一定規則進行特殊處理后返回*/ Ta…

Vue學習JSON.parse()與JSON.stringify()對象與字符串互轉

Vue學習JSON.parse(&#xff09;與JSON.stringify(&#xff09;對象與字符串互轉 一、前言1、代碼 一、前言 JSON.parse() 和 JSON.stringify() 是 JavaScript 中用于處理 JSON 數據的兩個方法。 JSON.parse() 方法將一個 JSON 字符串解析為對應的 JavaScript 對象或數組。例…

kaggle競賽實戰3

接前文&#xff0c;本文主要做以下幾件事&#xff1a; 1、把前面處理完的幾個表拼成一個大表 2、做特征衍生&#xff08;把離散特征和連續特征兩兩組合得出&#xff09; # In[89]: #開始拼接表 transaction pd.concat([new_transaction, history_transaction], axis0, ignor…

JAVA實現圖書管理系統(初階)

一.抽象出對象: 1.要有書架&#xff0c;圖書&#xff0c;用戶&#xff08;包括普通用戶&#xff0c;管理員用戶&#xff09;。根據這些我們可以建立幾個包&#xff0c;來把繁雜的代碼分開&#xff0c;再通過一個類來把這些&#xff0c;對象整合起來實現系統。說到整合&#xf…