在反应网站中渲染多页面文档

问题描述 投票:0回答:1

我正在尝试在 React 中渲染多页 pdf 文档。 pdf 文件位于 src/assets 中。 jsx 文件位于名为 Hero.jsx 的 src 文件夹中,用于使用 css 设置样式。 pdf 文件应完全垂直呈现。 我尝试使用react-pdf,但似乎有些东西搞砸了并且没有渲染。 如果有人有一个脚本,我将非常感激。 该网站到目前为止仅适用于客户端。

import React, { useState } from 'react';
import { Worker } from '@react-pdf-viewer/core'; 
import { Viewer } from '@react-pdf-viewer/core'; 
import './Hero.css';
import myImage from './assets/profilepicture.png';
import myPDF from './assets/example.pdf';

const Hero = () => {
    
    
    return (
        <div className='hero1'>

                <div className='introduction'>
                    <div className='intr1'>
                        Üdvözlünk a MathPlus világában!
                    </div>
                    <div className='intr2'>
                        A MathPlus célja, hogy a matematikát és a kapcsolódó tudományterületeket mindenki számára elérhetővé és érthetővé tegye. Legyen szó érettségi felkészülésről, egyetemi vizsgákról vagy a data science világába való elmélyülésről, nálunk megtalálod azokat az online anyagokat, amelyekkel magabiztosan vághatsz neki a kihívásoknak.
                    </div>
                    <div className='intr2'>
                    Modern és felhasználóbarát platformunkon lépésről lépésre vezetünk végig a szükséges tananyagokon, hogy a lehető legjobban felkészülhess. Tanulj a saját tempódban, bárhol és bármikor! Nálunk nem csak megérted a matekot, de meg is szereted.
                    </div>
                </div>
                <div className='details'>
                    <div className='intr1'>
                        Kurzusok
                    </div>
                    <div className='intr2'>
                        A MathPlus küldetése, hogy a matematika és a kapcsolódó tudományterületek tanulását mindenki számára elérhetővé, érthetővé és élvezetessé tegye. Akár középiskolai érettségire készülsz, egyetemi vizsgákra tanulsz, vagy a data science területén szeretnél fejlődni, platformunkon olyan online kurzusokat találsz, amelyek támogatnak céljaid elérésében.
                    </div>
                    <div className='details-container'>
                        <div className='click-container'>
                            <h1 className='dch1'>
                                Középiskola
                            </h1>
                            <div className='button-group'>
                                <button className="school-button">Közép Matematika Érettségi</button>
                                <button className="school-button">Emelt Matematika Érettségi</button>
                                <button className="school-button">Közép Informatika Érettségi</button>
                            </div>
                        </div>
                        <div className='dchs'></div>
                        <div className='click-container'>
                            <h1 className='dch1'>
                                Egyetem
                            </h1>
                            <div className='button-group'>
                                <button className="school-button">Analízis</button>
                                <button className="school-button">Valószínűség számítás</button>
                                <button className="school-button">Lineáris Algebra</button>
                                <button className="school-button">Statisztika</button>
                                <button className="school-button">Ökonometria</button>

                            </div>
                        </div>
                        <div className='dchs'></div>
                        <div className='click-container'>
                            <h1 className='dch1'>
                                Programozás
                            </h1>
                            <div className='button-group'>
                                <button className="school-button">Bevezetés</button>
                                <button className="school-button">Machine Learning</button>
                                <button className="school-button">AI</button>
                            </div>
                        </div>
                    </div>
                </div>
                <div className='about'>
                    <div className='intr1'>
                        Bemutatkozás
                    </div>
                    <div className='about2'>
                        <div>
                            <img src={myImage} className='profile-picture'/>
                        </div>
                        <div className='intr2'>
                            A nevem Horváth Máté, a MathPlus alapítója. Tanulmányaim során a Corvinus Egyetemen sok olyan emberrel találkoztam, akik nehezen vették az akadályokat akár egyetemi tárgyaknál vagy érettséginél. Ebből az okból indítottam el ezt az oldalt, hogy a tanulók, akik el akarják érni a céljaikat tudjanak is tenni érte, ráadásul könnyebben. Az oldal anyagai az elvárásokhoz igazítva lettek összeállítva, ezzel is növelve a felkészülés hatékonyságát. Minden kurzus tartalmaz egy ingyenes demó verziót, mely egy összefoglalója a kurzus anyagának és stílusának. Kifejezetten ajánlom a demo verzió használatát az előfizetés megkezdése előtt. Sikeres felkészülést!
                        </div>
                    </div>
                </div>
                <div style={{ height: '600px' }}>
                    <Worker workerUrl={`https://unpkg.com/[email protected]/build/pdf.worker.min.js`}>
                        <Viewer fileUrl="/assets/example.pdf" />
                    </Worker>
                </div>
        </div>
    );
};

export default Hero
reactjs pdf web
1个回答
0
投票

我希望这能回答您的问题。请随意发表评论。 在 React 组件中渲染多个 PDF 文件可以使用 React-pdf 等库或直接使用 PDF.js 来完成。

  1. 安装react-pdf npm install @react-pdf/renderer 或 yarn add @react-pdf/renderer

  2. 创建组件来渲染多个 PDF

  3. 调整页数 在下面的示例中,Array.from(new Array(2)) 行假定每个 PDF 有 2 页。您可能希望动态确定每个 PDF 的页数。不幸的是,react-pdf 没有提供一种简单的方法来同步获取总页数,因此如果需要,您可能需要单独加载 PDF 来计算其页数。

或者你可以使用react-router-dom制作多页面SPA

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

// Import the worker script for PDF.js  
pdfjs.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;  

const MultiplePDFs = ({ pdfFiles }) => {  
  return (  
    <div>  
      {pdfFiles.map((file, index) => (  
        <div key={index} style={{ marginBottom: '20px' }}>  
          <h3>Document {index + 1}</h3>  
          <Document file={file}>  
            {Array.from(new Array(2)).map((_, pageIndex) => ( // Adjust number of pages if known  
              <Page key={pageIndex} pageNumber={pageIndex + 1} />  
            ))}  
          </Document>  
        </div>  
      ))}  
    </div>  
  );  
};  





// Sample usage  
const App = () => {  
  const pdfFiles = [  
    'path/to/file1.pdf',  
    'path/to/file2.pdf',  
    'path/to/file3.pdf',  
  ];  

  return (  
    <div>  
      <h1>Multiple PDF Renderer</h1>  
      <MultiplePDFs pdfFiles={pdfFiles} />  
    </div>  
  );  
};  

export default App;

© www.soinside.com 2019 - 2024. All rights reserved.