Skip to content

Commit 75524ce

Browse files
committed
package changed for pdf view
1 parent aa2f07e commit 75524ce

File tree

3 files changed

+429
-478
lines changed

3 files changed

+429
-478
lines changed

components/ui/pdfViewer.tsx

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,57 @@
1+
// components/ui/pdfViewer.tsx
12
"use client";
2-
import { useState, useEffect, useCallback } from "react";
3-
import { Viewer, Worker } from "@react-pdf-viewer/core";
4-
import "@react-pdf-viewer/core/lib/styles/index.css";
5-
import { defaultLayoutPlugin } from "@react-pdf-viewer/default-layout";
6-
import "@react-pdf-viewer/default-layout/lib/styles/index.css";
3+
import { useState } from 'react';
4+
import { Document, Page, pdfjs } from 'react-pdf';
5+
import 'react-pdf/dist/esm/Page/AnnotationLayer.css';
6+
import 'react-pdf/dist/esm/Page/TextLayer.css';
77

8-
const PdfViewer = ({ url }: { url: string }) => {
9-
const defaultLayoutPluginInstance = defaultLayoutPlugin();
10-
11-
const [scale, setScale] = useState(1.3);
12-
13-
const calculateScale = useCallback(() => {
14-
const width = window.innerWidth;
15-
return width < 768 ? 0.65 : 1.3;
16-
}, []);
8+
pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.js`;
179

18-
useEffect(() => {
19-
const handleResize = () => {
20-
setScale(calculateScale());
21-
};
22-
23-
setScale(calculateScale());
24-
window.addEventListener("resize", handleResize);
10+
const PdfViewer = ({ url }: { url: string }) => {
11+
const [numPages, setNumPages] = useState<number>();
12+
const [pageNumber, setPageNumber] = useState(1);
2513

26-
return () => window.removeEventListener("resize", handleResize);
27-
}, [calculateScale]);
14+
function onDocumentLoadSuccess({ numPages }: { numPages: number }) {
15+
setNumPages(numPages);
16+
}
2817

2918
return (
30-
<div className="h-screen w-screen">
31-
<Worker workerUrl="https://unpkg.com/[email protected]/build/pdf.worker.min.js">
32-
<Viewer
33-
fileUrl={url}
34-
initialPage={0}
35-
enableSmoothScroll
36-
defaultScale={scale}
37-
theme={"dark"}
38-
plugins={[defaultLayoutPluginInstance]}
19+
<div className="h-screen w-screen overflow-auto flex flex-col items-center">
20+
<Document
21+
file={url}
22+
onLoadSuccess={onDocumentLoadSuccess}
23+
className="max-w-full"
24+
>
25+
<Page
26+
pageNumber={pageNumber}
27+
renderTextLayer={false}
28+
renderAnnotationLayer={false}
29+
width={window.innerWidth > 768 ? 800 : window.innerWidth * 0.9}
3930
/>
40-
</Worker>
31+
</Document>
32+
<div className="text-center mt-4">
33+
<p>Page {pageNumber} of {numPages}</p>
34+
{numPages && (
35+
<div className="flex justify-center space-x-4 mt-2">
36+
<button
37+
onClick={() => setPageNumber(prev => Math.max(1, prev - 1))}
38+
disabled={pageNumber <= 1}
39+
className="px-4 py-2 bg-blue-500 text-white disabled:opacity-50"
40+
>
41+
Previous
42+
</button>
43+
<button
44+
onClick={() => setPageNumber(prev => Math.min(numPages, prev + 1))}
45+
disabled={pageNumber >= (numPages || 0)}
46+
className="px-4 py-2 bg-blue-500 text-white disabled:opacity-50"
47+
>
48+
Next
49+
</button>
50+
</div>
51+
)}
52+
</div>
4153
</div>
4254
);
4355
};
4456

45-
export default PdfViewer;
57+
export default PdfViewer;

package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"scripts": {
1919
"dev": "next dev",
2020
"postbuild": "next-sitemap",
21-
"postinstall": "pnpm rebuild canvas",
21+
"postinstall": "pnpm rebuild",
2222
"build": "next build",
2323
"start": "next start",
2424
"lint": "next lint"
@@ -33,24 +33,22 @@
3333
"@radix-ui/react-slot": "^1.1.1",
3434
"@radix-ui/react-toast": "^1.2.4",
3535
"@radix-ui/react-tooltip": "^1.1.6",
36-
"@react-pdf-viewer/core": "^3.12.0",
37-
"@react-pdf-viewer/default-layout": "^3.12.0",
3836
"@react-three/drei": "^9.120.6",
3937
"@react-three/fiber": "^8.17.10",
4038
"@tabler/icons-react": "^3.28.1",
4139
"@vercel/analytics": "^1.4.1",
4240
"@vercel/speed-insights": "^1.1.0",
4341
"autoprefixer": "^10.4.20",
44-
"canvas": "^3.1.0",
4542
"class-variance-authority": "^0.7.1",
43+
"react-pdf": "^7.7.1",
44+
"pdfjs-dist": "^4.10.38",
4645
"clsx": "^2.1.1",
4746
"framer-motion": "^11.16.1",
4847
"mini-svg-data-uri": "^1.4.4",
4948
"next": "14.2.15",
5049
"next-sitemap": "^4.2.3",
5150
"next-themes": "^0.3.0",
5251
"nodemailer": "^6.9.16",
53-
"pdfjs-dist": "^4.10.38",
5452
"react": "^18.3.1",
5553
"react-dom": "^18.3.1",
5654
"recharts": "^2.15.0",

0 commit comments

Comments
 (0)