# easypdfcloud-node

<!--
[![Downloads](https://img.shields.io/npm/dt/easypdfcloud-node.svg)](https://npmcharts.com/compare/easypdfcloud-node?minimal=true)
-->
[![Version](https://img.shields.io/npm/v/easypdfcloud-node.svg)](https://www.npmjs.com/package/easypdfcloud-node)
[![License](https://img.shields.io/npm/l/easypdfcloud-node.svg)](https://www.npmjs.com/package/easypdfcloud-node)

A Node library for easyPDF Cloud API [https://www.easypdfcloud.com/developer/reference](https://www.easypdfcloud.com/developer/reference)

The easyPDF Cloud API is a cloud-based platform that allows PDF generation, conversion and automation.

This easy-to-use tool eliminates the need for separate APIs for different file formats and works with Word, Excel, PowerPoint, HTML, and images.

To get started, [sign up for free](https://www.easypdfcloud.com/signup) and then get your API access credentials from the [developer information page](https://www.easypdfcloud.com/developer/).

For detailed information about the easyPDF Cloud API, visit the [API reference page](https://www.easypdfcloud.com/developer/reference).

## Installation

```sh
npm install easypdfcloud-node
```

## Usage

### Using pre-created workflow (workflow ID)

You can create a workflow by connecting series of workflow tasks with mouse drag & drop from [easyPDF Cloud](https://www.easypdfcloud.com) website. After creating a new workflow, you can get its workflow ID from the [developer information page](https://www.easypdfcloud.com/developer/), and then pass it to the API.

```javascript
"use strict";

const fs = require('fs');
const easyPdfCloud = require('easypdfcloud-node');

(async () => {
    // Create easyPDF Cloud client object
    const client = new easyPdfCloud.Client('<client ID>', '<client secret>');

    // Upload input file and start new job
    const job = await client.startNewJob('<workflow ID>', '/Users/someone/input.docx');

    // Wait until job execution is completed
    const result = await job.waitForJobExecutionCompletion();

    // Save output to file
    fs.writeFileSync('/Users/someone/output.pdf', result.fileData.blob, 'binary');
})();
```

### Using dynamically created workflow

Alternatively, you can create a workflow on the spot and pass it to the API.
<br><br>
Following example creates a workflow that adds a watermark to a PDF.

```javascript
"use strict";

const fs = require('fs');
const easyPdfCloud = require('easypdfcloud-node');

(async () => {
    // Create easyPDF Cloud client object
    const client = new easyPdfCloud.Client('<client ID>', '<client secret>');

    // Dynamically create workflow
    const workflowSetting = new easyPdfCloud.WorkflowSetting();

    // Add "Add watermark" task
    const addWatermarkToPdfTask = workflowSetting.AddNewAddWatermarkToPdfTask();

    // Configure watermark settings
    addWatermarkToPdfTask.Angle = 45;
    addWatermarkToPdfTask.OutlineOnly = true;
    addWatermarkToPdfTask.Text = 'Hello';

    // Upload input file and start new job
    const job = await client.startNewJob(workflowSetting, '/Users/someone/input.pdf');

    // Wait until job execution is completed
    const result = await job.waitForJobExecutionCompletion();

    // Save output to file
    fs.writeFileSync('/Users/someone/output.pdf', result.fileData.blob, 'binary');
})();
```

### TypeScript support

This library supports TypeScript too (.d.ts declaration files are included in this package).

```typescript
"use strict";

import * as fs from 'fs';
import * as easyPdfCloud from 'easypdfcloud-node';

(async () => {
    // Create easyPDF Cloud client object
    const client = new easyPdfCloud.Client('<client ID>', '<client secret>');

    // Dynamically create workflow
    const workflowSetting = new easyPdfCloud.WorkflowSetting();

    // Add "Convert PDF to Word" task
    const convertPdfToWordTask = workflowSetting.AddNewConvertPdfToWordTask();

    // Upload input file and start new job
    const job = await client.startNewJob(workflowSetting, '/Users/someone/input.pdf');

    // Wait until job execution is completed
    const result = await job.waitForJobExecutionCompletion();

    // Save output to file
    fs.writeFileSync('/Users/someone/output.docx', result.fileData.blob, 'binary');
})();
```
