Inventory
Get InventoryGitHub
  • Overview
  • Quickstart
  • Guides
    • Setup & Start Using
    • Basic Concepts
    • Connect an RFID Reader
    • Writing Your First RFID Tag
    • Locate & Check Items
  • App
    • Deep Linking (URL Schemes)
    • Label Printer Integration
      • Label LIVE
  • Data
    • Share Your Data Using Couchdb Replication
  • Integrations
    • Data Synchronization
      • Airtable Integration
  • RFID
    • RFID Overview
    • Supported RFID Devices
      • Chainway R5
    • Choosing RFID Tags
      • Different Kinds of RFID Tags
    • Price Estimation
  • Untitled Group
    • Contact
Powered by GitBook
On this page
  • Example Printer Configuration
  • Sample Label Designs
  • Troubleshooting & FAQ

Was this helpful?

Edit on GitHub
  1. App
  2. Label Printer Integration

Label LIVE

PreviousLabel Printer IntegrationNextShare Your Data Using Couchdb Replication

Last updated 1 year ago

Was this helpful?

Integrate a label printer via 's .

Example Printer Configuration

You'll need to do the following for this configuration to work:

  1. Replace the choices in options.host to the address of your computer that is running Label LIVE.

  2. Download the , open them with Label LIVE and pin them to the home screen.

  3. Replace your-printer-id in the config to your actual printer name in Label LIVE. (?)

{
  options: {
    // You should keep Label LIVE running on the machine to respond to API requests
    host: {
      type: 'string',
      choices: [
        'http://192.168.88.123:11180',
        'https://example.com',
        // ...
      ],
      saveLastValue: true,
    },
    // Get these sample designs in the Sample Label Designs section below
    design: {
      enum: [
        '70×20 Two Lines with QR Code',
        '70×20 QR Code with Asset Reference Number',
        // ...
      ],
      saveLastValue: true,
    },
    use_preview_printer: {
      type: 'boolean',
      default: false,
      saveLastValue: false,
    },
  },
  getLabel: ({ item, options, utils }) => {
    switch (options.design) {
      case '70×20 Two Lines with QR Code': {
        const itemName = item.name.trim();
        const { nextLine: line_1, remaining: line_2 } = utils.getNextLine(
          itemName,
          18,
        );
        return {
          LINE_1: line_1.trim() || ' ',
          LINE_2: line_2.trim() || ' ',
          SIDE: item.collection.name,
          QR_CODE_DATA: item.individual_asset_reference
            ? `z-inv://iar/${item.individual_asset_reference}`
            : `z-inv://item/${item.__id}`,
        };
      }
      case '70×20 QR Code with Asset Reference Number': {
        return {
          ASSET_REFERENCE_NUMBER: item.individual_asset_reference || ' ',
          QR_CODE_DATA: item.individual_asset_reference
            ? `z-inv://iar/${item.individual_asset_reference}`
            : `z-inv://item/${item.__id}`,
        };
      }
      default: {
        throw new Error(`Design not handled in getLabel: "${options.design}"`);
      }
    }
  },
  getPreview: ({ options, label, utils }) => {
    const size = (() => {
      switch (options.design) {
        case '70×20 Two Lines with QR Code': {
          // You can open a preview image in the browser to get its size.
          return {
            width: 827,
            height: 237,
          };
        }
        case '70×20 QR Code with Asset Reference Number': {
          // You can open a preview image in the browser to get its size.
          return {
            width: 827,
            height: 237,
          };
        }
        default: {
          throw new Error(
            `Design not handled in getPreview: "${options.design}"`,
          );
        }
      }
    })();

    return {
      uri: [
        options.host,
        '/api/v1/print?design=',
        encodeURIComponent(options.design),
        '&variables=',
        encodeURIComponent(JSON.stringify(label)),
      ].join(''),
      ...size,
    };
  },
  print: ({ options, labels, utils, signal }) => {
    const { host, design } = options;

    // With multiple printers connected to the same computer,
    // you can support printing designs on multiple sizes of labels.
    const designPrinterMap = {
      '70×20 Two Lines with QR Code': 'your-printer-id',
      '70×20 QR Code with Asset Reference Number': 'your-printer-id',
    };

    const printer = options.use_preview_printer
      ? 'Preview'
      : designPrinterMap[options.design];

    return Promise.all(
      labels.map(label => {
        return fetch(
          [
            host,
            '/api/v1/print?design=',
            encodeURIComponent(options.design),
            '&variables=',
            encodeURIComponent(JSON.stringify(label)),
            '&printer=',
            printer,
            '&copies=1',
          ].join(''),
          {
            signal /* this is used to let the user abort the fetch */,
            method: 'POST',
          },
        )
          .then(response => response.json())
          .then(json => {
            if (!json.success) {
              // Error will be shown on the UI
              throw new Error(json.error);
            }
          });
      }),
    );
  },
}

Sample Label Designs

Troubleshooting & FAQ

How to find your printer ID
  1. Open a design in Label LIVE and select the "Print" tab.

  2. Hover the printer in the drop-down menu.

  3. Click "Copy Printer ID".

The preview is showing, but when I press "Print" it does not respond

There might be an error alert box blocking Label LIVE's API response. Please check your computer.

You'll need to pin the designs on the Home Screen of Label LIVE before using them via API

Label LIVE
HTTP REST API
Sample Label Designs
How to find your printer ID
20KB
70×20 Two Lines with QR Code.lsc
14KB
70×20 QR Code with Asset Reference Number.lsc