How to build a React.js file viewer: PDF, image, MS Office
This article was first published in April 2023 and was updated in August 2024.
In this blog post, learn how to build a React file viewer using the Nutrient Web SDK. You’ll open and view PDF, image, and Office files directly in your web browser using client-side processing (no server required).
You can check out the demo to see it in action.
Opening and rendering multiple file formats in the browser
Nutrient Web SDK brings support for PDF, image, and Office formats to your application, without you or your users needing any MS Office software, MS Office licenses, or third-party open source software. The technology works by converting an image (JPG, PNG, and TIFF) or Office document (Word, Excel, and PowerPoint) to PDF directly in the browser. The resulting PDF is then rendered in our JavaScript viewer.
Unlocking more capabilities
By converting an image or Office document to PDF using client-side JavaScript, you have the option to support a rich array of additional document functionality, such as:
-
Text editing — Edit text directly in the displayed Office document.
-
Page manipulation — Organize documents by adding, removing, or rearranging pages.
-
Annotations — Boost collaboration by adding text highlights, comments, or stamps.
-
Adding signatures — Draw, type, or upload a signature directly to an Office document.
Requirements to get started
To get started, you’ll need:
-
A package manager compatible with npm. This post contains usage examples for Yarn and the npm client (installed with Node.js by default).
Setting up a new React project with Vite
-
To get started, create a new React project using Vite:
# Using Yarn yarn create vite pspdfkit-react-example --template react # Using npm npm create vite@latest pspdfkit-react-example -- --template react
-
Change to the created project directory:
cd pspdfkit-react-example
Adding Nutrient to your project
-
Add the Nutrient dependency:
yarn add pspdfkit
npm install --save pspdfkit
-
Copy the Nutrient Web SDK library assets to the
public
directory:
cp -R ./node_modules/pspdfkit/dist/pspdfkit-lib public/pspdfkit-lib
The code above will copy the pspdfkit-lib
directory from within node_modules/
into the public/
directory to make it available to the SDK at runtime.
-
Make sure your
public
directory contains apspdfkit-lib
directory with the Nutrient library assets.
Displaying a document
Nutrient supports the following file formats:
-
PDF, PDF/A (1, 2, 3)
-
DOCX, DOC, DOTX, DOCM
-
XLSX, XLS, XLSM
-
PPTX, PPT, PPTM
-
TIFF, TIF (including multipage)
-
PNG, JPEG, JPG
-
Add your document to the public directory. You can use our demo PowerPoint document as an example.
-
Create a new component to handle PDF rendering. In the
src/components/
directory, create a file namedPdfViewerComponent.jsx
with the following content:
import { useEffect, useRef } from 'react'; export default function PdfViewerComponent(props) { const containerRef = useRef(null); useEffect(() => { const container = containerRef.current; let PSPDFKit, instance; (async function () { PSPDFKit = await import('pspdfkit'); PSPDFKit.unload(container); instance = await PSPDFKit.load({ container, document: props.document, baseUrl: `${window.location.protocol}//${ window.location.host }/${import.meta.env.BASE_URL}`, }); })(); return () => PSPDFKit && PSPDFKit.unload(container); }, []); return ( <div ref={containerRef} style={{ width: '100%', height: '100vh' }} /> ); }
-
Integrate this component into your app by updating the
src/App.jsx
file:
import PdfViewerComponent from './components/PdfViewerComponent'; function App() { return ( <div className="App" style={{ width: '100vw' }}> <div className="PDF-viewer"> <PdfViewerComponent document={'slides.pptx'} /> </div> </div> ); } export default App;
-
Your project structure will now look like this:
pspdfkit-react-example/ ├── public/ │ ├── pspdfkit-lib/ │ └── slides.pptx ├── src/ │ ├── components/ │ | └── PdfViewerComponent.jsx | └── App.jsx ├── package.json └── yarn.lock
-
Start the app and run it in your default browser:
# Using Yarn yarn dev # Using npm npm run dev
A note about fonts
In client-side web applications for Microsoft Office-to-PDF conversion, Nutrient addresses font licensing constraints through font substitutions, typically replacing unavailable fonts with their equivalents — like Arial with Noto. For precise font matching, you can provide your own fonts, embed them into source files, or designate paths to your .ttf
fonts for custom solutions.
Adding even more capabilities
Once you’ve deployed your viewer, you can start customizing it to meet your specific requirements or easily add more capabilities. To help you get started, here are some of our most popular React guides:
- Instant synchronization
- Document assembly
- Page manipulation
- Editor
- Forms
- Signatures
- Redaction
- Document security
Conclusion
In this blog post, you learned how to create a React file viewer using Nutrient Web SDK. It enables opening and viewing PDF, image, and Office files directly in the browser using client-side processing. No server is required.
If you’re looking for a way to render your documents in your web application, then Nutrient Web SDK is a great option. It’s a powerful and flexible library that can help you provide your users with a seamless and enjoyable experience.
To get started, you can either:
-
Start your free trial to test out the library and see how it works in your application.
-
Launch our demo to see the viewer in action.
FAQ
Here are a few frequently asked questions about building a React.js file viewer.
How can I build a React.js file viewer for PDF, image, and Office files?
You can build a React.js file viewer by using the Nutrient Web SDK, which supports viewing PDFs, images, and Office files directly in the browser without requiring server-side processing.
What file formats does the Nutrient Web SDK viewer support?
Nutrient Web SDK supports PDF, PDF/A, DOCX, DOC, DOTX, DOCM, XLSX, XLS, XLSM, PPTX, PPT, PPTM, TIFF, PNG, JPEG, and JPG formats.
How can I set up a React project to use Nutrient Web SDK?
Create a new React app using Vite. Then add the Nutrient dependency via npm
or yarn
. Finally, copy the Nutrient library assets to your project’s public directory.
Can I manipulate documents within the viewer?
Yes, you can edit text, manipulate pages, add annotations, and include signatures in the documents displayed within the viewer.
Is it possible to customize the viewer’s capabilities?
Yes, you can customize the viewer to meet specific requirements by adding features like Instant synchronization, document assembly, page manipulation, forms, signatures, redaction, and document security.
Do I need a server to use Nutrient Web SDK in a React app?
No, Nutrient Web SDK enables client-side processing, so you don’t need a server to render documents in your React app.
What should I do if a font is missing when converting Office documents?
Nutrient substitutes missing fonts with similar ones, like replacing Arial with Noto. For exact font matching, you can provide custom fonts by embedding them or setting paths to .ttf
files.