# Print

## Introduction

The Trust1Connector print module provides the integrator the ability to communicate with local printers. It provides an interface to retrieve the available printers and then execute a specific print job on one of those printers.

## Interface

Below you can find the interface of the Trust1Connector print module.

```javascript
export interface AbstractRawPrint {
    list( callback?: (error: T1CLibException, data: PrinterListResponse) => void): Promise<PrinterListResponse>;
    print(name: string, job: string, data: string, callback?: (error: T1CLibException, data: PrintResponse) => void): Promise<PrintResponse>;
}
```

## Model Objects

Below you can find the available models for Trust1Connector print module which are used in the interface.

```javascript
export class PrinterList {
    constructor(public printers: Array<string>) {}
}

export class PrinterListResponse extends T1CResponse {
    constructor(public data: PrinterList, public success: boolean) {
        super(success, data);
    }
}

export class Print {
    constructor(public printed: boolean) {}
}

export class PrintResponse extends T1CResponse {
    constructor(public data: Print, public success: boolean) {
        super(success, data);
    }
}

```

## Get Printer module object

Before we can use the print module we need to Initialise the Trust1Connector. The code sample below is a  simplified version, for the complete initialise flow you can see [Integration in Web Applications](https://t1t.gitbook.io/t1c-js-guide-v3/3.7.x/other/broken-reference)

```javascript
T1CSdk.T1CClient.initialize(config).then(res => {
    client = res;
}, err => {
    console.error(error)
});
```

After you've initialised the Trust1Connector you can use the `client/response` of the initialise function to  instantiate the `rawprint` module. Later on we can keep using this module to execute various print functions provided by the Trust1Connector interface.

```javascript
var print = client.rawprint();
```

In the example below we execute the `list` function available in the `rawprint` module. Here we use the callback mechanism but a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) is also available as defined in the interface

```javascript
function callback(err,data) {
    if(err){console.log("Error:",JSON.stringify(err, null, '  '));}
    else {console.log(JSON.stringify(data, null, '  '));}
}
print.list(callback);
```

### List

The list function provides an iterator of all the available printers locally. These will return as identifiers that can be used when executing a `print` action as described in the [Print](https://t1t.gitbook.io/t1c-js-guide-v3/3.7.x/other/broken-reference) function

```javascript
client.rawprint().list(callback);
```

An example callback:

```javascript
function callback(err,data) {
    if(err){
        console.log("Error:",JSON.stringify(err, null, '  '));
    }
    else {
        console.log(JSON.stringify(data, null, '  '));
    }
}
```

Response:

```javascript
{
 "printers": ["123"],
}
```

### Print

The Print function available on the interface provides print capabilities via the Trust1Connector. Here you need to specify the print job name, a name for the printer which can be fetched via the [List](https://t1t.gitbook.io/t1c-js-guide-v3/3.7.x/other/broken-reference) function and the Data.

{% hint style="info" %}
The data block needs to be base64 encoded.
{% endhint %}

```javascript
const name = "test"
const job = "test-job-01"
const data = "SSdtIGRlZmluaXRseSBub3QgYSBNQUxBS0E="
client.rawprint().print(name, job, data, callback);
```

An example callback:

```javascript
function callback(err,data) {
    if(err){
        console.log("Error:",JSON.stringify(err, null, '  '));
    }
    else {
        console.log(JSON.stringify(data, null, '  '));
    }
}
```

The print function will respond with a `True` or `False` depending on wether the command succeeded or failed.

```javascript
{
 "printed": true/false,
}
```
