# pdf\_output

(plugins.pdf\_output)

## Overview

The `PDF Output` plugin allows for creating, manipulating, and enhancing PDF files. It includes functionalities such as combining multiple PDFs, adding overlays or watermarks, numbering pages, and encrypting documents with password protection and custom permissions. The plugin supports working with both regular and protected PDFs and provides options for customizing fonts, colors, and layout elements during PDF manipulations.

For further details on working with PDF files using this plugin, refer to the [PDF Output Plugin Guide](https://docs.servoy.com/guides/develop/programming-guide/working-with-files/pdf).

## Methods Summarized

| Type                                                     | Name                                                                                                                                                                                                                                                                                                                                                                                                             | Summary                                                                          |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [combinePDFDocuments(pdf\_docs\_bytearrays)](#combinepdfdocuments-pdf_docs_bytearrays)                                                                                                                                                                                                                                                                                                                           | Combine multiple PDF docs into one.                                              |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [combineProtectedPDFDocuments(pdf\_docs\_bytearrays, pdf\_docs\_passwords)](#combineprotectedpdfdocuments-pdf_docs_bytearrays-pdf_docs_passwords)                                                                                                                                                                                                                                                                | Combine multiple protected PDF docs into one.                                    |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [convertPDFFormToPDFDocument(pdf\_form, field\_values)](#convertpdfformtopdfdocument-pdf_form-field_values)                                                                                                                                                                                                                                                                                                      | Convert a PDF form to a PDF document.                                            |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [convertPDFFormToPDFDocument(pdf\_form, field\_values, partialFlattening)](#convertpdfformtopdfdocument-pdf_form-field_values-partialflattening)                                                                                                                                                                                                                                                                 | Convert a PDF form to a PDF document.                                            |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [convertProtectedPDFFormToPDFDocument(pdf\_form, pdf\_password, field\_values)](#convertprotectedpdfformtopdfdocument-pdf_form-pdf_password-field_values)                                                                                                                                                                                                                                                        | Convert a protected PDF form to a PDF document.                                  |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [convertProtectedPDFFormToPDFDocument(pdf\_form, pdf\_password, field\_values, partialFlattening)](#convertprotectedpdfformtopdfdocument-pdf_form-pdf_password-field_values-partialflattening)                                                                                                                                                                                                                   | Convert a protected PDF form to a PDF document.                                  |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [encrypt(data, ownerPassword)](#encrypt-data-ownerpassword)                                                                                                                                                                                                                                                                                                                                                      | Add password protection and security options to the PDF                          |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [encrypt(data, ownerPassword, userPassword)](#encrypt-data-ownerpassword-userpassword)                                                                                                                                                                                                                                                                                                                           | Add password protection and security options to the PDF                          |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [encrypt(data, ownerPassword, userPassword, allowAssembly, allowCopy, allowDegradedPrinting, allowFillIn, allowModifyAnnotations, allowModifyContents, allowPrinting, allowScreenreaders)](#encrypt-data-ownerpassword-userpassword-allowassembly-allowcopy-allowdegradedprinting-allowfillin-allowmodifyannotations-allowmodifycontents-allowprinting-allowscreenreaders)                                       | Add password protection and security options to the PDF                          |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [encrypt(data, ownerPassword, userPassword, allowAssembly, allowCopy, allowDegradedPrinting, allowFillIn, allowModifyAnnotations, allowModifyContents, allowPrinting, allowScreenreaders, is128bit)](#encrypt-data-ownerpassword-userpassword-allowassembly-allowcopy-allowdegradedprinting-allowfillin-allowmodifyannotations-allowmodifycontents-allowprinting-allowscreenreaders-is128bit)                    | Add password protection and security options to the PDF                          |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [encrypt(data, ownerPassword, userPassword, allowAssembly, allowCopy, allowDegradedPrinting, allowFillIn, allowModifyAnnotations, allowModifyContents, allowPrinting, allowScreenreaders, is128bit, metaData)](#encrypt-data-ownerpassword-userpassword-allowassembly-allowcopy-allowdegradedprinting-allowfillin-allowmodifyannotations-allowmodifycontents-allowprinting-allowscreenreaders-is128bit-metadata) | Add password protection and security options to the PDF                          |
| [Number](/reference/servoycore/dev-api/js-lib/number.md) | [getNumberOfPages(data)](#getnumberofpages-data)                                                                                                                                                                                                                                                                                                                                                                 | Returns the number of pages for pdf document.                                    |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [getThumbnailImage(data)](#getthumbnailimage-data)                                                                                                                                                                                                                                                                                                                                                               | Create a thumbnail from the provided PDF                                         |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [getThumbnailImage(data, pageNumber)](#getthumbnailimage-data-pagenumber)                                                                                                                                                                                                                                                                                                                                        | Create a thumbnail from the provided PDF                                         |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [getThumbnailImage(data, pageNumber, dpi)](#getthumbnailimage-data-pagenumber-dpi)                                                                                                                                                                                                                                                                                                                               | Create a thumbnail from the provided PDF                                         |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [numberPages(data)](#numberpages-data)                                                                                                                                                                                                                                                                                                                                                                           | Add pages numbers to a PDF                                                       |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [numberPages(data, fontSize, locationX, locationY, font, hexColor)](#numberpages-data-fontsize-locationx-locationy-font-hexcolor)                                                                                                                                                                                                                                                                                | Add pages numbers to a PDF                                                       |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [overlay(data, forOverlay)](#overlay-data-foroverlay)                                                                                                                                                                                                                                                                                                                                                            | Add some PDF based content over a PDF                                            |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [overlay(data, forOverlay, isOver)](#overlay-data-foroverlay-isover)                                                                                                                                                                                                                                                                                                                                             | Add some PDF based content over a PDF                                            |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [overlay(data, forOverlay, isOver, pages)](#overlay-data-foroverlay-isover-pages)                                                                                                                                                                                                                                                                                                                                | Add some PDF based content over a PDF                                            |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [overlay(data, forOverlay, pages)](#overlay-data-foroverlay-pages)                                                                                                                                                                                                                                                                                                                                               | Add some PDF based content over a PDF                                            |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [overlayText(data, text)](#overlaytext-data-text)                                                                                                                                                                                                                                                                                                                                                                | Add text over every page at a 45 degree angle                                    |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [overlayText(data, text, locationX, locationY, isOver, fontSize, font, hexColor)](#overlaytext-data-text-locationx-locationy-isover-fontsize-font-hexcolor)                                                                                                                                                                                                                                                      | Add text over every page at a 45 degree angle                                    |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [overlayText(data, text, locationX, locationY, isOver, fontSize, font, hexColor, angle)](#overlaytext-data-text-locationx-locationy-isover-fontsize-font-hexcolor-angle)                                                                                                                                                                                                                                         | Add text over every page at a 45 degree angle                                    |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [watermark(data, image)](#watermark-data-image)                                                                                                                                                                                                                                                                                                                                                                  | Add an image as a watermark on every page, or the pages specified as a parameter |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [watermark(data, image, locationX, locationY, isOver)](#watermark-data-image-locationx-locationy-isover)                                                                                                                                                                                                                                                                                                         | Add an image as a watermark on every page, or the pages specified as a parameter |
| [Array](/reference/servoycore/dev-api/js-lib/array.md)   | [watermark(data, image, locationX, locationY, isOver, pages)](#watermark-data-image-locationx-locationy-isover-pages)                                                                                                                                                                                                                                                                                            | Add an image as a watermark on every page, or the pages specified as a parameter |

## Methods Detailed

### combinePDFDocuments(pdf\_docs\_bytearrays)

Combine multiple PDF docs into one.\
Note: this function may fail when creating large PDF files due to lack of available heap memory. To compensate, please configure the application server with more heap memory via -Xmx parameter.

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pdf\_docs\_bytearrays** the array of documents to combine

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the combined PDF document as a byte array, or null if the input array is empty or invalid.

**Sample**

```js
pdf_blob_column = combinePDFDocuments(new Array(pdf_blob1,pdf_blob2,pdf_blob3));
```

### combineProtectedPDFDocuments(pdf\_docs\_bytearrays, pdf\_docs\_passwords)

Combine multiple protected PDF docs into one.\
Note: this function may fail when creating large PDF files due to lack of available heap memory. To compensate, please configure the application server with more heap memory via -Xmx parameter.

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pdf\_docs\_bytearrays** the array of documents to combine
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pdf\_docs\_passwords** an array of passwords to use

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the combined PDF document as a byte array, or null if the input array is empty or invalid.

**Sample**

```js
pdf_blob_column = combineProtectedPDFDocuments(new Array(pdf_blob1,pdf_blob2,pdf_blob3), new Array(pdf_blob1_pass,pdf_blob2_pass,pdf_blob3_pass));
```

### convertPDFFormToPDFDocument(pdf\_form, field\_values)

Convert a PDF form to a PDF document. By default, all fields of the pdf form will be flattened.

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pdf\_form** the PDF Form to convert
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **field\_values** the values to use

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the flattened PDF document as a byte array, or null in case of an error.

**Sample**

```js
var pdfform = plugins.file.readFile('c:/temp/1040a-form.pdf');
//var field_values = plugins.file.readFile('c:/temp/1040a-data.fdf');//read adobe fdf values or
var field_values = new Array()//construct field values
field_values[0] = 'f1-1=John C.J.'
field_values[1] = 'f1-2=Longlasting'
var result_pdf_doc = plugins.pdf_output.convertPDFFormToPDFDocument(pdfform, field_values)
if (result_pdf_doc != null)
{
	plugins.file.writeFile('c:/temp/1040a-flatten.pdf', result_pdf_doc)
}
```

### convertPDFFormToPDFDocument(pdf\_form, field\_values, partialFlattening)

Convert a PDF form to a PDF document. The PDF form can be have all the fields flattened or just the fields specified by values.

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pdf\_form** the PDF Form to convert
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **field\_values** the values to use. If partialFlattening is true, only these fields will be flattened.
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **partialFlattening** if true, only flatten the fields set as values, the rest remain unchanged

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the flattened PDF document as a byte array, or null in case of an error.

**Sample**

```js
var pdfform = plugins.file.readFile('c:/temp/1040a-form.pdf');
//var field_values = plugins.file.readFile('c:/temp/1040a-data.fdf');//read adobe fdf values or
var field_values = new Array()//construct field values
field_values[0] = 'f1-1=John C.J.'
field_values[1] = 'f1-2=Longlasting'
var result_pdf_doc = plugins.pdf_output.convertPDFFormToPDFDocument(pdfform, field_values)
if (result_pdf_doc != null)
{
	plugins.file.writeFile('c:/temp/1040a-flatten.pdf', result_pdf_doc)
}
```

### convertProtectedPDFFormToPDFDocument(pdf\_form, pdf\_password, field\_values)

Convert a protected PDF form to a PDF document. By default, all fields of the pdf form will be flattened.

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pdf\_form** the PDF Form to convert
* [String](/reference/servoycore/dev-api/js-lib/string.md) **pdf\_password** the password to use
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **field\_values** the field values to use

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the flattened PDF document as a byte array, or null in case of an error.

**Sample**

```js
var pdfform = plugins.file.readFile('c:/temp/1040a-form.pdf');
//var field_values = plugins.file.readFile('c:/temp/1040a-data.fdf');//read adobe fdf values or
var field_values = new Array()//construct field values
field_values[0] = 'f1-1=John C.J.'
field_values[1] = 'f1-2=Longlasting'
var result_pdf_doc = plugins.pdf_output.convertProtectedPDFFormToPDFDocument(pdfform, 'pdf_password', field_values)
if (result_pdf_doc != null)
{
	plugins.file.writeFile('c:/temp/1040a-flatten.pdf', result_pdf_doc)
}
```

### convertProtectedPDFFormToPDFDocument(pdf\_form, pdf\_password, field\_values, partialFlattening)

Convert a protected PDF form to a PDF document. Can specify if all fields or just specified fields will be flattened.

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pdf\_form** the PDF Form to convert
* [String](/reference/servoycore/dev-api/js-lib/string.md) **pdf\_password** the password to use
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **field\_values** the field values to use. If partialFlattening is true, only these fields will be flattened.
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **partialFlattening** if true, only flatten the fields set as values, the rest remain unchanged

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the flattened PDF document as a byte array, or null in case of an error.\
If partialFlattening is true, only the specified fields are flattened, while others remain interactive.

**Sample**

```js
var pdfform = plugins.file.readFile('c:/temp/1040a-form.pdf');
//var field_values = plugins.file.readFile('c:/temp/1040a-data.fdf');//read adobe fdf values or
var field_values = new Array()//construct field values
field_values[0] = 'f1-1=John C.J.'
field_values[1] = 'f1-2=Longlasting'
var result_pdf_doc = plugins.pdf_output.convertProtectedPDFFormToPDFDocument(pdfform, 'pdf_password', field_values)
if (result_pdf_doc != null)
{
	plugins.file.writeFile('c:/temp/1040a-flatten.pdf', result_pdf_doc)
}
```

### encrypt(data, ownerPassword)

Add password protection and security options to the PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **ownerPassword** the owner password

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the encrypted PDF

**Sample**

```js
// Add password protection and security options to the PDF
// NOTE: Passwords are case sensitive
var unEncryptedFile = plugins.file.showFileOpenDialog();
if (unEncryptedFile) {
	var data = plugins.file.readFile(unEncryptedFile);
	encryptedResult = myElement.encrypt(data, 'secretPassword', 'secretUserPassword', false, false, false, false, false, false, false, false, true);
}
```

### encrypt(data, ownerPassword, userPassword)

Add password protection and security options to the PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **ownerPassword** the owner password
* [String](/reference/servoycore/dev-api/js-lib/string.md) **userPassword** the user password

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the encrypted PDF

**Sample**

```js
// Add password protection and security options to the PDF
// NOTE: Passwords are case sensitive
var unEncryptedFile = plugins.file.showFileOpenDialog();
if (unEncryptedFile) {
	var data = plugins.file.readFile(unEncryptedFile);
	encryptedResult = myElement.encrypt(data, 'secretPassword', 'secretUserPassword', false, false, false, false, false, false, false, false, true);
}
```

### encrypt(data, ownerPassword, userPassword, allowAssembly, allowCopy, allowDegradedPrinting, allowFillIn, allowModifyAnnotations, allowModifyContents, allowPrinting, allowScreenreaders)

Add password protection and security options to the PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **ownerPassword** the owner password
* [String](/reference/servoycore/dev-api/js-lib/string.md) **userPassword** the user password
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowAssembly** whether to set the allow assembly permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowCopy** whether to set the allow copy permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowDegradedPrinting** whether to set the allow degraded printing permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowFillIn** whether to set the allow fill in permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowModifyAnnotations** whether to set the allow modify annotations permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowModifyContents** whether to set the allow modify contents permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowPrinting** whether to set the allow printing permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowScreenreaders** whether to set the allow screen readers permission

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the encrypted PDF

**Sample**

```js
// Add password protection and security options to the PDF
// NOTE: Passwords are case sensitive
var unEncryptedFile = plugins.file.showFileOpenDialog();
if (unEncryptedFile) {
	var data = plugins.file.readFile(unEncryptedFile);
	encryptedResult = myElement.encrypt(data, 'secretPassword', 'secretUserPassword', false, false, false, false, false, false, false, false, true);
}
```

### encrypt(data, ownerPassword, userPassword, allowAssembly, allowCopy, allowDegradedPrinting, allowFillIn, allowModifyAnnotations, allowModifyContents, allowPrinting, allowScreenreaders, is128bit)

Add password protection and security options to the PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **ownerPassword** the owner password
* [String](/reference/servoycore/dev-api/js-lib/string.md) **userPassword** the user password
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowAssembly** whether to set the allow assembly permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowCopy** whether to set the allow copy permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowDegradedPrinting** whether to set the allow degraded printing permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowFillIn** whether to set the allow fill in permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowModifyAnnotations** whether to set the allow modify annotations permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowModifyContents** whether to set the allow modify contents permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowPrinting** whether to set the allow printing permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowScreenreaders** whether to set the allow screen readers permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **is128bit** whether to use 128-bit encryption

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the encrypted PDF

**Sample**

```js
// Add password protection and security options to the PDF
// NOTE: Passwords are case sensitive
var unEncryptedFile = plugins.file.showFileOpenDialog();
if (unEncryptedFile) {
	var data = plugins.file.readFile(unEncryptedFile);
	encryptedResult = myElement.encrypt(data, 'secretPassword', 'secretUserPassword', false, false, false, false, false, false, false, false, true);
}
```

### encrypt(data, ownerPassword, userPassword, allowAssembly, allowCopy, allowDegradedPrinting, allowFillIn, allowModifyAnnotations, allowModifyContents, allowPrinting, allowScreenreaders, is128bit, metaData)

Add password protection and security options to the PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **ownerPassword** the owner password
* [String](/reference/servoycore/dev-api/js-lib/string.md) **userPassword** the user password
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowAssembly** whether to set the allow assembly permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowCopy** whether to set the allow copy permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowDegradedPrinting** whether to set the allow degraded printing permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowFillIn** whether to set the allow fill in permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowModifyAnnotations** whether to set the allow modify annotations permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowModifyContents** whether to set the allow modify contents permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowPrinting** whether to set the allow printing permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **allowScreenreaders** whether to set the allow screen readers permission
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **is128bit** whether to use 128-bit encryption
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **metaData** a JavaScript object (Scriptable) that contains the metadata as property/value pairs

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the encrypted PDF

**Sample**

```js
// Add password protection and security options to the PDF
// NOTE: Passwords are case sensitive
var unEncryptedFile = plugins.file.showFileOpenDialog();
if (unEncryptedFile) {
	var data = plugins.file.readFile(unEncryptedFile);
	encryptedResult = myElement.encrypt(data, 'secretPassword', 'secretUserPassword', false, false, false, false, false, false, false, false, true);
}
```

### getNumberOfPages(data)

Returns the number of pages for pdf document.

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF

**Returns:** [Number](/reference/servoycore/dev-api/js-lib/number.md) the number of pages of the PDF document

**Sample**

```js
//get the number of pages
var pages = plugins.pdf_output.getNumberOfPages(bytes);
```

### getThumbnailImage(data)

Create a thumbnail from the provided PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF thumbnail as PNG format

**Sample**

```js
//read PDF file data
var pdf = plugins.file.readFile();
//get the thumbnail (default the first page is rendered with 72 dpi resolution)
var pngImg = plugins.pdf_output.getThumbnailImage(pdf);
//save PNG image to file
var thumbnailFile = plugins.file.convertToJSFile()
plugins.file.writeFile(thumbnailFile, pngImg);
```

### getThumbnailImage(data, pageNumber)

Create a thumbnail from the provided PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **pageNumber** PDF page to get thumbnail of. This parameter is zero based index.

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF thumbnail as PNG format

**Sample**

```js
//read PDF file data
var pdf = plugins.file.readFile();
//get the thumbnail (default the first page is rendered with 72 dpi resolution)
var pngImg = plugins.pdf_output.getThumbnailImage(pdf);
//save PNG image to file
var thumbnailFile = plugins.file.convertToJSFile()
plugins.file.writeFile(thumbnailFile, pngImg);
```

### getThumbnailImage(data, pageNumber, dpi)

Create a thumbnail from the provided PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **pageNumber** PDF page to get thumbnail of. This parameter is zero based index.
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **dpi** resolution used to render the thumbnail image

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF thumbnail as PNG format

**Sample**

```js
//read PDF file data
var pdf = plugins.file.readFile();
//get the thumbnail (default the first page is rendered with 72 dpi resolution)
var pngImg = plugins.pdf_output.getThumbnailImage(pdf);
//save PNG image to file
var thumbnailFile = plugins.file.convertToJSFile()
plugins.file.writeFile(thumbnailFile, pngImg);
```

### numberPages(data)

Add pages numbers to a PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with numbered pages

**Sample**

```js
// Add pages numbers to a PDF
var unNumberedFile = plugins.file.showFileOpenDialog();
if (unNumberedFile) {
	var data = plugins.file.readFile(unNumberedFile);
	pageNumberedPdf = myElement.numberPages(data, 12, 520, 30, 'Courier', '#ff0033');
}
```

### numberPages(data, fontSize, locationX, locationY, font, hexColor)

Add pages numbers to a PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **fontSize** the font size to use
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationX** the x location of the numbers
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationY** the y location of the numbers
* [String](/reference/servoycore/dev-api/js-lib/string.md) **font** the font to use
* [String](/reference/servoycore/dev-api/js-lib/string.md) **hexColor** the font color to use

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with numbered pages

**Sample**

```js
// Add pages numbers to a PDF
var unNumberedFile = plugins.file.showFileOpenDialog();
if (unNumberedFile) {
	var data = plugins.file.readFile(unNumberedFile);
	pageNumberedPdf = myElement.numberPages(data, 12, 520, 30, 'Courier', '#ff0033');
}
```

### overlay(data, forOverlay)

Add some PDF based content over a PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **forOverlay** a PDF to use as overlay

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added overlay

**Sample**

```js
// Add some PDF based content over a PDF
var pages = new Array();
pages[0] = '1';
pages[1] = '3';
pages[2] = '5';
var input1 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select source file');
if (input1) {
	var data = plugins.file.readFile(input1);
	var input2 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select file for overlay');
	if (input2) {
		var data2 = plugins.file.readFile(input2);
		overlayedPdf = myElement.overlay( data, data2, false, pages );
		//overlayedPdf = myElement.overlay( data, data2 );
		//overlayedPdf = myElement.overlay( data, data2, false, null );
		//overlayedPdf = myElement.overlay( data, data2, pages );
	}
}
```

### overlay(data, forOverlay, isOver)

Add some PDF based content over a PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **forOverlay** a PDF to use as overlay
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **isOver** whether the overlay will be put over the content

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added overlay

**Sample**

```js
// Add some PDF based content over a PDF
var pages = new Array();
pages[0] = '1';
pages[1] = '3';
pages[2] = '5';
var input1 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select source file');
if (input1) {
	var data = plugins.file.readFile(input1);
	var input2 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select file for overlay');
	if (input2) {
		var data2 = plugins.file.readFile(input2);
		overlayedPdf = myElement.overlay( data, data2, false, pages );
		//overlayedPdf = myElement.overlay( data, data2 );
		//overlayedPdf = myElement.overlay( data, data2, false, null );
		//overlayedPdf = myElement.overlay( data, data2, pages );
	}
}
```

### overlay(data, forOverlay, isOver, pages)

Add some PDF based content over a PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **forOverlay** a PDF to use as overlay
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **isOver** whether the overlay will be put over the content
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pages** an array of page numbers to put the overlay on

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added overlay

**Sample**

```js
// Add some PDF based content over a PDF
var pages = new Array();
pages[0] = '1';
pages[1] = '3';
pages[2] = '5';
var input1 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select source file');
if (input1) {
	var data = plugins.file.readFile(input1);
	var input2 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select file for overlay');
	if (input2) {
		var data2 = plugins.file.readFile(input2);
		overlayedPdf = myElement.overlay( data, data2, false, pages );
		//overlayedPdf = myElement.overlay( data, data2 );
		//overlayedPdf = myElement.overlay( data, data2, false, null );
		//overlayedPdf = myElement.overlay( data, data2, pages );
	}
}
```

### overlay(data, forOverlay, pages)

Add some PDF based content over a PDF

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **forOverlay** a PDF to use as overlay
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pages** an array of page numbers to put the overlay on

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added overlay

**Sample**

```js
// Add some PDF based content over a PDF
var pages = new Array();
pages[0] = '1';
pages[1] = '3';
pages[2] = '5';
var input1 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select source file');
if (input1) {
	var data = plugins.file.readFile(input1);
	var input2 = plugins.file.showFileOpenDialog(1,null,false,'pdf',null,'Select file for overlay');
	if (input2) {
		var data2 = plugins.file.readFile(input2);
		overlayedPdf = myElement.overlay( data, data2, false, pages );
		//overlayedPdf = myElement.overlay( data, data2 );
		//overlayedPdf = myElement.overlay( data, data2, false, null );
		//overlayedPdf = myElement.overlay( data, data2, pages );
	}
}
```

### overlayText(data, text)

Add text over every page at a 45 degree angle

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **text** the text to use for the overlay

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added overlay

**Sample**

```js
// Add text over every page at a 45 degree angle\m
var pdf = plugins.file.showFileOpenDialog();
if (pdf) {
	var data = plugins.file.readFile(pdf);
	modifiedPdf = myElement.overlayText(data, 'DRAFT', 230, 430, true, 32, 'Helvetica', '#33ff33');
}
```

### overlayText(data, text, locationX, locationY, isOver, fontSize, font, hexColor)

Add text over every page at a 45 degree angle

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **text** the text to use for the overlay
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationX** the x location of the overlay
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationY** the y location of the overlay
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **isOver** whether to put the overlay over the content
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **fontSize** the font size to use
* [String](/reference/servoycore/dev-api/js-lib/string.md) **font** the font to use
* [String](/reference/servoycore/dev-api/js-lib/string.md) **hexColor** the font color to use

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added overlay

**Sample**

```js
// Add text over every page at a 45 degree angle\m
var pdf = plugins.file.showFileOpenDialog();
if (pdf) {
	var data = plugins.file.readFile(pdf);
	modifiedPdf = myElement.overlayText(data, 'DRAFT', 230, 430, true, 32, 'Helvetica', '#33ff33');
}
```

### overlayText(data, text, locationX, locationY, isOver, fontSize, font, hexColor, angle)

Add text over every page at a 45 degree angle

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [String](/reference/servoycore/dev-api/js-lib/string.md) **text** the text to use for the overlay
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationX** the x location of the overlay
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationY** the y location of the overlay
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **isOver** whether to put the overlay over the content
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **fontSize** the font size to use
* [String](/reference/servoycore/dev-api/js-lib/string.md) **font** the font to use
* [String](/reference/servoycore/dev-api/js-lib/string.md) **hexColor** the font color to use
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **angle** the angle of the overlay

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added overlay

**Sample**

```js
// Add text over every page at a 45 degree angle\m
var pdf = plugins.file.showFileOpenDialog();
if (pdf) {
	var data = plugins.file.readFile(pdf);
	modifiedPdf = myElement.overlayText(data, 'DRAFT', 230, 430, true, 32, 'Helvetica', '#33ff33');
}
```

### watermark(data, image)

Add an image as a watermark on every page, or the pages specified as a parameter

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **image** the path of an image to use or array of bytes containing actual image

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added watermak

**Sample**

```js
// Add an image as a watermark on every page, or the pages specified as a parameter.
var pdf = plugins.file.showFileOpenDialog();
if (pdf) {
	var data = plugins.file.readFile(pdf);
	var image = plugins.file.showFileOpenDialog();
	modifiedPdf = myElement.watermark(data, image);
}
```

### watermark(data, image, locationX, locationY, isOver)

Add an image as a watermark on every page, or the pages specified as a parameter

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **image** the path of an image to use or array of bytes containing actual image
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationX** the x location of the image
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationY** the y location of the image
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **isOver** whether to put over the content

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added watermak

### watermark(data, image, locationX, locationY, isOver, pages)

Add an image as a watermark on every page, or the pages specified as a parameter

**Parameters**

* [Array](/reference/servoycore/dev-api/js-lib/array.md) **data** the PDF
* [Object](/reference/servoycore/dev-api/js-lib/object.md) **image** the path of an image to use or array of bytes containing actual image
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationX** the x location of the image
* [Number](/reference/servoycore/dev-api/js-lib/number.md) **locationY** the y location of the image
* [Boolean](/reference/servoycore/dev-api/js-lib/boolean.md) **isOver** whether to put over the content
* [Array](/reference/servoycore/dev-api/js-lib/array.md) **pages** an array of pages where to apply the watermark

**Returns:** [Array](/reference/servoycore/dev-api/js-lib/array.md) the PDF with added watermak

***


---

# 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://docs.servoy.com/reference/servoyextensions/server-plugins/pdf_output.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.
