Use DsPdfViewer to view PDF in a React App

import * as React from 'react'; import * as ReactDOM from 'react-dom'; import './app.css'; import { DsPdfViewer } from '@mescius/dspdfviewer'; import '/document-solutions/javascript-pdf-viewer/demos/resource/js/init.js'; class App extends React.Component { // Store the viewer instance _viewer = null; // Create ref for the viewer DOM element viewerRef = React.createRef(); componentDidMount() { // Get the DOM node via ref instead of findDOMNode const viewerContainer = this.viewerRef.current; if (!viewerContainer) { console.error('Viewer container element not found'); return; } try { // Initialize the PDF viewer const viewer = new DsPdfViewer(viewerContainer, { workerSrc: "/document-solutions/javascript-pdf-viewer/demos/product-bundles/build/dspdfviewer.worker.js" }); viewer.addDefaultPanels(); viewer.open("/document-solutions/javascript-pdf-viewer/demos/product-bundles/assets/pdf/helloworld.pdf"); this._viewer = viewer; } catch (error) { console.error('Failed to initialize PDF viewer:', error); } } componentWillUnmount() { // Clean up the viewer instance if (this._viewer) { this._viewer.dispose(); this._viewer = null; } } render() { // Attach the ref to the viewer container return <div id="viewer" ref={this.viewerRef}></div>; } } // Root element where the app will be mounted const appContainer = document.getElementById('app'); // Use modern createRoot API if available (React 18+), // otherwise fall back to legacy render (React 17) if (typeof ReactDOM.createRoot === 'function') { const root = ReactDOM.createRoot(appContainer); root.render(<App />); } else { ReactDOM.render(<App />, appContainer); }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>React Example</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- SystemJS --> <script src="node_modules/systemjs/dist/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import('./src/app'); </script> </head> <body> <div id="app"></div> </body> </html>
#app { height: 100%; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true, react: true }, meta: { '*.css': { loader: 'css' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { '@mescius/dspdfviewer': 'npm:@mescius/dspdfviewer/dspdfviewer.js', 'react': 'npm:react/umd/react.production.min.js', 'react-dom': 'npm:react-dom/umd/react-dom.production.min.js', 'css': 'npm:systemjs-plugin-css/css.js', 'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js', 'systemjs-babel-build':'npm:systemjs-plugin-babel/systemjs-babel-browser.js' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'jsx' }, "node_modules": { defaultExtension: 'js' }, } }); })(this);