# 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](broken://pages/-MCQ0qysbaEtvp3yDnjS)

```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](broken://pages/-MbousPKuPVZIF2gmStR#print) 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](broken://pages/-MbousPKuPVZIF2gmStR#list) 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,
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://t1t.gitbook.io/t1c-js-guide-v3/t1c-js-sdk/other/print.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
