katzer/cordova-plugin-printer

Cordova plugin to print HTML documents using AirPrint and Android Printing Framework.
Sebastián Katzer0.7.1-dev41
platforms: ios,android
$ cordova plugin add de.appplant.cordova.plugin.printer

master   v0.6   v0.5        EXAMPLE :point_right:

Cordova Print Plugin

Cordova plugin to print HTML documents using AirPrint and Google Cloud Print.

:bangbang: Choose the right branch for you! :bangbang:

The plugin provides multiple branches to support different printer types and android versions while AirPrint is supported with each one.

About Apple AirPrint

AirPrint is an Apple™ technology that helps you create full-quality printed output without the need to download or install drivers. AirPrint is built in to many printer models from most popular printer manufacturers. Just select an AirPrint printer on your local network to print from your favorite iOS or OS X app.
AirPrint printers are available for these devices when using the latest version of iOS available for them:

  • iPad (all models)
  • iPhone (3GS or later)
  • iPod touch (3rd generation or later)

About Google Cloud Print

Google™ Cloud Print is a new technology that connects your printers to the web. Using Google Cloud Print, you can make your home and work printers available to you and anyone you choose, from the applications you use every day. Google Cloud Print works on your phone, tablet, Chromebook, PC, and any other web-connected device you want to print from.

Supported Printers

Printing is only supported on AirPrint-enabled printers or Google Cloud Print-enabled printers. The following pages contain more information:

Plugin's Purpose

This Cordova plugin serves as a platform independent JavaScript bridge to call the underlying native SDKs.

Overview

  1. Introduction
  2. Supported Platforms
  3. Installation
  4. ChangeLog
  5. Using the plugin
  6. Examples
  7. Quirks

Supported Platforms

  • iOS (Print from iOS devices to AirPrint compatible printers)
    See Drawing and Printing Guide for iOS for detailed informations and screenshots.

  • Android (Print from Android devices to Google Cloud Print compatible printers)

Installation

The plugin can either be installed from git repository, from local file system through the Command-line Interface. Or cloud based through PhoneGap Build.

Local development environment

From master:

# ~~ from google-cloud-print branch ~~
cordova plugin add https://github.com/katzer/cordova-plugin-printer.git#google-cloud-print

from a local folder:

# ~~ local folder ~~
cordova plugin add de.appplant.cordova.plugin.printer --searchpath path/to/plugin

or to use the last stable version:

# ~~ stable version ~~
cordova plugin add de.appplant.cordova.plugin.printer@0.6.0

PhoneGap Build

Add the following xml to your config.xml to always use the latest version of this plugin:

<gap:plugin name="de.appplant.cordova.plugin.printer" version="0.6.0" />

More informations can be found here.

Removing the Plugin

Through the Command-line Interface:

cordova plugin rm de.appplant.cordova.plugin.printer

ChangeLog

Version 0.6.2 (not yet released)

  • [bugfix:] isAvailable did not check if a native Google Cloud Print App is available.
  • [bugfix:] iPad+iOS8 incompatibility (Thanks to zmagyar)
  • [enhancement:] Print-View positioning on iPad

Version 0.6.1 (25.09.2014)

  • [enhancement:] Use native Google Cloud Print App if available
  • [bugfix:] Keyboard input was ignored

Further informations

  • See CHANGELOG.md to get the full changelog for the plugin.

Using the plugin

The plugin creates the object cordova.plugins.printer with the following methods:

  1. printer.isAvailable
  2. printer.print

Plugin initialization

The plugin and its methods are not available before the deviceready event has been fired.

document.addEventListener('deviceready', function () {
    // cordova.plugins.printer is now available
}, false);

Find out if printing is available on the device

The device his printing capabilities can be reviewed through the printer.isAvailable interface. You can use this function to hide print functionality from users who will be unable to use it.
The method takes a callback function, passed to which is a boolean property. Optionally you can assign the scope in which the callback will be executed as a second parameter (default to window).

Note: Printing is only available on devices capable of multi-tasking (iPhone 3GS, iPhone 4 etc.) running iOS 4.2 or later or when connected with the Internet (Android).

/**
 * Checks if the printer service is avaible (iOS)
 * or if connected to the Internet (Android).
 *
 * @param {Function} callback
 *      A callback function
 * @param {Object?} scope
 *      The scope of the callback (default: window)
 *
 * @return {Boolean}
 */
cordova.plugins.printer.isAvailable(
    function (isAvailable) {
        alert(isAvailable ? 'Service is available' : 'Service NOT available');
    }
);

Send content to a printer

Content can be send to a printer through the printer.print interface.
The method takes a string or a HTML DOM node. Optional parameters allows to specify the name of the document and a callback. The callback will be called if the user cancels or completes the print job.

Available Options

Name Description Type Support
name The name of the print job and of the document String all
printerId An identifier of the printer to use for the print job. String iOS
duplex Specifies the duplex mode to use for the print job.
Either double-sided (duplex:true) or single-sided (duplex:false).
Double-sided by default.
Boolean iOS
landscape The orientation of the printed content, portrait or landscape.
Portrait by default.
Boolean iOS
graystyle If your application only prints black text, setting this property to true can result in better performance in many cases.
False by default.
Boolean iOS
bounds The Size and position of the print view Array iPad

Further informations

  • See the isAvailable method to find out if printing is available on the device.
  • All CSS rules needs to be embedded or accessible via absolute URLs in order to print out HTML encoded content.
  • See the examples to get an overview on how to use the plugin.
/**
 * Sends the content to the Google Cloud Print service.
 *
 * @param {String} content
 *      HTML string or DOM node
 *      if latter, innerHTML is used to get the content
 * @param {Object} options
 *       Options for the print job
 * @param {Function?} callback
 *      A callback function
 * @param {Object?} scope
 *      The scope of the callback (default: window)
 */
cordova.plugins.printer.print(content, options, callback, scope);

Examples

NOTE: All CSS rules needs to be embedded or accessible via absolute URLs in order to print out HTML encoded content.

1. Print the whole HTML page

// Either a DOM node or a string
var page = document.body;

cordova.plugins.printer.print(page, 'Document.html', function () {
    alert('printing finished or canceled')
});

2. Print custom specific content

// Either a DOM node or a string
var page = '<h1>Hello Document</h1>';

cordova.plugins.printer.print(page, 'Document.html', function () {
    alert('printing finished or canceled')
});

3. Adjust the page

cordova.plugins.printer.print('123', { name:'Document.html', landscape:true }, function () {
    alert('printing finished or canceled')
});

4. Custom size and position on iPad

// Option one
cordova.plugins.printer.print('123', { bounds:[40, 30, 0, 0] });
// Option two
cordova.plugins.printer.print('123', { bounds:{ left:40, top:30, width:0 height:0 } });

Quirks

Testing in the iOS Simulator

There's no need to waste lots of paper when testing - if you're using the iOS simulator, select File -> Open Printer Simulator to open some dummy printers (print outs will appear as PDF files).

Adding Page Breaks to Printouts

Use the 'page-break-before' property to specify a page break, e.g.

<p>
First page.
</p>

<p style="page-break-before: always">
Second page.
</p>

See W3Schools for more more information: http://www.w3schools.com/cssref/pr_print_pagebb.asp

Note: You will need to add an extra top margin to new pages.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

License

This software is released under the Apache 2.0 License.

© 2013-2014 appPlant UG, Inc. All rights reserved