@sylphide/pdf-actions
Version:
A NPM Package built on top of pdf-lib that provides functonalities like merge, rotate, split and many more...
315 lines (246 loc) • 7.77 kB
Markdown
<div align="center">
<strong>Create and modify PDF documents in any JavaScript environment.</strong>
</div>
<div align="center">
Designed to work in any modern JavaScript runtime. Tested in Node, Browser, Deno, and React Native environments.
</div>
<br />
<div align="center">
<!-- NPM Version -->
<a href="https://www.npmjs.com/package/pdf-actions">
<img
src="https://img.shields.io/npm/v/pdf-actions.svg?style=flat-square"
alt="NPM Version"
/>
</a>
</div>
<br />
## Table of Contents
- [Usage Examples](#usage-examples)
- [Modify Existing PDFs Get PDFDocument Object](#modify-existing-pdfs-Get-PDFDocument-Object)
- [Empty PDF Document](#Empty-PDF-Document)
- [PDF Document From File](#PDF-Document-From-File)
- [PDF Document From Unit8Array/ArrayBuffer](#PDF-Document-From-Unit8Array/ArrayBuffer)
- [PDF Array from HTML File Object](#pdf-array-from-html-file-object)
- [PDF Array To Blob](#PDF-Array-To-Blob)
- [Merge PDF](#merge-pdf)
- [Rotate PDF](#rotate-pdf)
- [Split PDF](#split-pdf)
- [Break Single PDF File Into Multiple PDF](#break-single-pdf-file-into-multiple-pdf)
- [Flatten PDF Forms](#flatten-pdf-forms)
- [Resize PDF](#resize-pdf)
- [Add Margin to PDF](#add-margin-to-pdf)
- [Edit PDF Metadata](#edit-pdf-metadata)
- [Remove PDF Metadata](#remove-pdf-metadata)
- [Add Page Numbers to PDF](#add-page-numbers-to-pdf)
- [JPG To PDF](#jpg-to-pdf)
- [Installation](#installation)
- [Documentation](#documentation)
- [License](#license)
## Usage Examples
- A Project Made Using pdf-actions is [PDFActions](https://pdfactions.vercel.app/) : [GITHUB Repo](https://github.com/ManasMadan/PDFActions)
### Modify Existing PDFs Get PDFDocument Object
To Modify Esisting PDF Files You Need to First Convert It Into a PDFDocument Object
#### Empty PDF Document
```js
import { createFileDoc } from "pdf-actions";
const EmptyPDFDocument = await createFileDoc.EmptyPDFDocument();
```
#### PDF Document From File
```js
import { createFileDoc } from "pdf-actions";
const PDFDocument = await createFileDoc.PDFDocumentFromFile(file); // file is a HTML File Object from input tag
```
#### PDF Document From Unit8Array/ArrayBuffer
```js
import { createFileDoc } from "pdf-actions";
const PDFDocument = await createFileDoc.PDFDocumentFromPDFArray(fileArray); // fileArray is a Unit8Array/ArrayBuffer
```
### PDF Array from HTML File Object
```js
import { pdfArray } from "pdf-actions";
const PDFArray = await pdfArray(file); // file is a HTML File Object from input tag
```
### PDF Array To Blob
```js
import { pdfArrayToBlob } from "pdf-actions";
const PDFBlob = await pdfArrayToBlob(fileArray); // fileArray is a Unit8Array
```
### Merge PDF
```js
import { mergePDF } from "pdf-actions";
const MergedPDFDocument = await mergePDF(filesDocArray); // filesDocArray is a Array of PDFDocument Object
```
### Rotate PDF
```js
import { rotatePDF } from "pdf-actions";
const RotatedPDFDocument = await rotatePDF(fileDoc, degrees);
/*
fileDoc is a PDFDocument Object
degrees is a integer
*/
```
### Split PDF
```js
import { splitPDF } from "pdf-actions";
const SplitPDFDocument = await splitPDF(fileDoc, range, degree);
/*
fileDoc is a PDFDocument Object
range : Page Numbers(both inclusive) is array of two integers - [start,stop]
degree? is a optional parameter and integer
*/
```
### Break Single PDF File Into Multiple PDF
```js
import { breakPDF } from "pdf-actions";
const BreakPDFDocumentsArray = await breakPDF(
fileDoc,
pagesInEachFile,
haveLastPDF,
degree,
breakRange
);
/*
fileDoc is a PDFDocument Object
pagesInEachFile is a integer denoting Number of Pages in Each Broken PDF
haveLastPDF is a boolean to whether return the last pdf document irrespective of maxPages
degree? is a optional parameter and integer
breakRange? is a optional paramenter that is a array of two integers [start,stop] that splits the pdf(both inclisive) before breaking it
*/
```
### Flatten PDF Forms
```js
import { flattenPDFForm } from "pdf-actions";
const PDFDocumentWithFormsFlattened = await flattenPDFForm(fileDoc);
/*
fileDoc is a PDFDocument Object
*/
```
### Resize PDF
```js
import { resizePDF } from "pdf-actions";
const PDFDocumentWithFormsFlattened = await resizePDF(
fileDoc,
size,
orientation,
position,
degree
);
/*
fileDoc is a PDFDocument Object
size? optional paramenter : string : 2A0 , 4A0 , A[0-10] , B[0-10] , C[0-9] , Executive , Folio , Legal , Letter , RA[0-4] , SR[0-4] , Tabloid
orientation? optional paramenter : string : Portrait or Landscape
position? optional parameter - Where The Content Should Be : string : Start , Center , End
degree? rotate pdf angle : integer
*/
```
### Add Margin to PDF
```js
import { addMarginPDF } from "pdf-actions";
const AddedMarginPDFDocument = await addMarginPDF(
fileDoc,
marginMillimeter,
degree
);
/*
fileDoc is a PDFDocument Object
marginMillimeter? : optional paramenter : array of length 4
marginMillimeter[0] -> Left
marginMillimeter[1] -> Top
marginMillimeter[2] -> Right
marginMillimeter[3] -> Bottom
degree? rotate pdf angle : integer
*/
```
### Edit PDF Metadata
```js
import { editMetaData } from "pdf-actions";
const NewMetaDataPDFDocument = await editMetaData(fileDoc, options);
/*
fileDoc is a PDFDocument Object
options = {author,title,creator,keywords,documentCreationDate,documentModificationDate,subject,producer}
*/
```
### Remove PDF Metadata
```js
import { removeMetaData } from "pdf-actions";
const RemovedMetaDataPDFDocument = await removeMetaData(fileDoc);
/*
fileDoc is a PDFDocument Object
*/
```
### Add Page Numbers to PDF
```js
import { addPageNumbers } from "pdf-actions";
const PDFDocumentWithPageNumbers = await addPageNumbers(
fileDoc,
pageNumberPosition,
margin,
startingPage,
endingPage,
startingNumber,
textSize
);
/*
fileDoc is a PDFDocument Object
pageNumberPosition? : optional : is one of the following string
- b-l : Bottom Left
- b-c : Bottom Center : Default
- b-r : Bottom Right
- t-l : Top Left
- t-c : Top Center
- t-r : Top Right
margin? : optional : is one of the following string
- Recommended : Default
- Small
- Big
startingPage? : optional : is a integer should be >=1 and <=max pages in pdf
endingPage? : optional : is a integer should be >=1 and <=max pages in pdf and >= startingPage
startingNumber? : optional : is a integer denoting the first page number : 1 by default
textSize? : optional 16 by default is a integer
*/
```
### JPG To PDF
```js
import { imageToPDF } from "pdf-actions";
const PDFDocumentFromJPG = await imageToPDF(
image,
pageNumberPosition,
margin,
startingPage,
endingPage,
startingNumber,
textSize
);
/*
image is a base64 data string
pageSize? : optional : is one of the following string
- Same as Image
- 2A0 , 4A0 , A[0-10] , B[0-10] , C[0-9] , Executive , Folio , Legal , Letter , RA[0-4] , SR[0-4] , Tabloid
pageOrientation? : optional : should pe portrait in case of Same as Image
imagePosition? : optional : should be Start in case of Same as Image
degree? : rotate created PDF
marginMillimeter? : optional paramenter : array of length 4
marginMillimeter[0] -> Left
marginMillimeter[1] -> Top
marginMillimeter[2] -> Right
marginMillimeter[3] -> Bottom
*/
```
## Installation
### NPM Module
To install the latest stable version:
- With npm
```bash
npm install --save pdf-actions
```
- With yarn
```bash
yarn add pdf-actions
```
This assumes you're using [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/lang/en/) as your package manager.
## Documentation
The repo for the project site (and generated documentation files) is
located here: https://github.com/ManasMadan/pdf-actions
## License
[MIT](LICENSE.md)