modules/autoprint.js

/* global jsPDF */
/** @license
 * jsPDF Autoprint Plugin
 *
 * Licensed under the MIT License.
 * http://opensource.org/licenses/mit-license
 */

/**
* @name autoprint
* @module
*/
(function (jsPDFAPI) {
  'use strict';

  /**
  * Makes the PDF automatically open the print-Dialog when opened in a PDF-viewer.
  *
  * @name autoPrint
  * @function
  * @param {Object} options (optional) Set the attribute variant to 'non-conform' (default) or 'javascript' to activate different methods of automatic printing when opening in a PDF-viewer .
  * @returns {jsPDF}
  * @example
  * var doc = new jsPDF();
  * doc.text(10, 10, 'This is a test');
  * doc.autoPrint({variant: 'non-conform'});
  * doc.save('autoprint.pdf');
  */
  jsPDFAPI.autoPrint = function (options) {
    'use strict';
    var refAutoPrintTag;
    options = options || {};
    options.variant = options.variant || 'non-conform';

    switch (options.variant) {
      case 'javascript':
        //https://github.com/Rob--W/pdf.js/commit/c676ecb5a0f54677b9f3340c3ef2cf42225453bb
        this.addJS('print({});');
        break;
      case 'non-conform':
      default:
        this.internal.events.subscribe('postPutResources', function () {
          refAutoPrintTag = this.internal.newObject();
          this.internal.out("<<");
          this.internal.out("/S /Named");
          this.internal.out("/Type /Action");
          this.internal.out("/N /Print");
          this.internal.out(">>");
          this.internal.out("endobj");
        });

        this.internal.events.subscribe("putCatalog", function () {
          this.internal.out("/OpenAction " + refAutoPrintTag + " 0 R");
        });
        break;
    }
    return this;
  };
})(jsPDF.API);