Home | History | Annotate | Download | only in pdf
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 'use strict';
      6 
      7 /**
      8  * Creates a new OpenPDFParamsParser. This parses the open pdf parameters
      9  * passed in the url to set initial viewport settings for opening the pdf.
     10  * @param {string} url to be parsed.
     11  */
     12 function OpenPDFParamsParser(url) {
     13   this.url_ = url;
     14   this.urlParams = {};
     15   this.parseOpenPDFParams_();
     16 }
     17 
     18 OpenPDFParamsParser.prototype = {
     19   /**
     20    * @private
     21    * Parse zoom parameter of open PDF parameters. If this
     22    * parameter is passed while opening PDF then PDF should be opened
     23    * at the specified zoom level.
     24    * @param {number} zoom value.
     25    */
     26   parseZoomParam_: function(paramValue) {
     27     var paramValueSplit = paramValue.split(',');
     28     if ((paramValueSplit.length != 1) && (paramValueSplit.length != 3))
     29       return;
     30 
     31     // User scale of 100 means zoom value of 100% i.e. zoom factor of 1.0.
     32     var zoomFactor = parseFloat(paramValueSplit[0]) / 100;
     33     if (isNaN(zoomFactor))
     34       return;
     35 
     36     // Handle #zoom=scale.
     37     if (paramValueSplit.length == 1) {
     38       this.urlParams['zoom'] = zoomFactor;
     39       return;
     40     }
     41 
     42     // Handle #zoom=scale,left,top.
     43     var position = {x: parseFloat(paramValueSplit[1]),
     44                     y: parseFloat(paramValueSplit[2])};
     45     this.urlParams['position'] = position;
     46     this.urlParams['zoom'] = zoomFactor;
     47   },
     48 
     49   /**
     50    * @private
     51    * Parse open PDF parameters. These parameters are mentioned in the url
     52    * and specify actions to be performed when opening pdf files.
     53    * See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/
     54    * pdfs/pdf_open_parameters.pdf for details.
     55    */
     56   parseOpenPDFParams_: function() {
     57     var originalUrl = this.url_;
     58     var paramIndex = originalUrl.search('#');
     59     if (paramIndex == -1)
     60       return;
     61 
     62     var paramTokens = originalUrl.substring(paramIndex + 1).split('&');
     63     var paramsDictionary = {};
     64     for (var i = 0; i < paramTokens.length; ++i) {
     65       var keyValueSplit = paramTokens[i].split('=');
     66       if (keyValueSplit.length != 2)
     67         continue;
     68       paramsDictionary[keyValueSplit[0]] = keyValueSplit[1];
     69     }
     70 
     71     if ('page' in paramsDictionary) {
     72       // |pageNumber| is 1-based, but goToPage() take a zero-based page number.
     73       var pageNumber = parseInt(paramsDictionary['page']);
     74       if (!isNaN(pageNumber))
     75         this.urlParams['page'] = pageNumber - 1;
     76     }
     77 
     78     if ('zoom' in paramsDictionary)
     79       this.parseZoomParam_(paramsDictionary['zoom']);
     80   }
     81 };
     82