Skip to Content
Author's profile photo Daniel Van Leeuwen

Getting Started with Kapsel – Part 14 — Printer (SP09+)


Printer (New in SP06)

This plugin enables the ability to print using AirPrint on iOS and the Android Printing Framework on Android 4.4 or higher devices.  It uses the open source Printer plugin.

For additional details on the Kapsel Printer plugin see the file C:\SAP\MobileSDK3\KapselSDK\plugins\print\www\printer.js or Using the Printer Plugin.

The following steps will demonstrate using this plugin.

  • Create the project.
    cordova create C:\Kapsel_Projects\PrinterDemo com.mycompany.printer PrinterDemo
    cd C:\Kapsel_Projects\PrinterDemo
    cordova platform add android
    cordova create ~/Documents/Kapsel_Projects/PrinterDemo com.mycompany.printer PrinterDemo
    cd ~/Documents/Kapsel_Projects/PrinterDemo
    cordova platform add ios
  • Add the Kapsel or open source printer plugin.
    cordova plugin add de.appplant.cordova.plugin.printer --searchpath %KAPSEL_HOME%/plugins or cordova plugin add de.appplant.cordova.plugin.printer --searchpath $KAPSEL_HOME/plugins or cordova plugin add
  • Replace www\index.html with the following contents.
            <title>Printer Demo</title>
            <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
                window.onerror = onError;
                document.addEventListener("deviceready", init, false);
                var printer = null;
                function onError(msg, url, line) {
                    var idx = url.lastIndexOf("/");
                    var file = "unknown";
                    if (idx > -1) {
                        file = url.substring(idx + 1);
                    navigator.notification.alert("An error occurred in " + file + " (at line # " + line + "): " + msg);
                    return false; //suppressErrorAlert;
                function init() {
                    printer = cordova.plugins.printer;
                    document.getElementById("thedate").value = new Date().toLocaleString();
                function isPrinterAvailable() {
                    log("checking printer availability");
                function callbackAvailable(isAvailable) {
                    if (isAvailable) {
                        log("Printer is available");
                    else {
                        log("Printer is not available");
                function print(original) {
                    var page;
                    if (original) {
                    	page = location.href; //notice the log lines are not shown
                    else {
                        var body = document.body;
                        page = body;
                    log("about to print " + page);
                    printer.print(page, {name:"Index.html Print Job"}, printJobFinishedOrCancelled);
                function printOtherPage() {
                   var page = "";   
                   log("about to print " + page);
                   printer.print(page, {name:"Forecast Print Job"}, printJobFinishedOrCancelled);
                function printJobFinishedOrCancelled() {
                    log("Printing finished or cancelled");
                //new in SP11
                function printInTheBackground() {
                    //printer.printFiles(["pdf.pdf", "pict.jpg"], {name:"BGPrintJob"}, printJobFinishedOrCancelled);
                    printer.printFiles(["pdf.pdf"], {name:"BGPrintJob"}, printJobFinishedOrCancelled);
                function log(line) {
                    var results = document.getElementById("printer_results");
                    results.innerHTML+= "<br>" + line;
            <h1>Printer Sample</h1>
            <button onclick="isPrinterAvailable()">Is Printer Available</button>
            <button onclick="print(true)">Print Original Page</button>
            <button onclick="print(false)">Print Current Page</button>
            <button onclick="printOtherPage()">Print Other Page</button>
            <button onclick="printInTheBackground()">Background Print</button>
            <input type="text" id="thedate">
            <div id="printer_results"></div>
  • Prepare, build and deploy the app with the following commands.
    cordova run android
    cordova run ios

    The Print Original Page passes the location.href to the print method while Print Current Page passes document.body which includes the logged messages such as Printer is available.  Notice that the date text input is empty either way.  Finally the Print Other Page prints the current weather forecast in Waterloo Ontario (

    The following demonstrates how to view the results of printing a page on an Andoid emulator and an iOS simulator. Press the Is Printer Available button and then the Print Current Page.


    To download the Printer Simulator, in Xcode, choose Xcode > More Developer Tools… > Hardware IO Tools for Xcode – Xcode 6.3.
    Once downloaded start the Printer Simulator.  Note if an error appears in Xcode while attempting to print, the following may help.  AirPrint Connection Refused Error.


Back to Getting Started With Kapsel

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Radovan Nieslanik
      Radovan Nieslanik

      Thank you for this very useful post. Could you just check or replace the hyperlink to index.html with sample code of your application? Now it just says "Page Not Found". Thank you.

      Author's profile photo Daniel Van Leeuwen
      Daniel Van Leeuwen
      Blog Post Author

      Sorry about that.  I have included the index.html content directly in the blog post.

      With the migration to the new SCN it seems that previously linked files are no longer accessible.

      I am working on writing and publishing an updated version of this guide targeted for SP 13+ but it is taking some time.  The first few posts are available at

      Dan van Leeuwen

      Author's profile photo Radovan Nieslanik
      Radovan Nieslanik

      Thank you very much, for this really perfect work on Kapsel.