当前位置:首页 > React

react实现df预览

2026-01-27 00:22:30React

使用 react-pdf 预览 PDF 文件

安装 react-pdf 库:

npm install react-pdf

引入并使用 Document 和 Page 组件:

import { Document, Page } from 'react-pdf';

function PDFViewer() {
  return (
    <Document file="/path/to/document.pdf">
      <Page pageNumber={1} />
    </Document>
  );
}

使用 iframe 嵌入 PDF 预览

直接通过 iframe 嵌入 PDF 文件:

function PDFViewer() {
  return (
    <iframe 
      src="/path/to/document.pdf"
      width="100%"
      height="500px"
    />
  );
}

使用 Google Docs 查看器预览 PDF

通过 Google Docs 查看器服务嵌入 PDF:

function PDFViewer() {
  return (
    <iframe
      src={`https://docs.google.com/viewer?url=${encodeURIComponent('http://example.com/document.pdf')}&embedded=true`}
      width="100%"
      height="500px"
    />
  );
}

使用 PDF.js 实现高级预览

安装 pdfjs-dist:

npm install pdfjs-dist

实现自定义 PDF 渲染:

import * as pdfjsLib from 'pdfjs-dist';

async function renderPDF(url, canvasElement) {
  const pdf = await pdfjsLib.getDocument(url).promise;
  const page = await pdf.getPage(1);
  const viewport = page.getViewport({ scale: 1.0 });

  canvasElement.width = viewport.width;
  canvasElement.height = viewport.height;

  await page.render({
    canvasContext: canvasElement.getContext('2d'),
    viewport: viewport
  }).promise;
}

处理大型 PDF 文件的分页加载

使用 react-pdf 实现分页控制:

import { useState } from 'react';
import { Document, Page } from 'react-pdf';

function PDFViewer() {
  const [numPages, setNumPages] = useState(null);
  const [pageNumber, setPageNumber] = useState(1);

  function onDocumentLoadSuccess({ numPages }) {
    setNumPages(numPages);
  }

  return (
    <div>
      <Document file="/path/to/document.pdf" onLoadSuccess={onDocumentLoadSuccess}>
        <Page pageNumber={pageNumber} />
      </Document>
      <p>
        Page {pageNumber} of {numPages}
      </p>
      <button onClick={() => setPageNumber(prev => prev - 1)} disabled={pageNumber <= 1}>
        Previous
      </button>
      <button onClick={() => setPageNumber(prev => prev + 1)} disabled={pageNumber >= numPages}>
        Next
      </button>
    </div>
  );
}

自定义 PDF 查看器样式

为 PDF 查看器添加自定义样式:

react实现df预览

import { Document, Page } from 'react-pdf';
import 'react-pdf/dist/esm/Page/AnnotationLayer.css';
import 'react-pdf/dist/esm/Page/TextLayer.css';

function StyledPDFViewer() {
  return (
    <div style={{ border: '1px solid #ccc', padding: '10px' }}>
      <Document file="/path/to/document.pdf">
        <Page 
          pageNumber={1} 
          width={600}
          renderAnnotationLayer={false}
          renderTextLayer={false}
        />
      </Document>
    </div>
  );
}

标签: reactdf
分享给朋友:

相关文章

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…

react如何同步

react如何同步

React 同步状态管理方法 在 React 中实现同步状态管理,可以通过以下多种方式实现: 使用 useState 和 useEffect 钩子 通过 useState 定义状态,使用 useEf…

react如何安装

react如何安装

安装React的步骤 确保已安装Node.js(建议版本12或更高),可通过以下命令检查版本: node -v npm -v 使用Create React App快速搭建项目(推荐): npx c…

react如何循环

react如何循环

循环渲染列表 在React中循环渲染列表通常使用map方法,这是最常用的方式。通过map可以将数组中的每个元素转换为React元素并渲染到页面上。 const items = ['Apple', '…

react如何分

react如何分

React 分页实现方法 在 React 中实现分页功能可以通过多种方式完成,以下是几种常见的方法: 使用状态管理分页数据 在组件内部维护当前页码和每页数据量的状态,通过计算切片数据实现分页。…