Overriding Dependency
@pdf-viewer/react@^1.0.0
requires pdfjs-dist
as a peer dependency with a default version of 4.7.76
. This means you do not need to manually install pdfjs-dist
unless you want to use a different version.
If your project relies on a specific version of pdfjs-dist
that differs from the default, you can override by adding an override in your package.json
.
Install pdfjs-dist
to Override
Here is how you can install package pdfjs-dist
with the latest version which is above 4.7.76
.
bun add pdfjs-dist
npm install pdfjs-dist --save
pnpm add pdfjs-dist
yarn add pdfjs-dist
Based on the example above, installing without specifying a version will install the latest version of
pdfjs-dist
. To specify a version, you can add a suffix withpdfjs-dist@version
(e.g.,npm install pdfjs-dist@4.10.38
).
Using React with Webpack
- Install package
copy-webpack-plugin
bun add copy-webpack-plugin --dev
npm install copy-webpack-plugin --save-dev
pnpm install copy-webpack-plugin -D
yarn add copy-webpack-plugin -D
- Add configurations to
webpack.config.js
const CopyPlugin = require('copy-webpack-plugin')
module.exports = { // ...config plugins: [ new CopyPlugin({ patterns: [ { from: 'node_modules/pdfjs-dist/legacy/build/pdf.worker.min.js', to: 'pdf.worker.min.js' } ] }) /// ...other plugins ]}
- Add
/pdf.worker.min.mjs
to theworkerUrl
prop in theRPConfig
component
import { RPConfig, RPProvider, RPDefaultLayout, RPPages } from '@pdf-viewer/react'import React from 'react'
export default function App() { return ( <div> <RPConfig workerUrl={'/pdf.worker.min.mjs'}> <RPProvider src="https://cdn.codewithmosh.com/image/upload/v1721763853/guides/web-roadmap.pdf"> <RPDefaultLayout> <RPPages /> </RPDefaultLayout> </RPProvider> </RPConfig> </div> )}
import { RPConfig, RPProvider, RPDefaultLayout, RPPages } from '@pdf-viewer/react'import React from 'react'
export default function App() { return ( <div> <RPConfig workerUrl={'/pdf.worker.min.mjs'}> <RPProvider src="https://cdn.codewithmosh.com/image/upload/v1721763853/guides/web-roadmap.pdf"> <RPDefaultLayout> <RPPages /> </RPDefaultLayout> </RPProvider> </RPConfig> </div> )}
Using React with Vite
- Add configurations to
vite.config.{js,ts}
import { defineConfig } from 'vite'
export default defineConfig({ // ...config optimizeDeps: { include: ['pdfjs-dist'] // ... }})
- Add
/pdf.worker.min.mjs
to theworkerUrl
prop in theRPConfig
component
import { RPConfig, RPTheme, RPProvider, RPDefaultLayout, RPPages } from '@pdf-viewer/react'import workerSrc from 'pdfjs-dist/build/pdf.worker.min.mjs?url'
function AppPdfViewer() { return ( <RPConfig workerUrl={workerSrc}> <RPProvider src="https://cdn.codewithmosh.com/image/upload/v1721763853/guides/web-roadmap.pdf"> <RPDefaultLayout> <RPPages /> </RPDefaultLayout> </RPProvider> </RPConfig> )}export default AppPdfViewer
import { RPConfig, RPTheme, RPProvider, RPDefaultLayout, RPPages } from '@pdf-viewer/react'import workerSrc from 'pdfjs-dist/build/pdf.worker.min.mjs?url'
function AppPdfViewer() { return ( <RPConfig workerUrl={workerSrc}> <RPProvider src="https://cdn.codewithmosh.com/image/upload/v1721763853/guides/web-roadmap.pdf"> <RPDefaultLayout> <RPPages /> </RPDefaultLayout> </RPProvider> </RPConfig> )}export default AppPdfViewer
Next.js
- Add configurations to
next.config.js
import type { NextConfig } from 'next'import { webpack } from 'next/dist/compiled/webpack/webpack'import path from 'path'
const nextConfig: NextConfig = { // Config options here webpack: (config) => { config.plugins.push( new webpack.NormalModuleReplacementPlugin( /^pdfjs-dist$/, (resource: Record<string, string>) => { resource.request = path.join(__dirname, './node_modules/pdfjs-dist/webpack') } ) ) return config }}export default nextConfig
- Add
/pdf.worker.min.mjs
to theworkerUrl
prop in theRPConfig
component
'use client'import { RPConfig, RPProvider, RPDefaultLayout, RPPages } from '@pdf-viewer/react'import workerSrc from 'pdfjs-dist/build/pdf.worker.min.mjs?url'
const AppPdfViewer = () => { return ( <RPConfig workerUrl={workerSrc}> <RPProvider src="https://cdn.codewithmosh.com/image/upload/v1721763853/guides/web-roadmap.pdf"> <RPDefaultLayout toolbarComponent={{ documentProperties: false }} > <RPPages /> </RPDefaultLayout> </RPProvider> </RPConfig> )}export default AppPdfViewer
'use client'import { RPConfig, RPProvider, RPDefaultLayout, RPPages } from '@pdf-viewer/react'import workerSrc from 'pdfjs-dist/build/pdf.worker.min.mjs?url'
const AppPdfViewer = () => { return ( <RPConfig workerUrl={workerSrc}> <RPProvider src="https://cdn.codewithmosh.com/image/upload/v1721763853/guides/web-roadmap.pdf"> <RPDefaultLayout toolbarComponent={{ documentProperties: false }} > <RPPages /> </RPDefaultLayout> </RPProvider> </RPConfig> )}export default AppPdfViewer
TypeScript
For TypeScript, you may get an error Cannot find module 'pdfjs-dist/build/pdf.worker.min.mjs?url' or its corresponding type declarations.
from import import workerSrc from 'pdfjs-dist/build/pdf.worker.min.mjs?url'
.
To resolve this issue, you can add file .d.ts
(e.g., global.d.ts
) with the content below to your project
declare module '*?url' { const content: string export default content}