Document Viewer Integration in JavaScript (With Node.js Package Manager)

You can use the HTML5 Document Viewer in JavaScript based on the server-side model. You should create two projects: a server (backend) project and a client (frontend) part that includes all the necessary styles, scripts, and HTML-templates.

Important

Perform the steps from one of the following topics to prepare a backend application:

This document describes how to create the client part, install the npm packages and create a bundle with Webpack:

  1. Install Node.js and npm if they do not exist on your machine.
  2. Open the console window and execute the following commands to install the Webpack CLI globally:

    npm install -g webpack

    npm install -g webpack-cli

  3. Create a new folder to store all the files related to the client-side functionality (for instance, name it ClientSide).

  4. Add the package.json configuration file to the created folder and list the following third-party packages the Web Document Viewer requires:

    {
        "name": "web-document-viewer",
        "version": "1.0.0",
        "dependencies": {
            "devexpress-reporting": "~18.1.5",
            "globalize": "^1.3.0",
            "cldrjs": "^0.5.0"
        },
        "devDependencies": {
            "webpack": "~4.10.1",
            "html-loader": "~0.5.4"
        }
    }
    

    Ensure that you correctly specify the packages' versions.

  5. Navigate to your folder, open the console and run the command below to install packages:

    npm install

    You can find all the libraries in the node_modules folder after installation is completed.

  6. Create a new webpack.config.js file and specify configuration settings as shown below. Define the index.js file as the bundle's entry point (this file is created later) and the bundle.js file as the output file.

    var path = require('path');
    var webpack = require('webpack');
    
    module.exports = {
        entry: './index.js',
        output: {
            filename: 'bundle.js'
        },
        resolve: {
            alias: {
                globalize$: path.resolve(__dirname, "node_modules/globalize/dist/globalize.js"),
                globalize: path.resolve(__dirname, "node_modules/globalize/dist/globalize"),
                cldr$: path.resolve(__dirname, "node_modules/cldrjs/dist/cldr.js"),
                cldr: path.resolve(__dirname, "node_modules/cldrjs/dist/cldr"),
            }
        },
        mode: "development",
        module: {
            rules: [
                {
                    test: /\.html$/,
                    loader: "html-loader" 
                },
                {
                    test: /\.css$/,
                    loader: "style-loader" 
                }
            ]
        }
    };
    
  7. Create a View file (the index.html file in this example) and specify this View's HTML template. At the body section, use the dxReportViewer binding with the viewerOptions parameter and link the bundle script file (bundle.js) specified at the previous step.

    <!DOCTYPE html>
    <html>
        <head>
             <!-- ... -->
        </head>
    
        <body>
            <div style="width:100%; height: 1000px" data-bind="dxReportViewer: viewerOptions"></div>
            <!-- Include the bundle script -->
            <script type="text/javascript" src="dist/bundle.js" charset="utf-8"></script>
        </body>
    </html>
    
  8. Add a new JavaScript file (index.js) to provide data to the View. Link the required modules, create the viewerOptions variable and activate the Knockout bindings.

    var $ = require('jquery');
    var ko = require('knockout');
    
    var documentViewerHtml = require('devexpress-reporting/dx-web-document-viewer').Html;
    var div = document.createElement("div");
    div.innerHTML = documentViewerHtml;
    document.body.appendChild(div);
    
    const 
        // Use this line if you use an ASP.NET MVC backend
        invokeAction = "/WebDocumentViewer/Invoke"
        // Uncomment this line if you use an ASP.NET Core backend
        //invokeAction = "DXXRDV"
    
        host = 'http://localhost:54114/', // URI of your backend project.
        reportUrl = ko.observable("Products");
        var viewModel = {
            viewerOptions: {
                reportUrl: reportUrl, // The URL of a report that is opened in the Document Viewer when the application starts.
                requestOptions: { // Options for processing requests from the Web Document Viewer.  
                    host: host, 
                    invokeAction: invokeAction // The URI path of the controller action that processes requests.
                },
            }
        };
    ko.applyBindings(viewModel);
    
  9. Create a new style.css file and link the required styles.

    @import url("node_modules/jquery-ui/themes/base/all.css");
    @import url("node_modules/devextreme/dist/css/dx.common.css");
    @import url("node_modules/devextreme/dist/css/dx.light.css");
    @import url("node_modules/devexpress-reporting/css/web-document-viewer-light.min.css");
    

    Link this file in the index.html file's head section.

    ...
    <head>
        <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    ...
    
  10. Run the following command in the console to create the bundle:

    webpack

  11. Host your client-side part on the web server.

    For instance, start the Internet Information Services (IIS) Manager, right-click the Sites item in the Connections section and select Add Website. In the invoked dialog, specify the site name, path to the folder with the client-side functionality, and the website's IP address.

    host-javascript-example-in-iis

  12. For the example to work correctly, you should first run a backend project in Visual Studio, and then, run a client part.

See Also