当前位置:首页 > 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如何encode

react如何encode

React 中编码的实现方式 在 React 中,编码通常涉及对 URL、HTML 实体或特殊字符的处理。以下是几种常见的编码方法: 使用 encodeURIComponent 进行 URL 编码…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…

react如何创建项目

react如何创建项目

使用 Create React App 创建项目 Create React App (CRA) 是官方推荐的 React 项目脚手架工具,适合快速初始化一个现代化的 React 项目。 安装 C…

react如何获取光标

react如何获取光标

获取光标位置的方法 在React中获取光标位置通常涉及处理输入框或文本区域的onChange或onSelect事件。以下是几种常见的方法: 通过selectionStart和selectionEnd…

react如何引入图片

react如何引入图片

在React中引入图片的方法 使用import直接引入 将图片文件放在项目src目录下(如src/images),通过ES6的import语法引入: import logo from './…

react less如何配置

react less如何配置

在 React 项目中配置 Less 安装必要的依赖包,确保项目支持 Less 预处理样式。使用以下命令安装 less 和 less-loader: npm install less less-lo…