Manipulator
The @pdfme/manipulator
package provides powerful utilities for manipulating PDF files. It can be used in both Node.js and browser environments.
Installation
npm install @pdfme/manipulator
Features
merge
Combines multiple PDF files into a single PDF.
import { merge } from '@pdfme/manipulator';
const pdf1 = new ArrayBuffer(...); // First PDF
const pdf2 = new ArrayBuffer(...); // Second PDF
const merged = await merge([pdf1, pdf2]);
split
Splits a PDF into multiple PDFs based on page ranges.
import { split } from '@pdfme/manipulator';
const pdf = new ArrayBuffer(...); // Source PDF
const splits = await split(pdf, [
{ start: 0, end: 1 }, // Pages 1-2
{ start: 2, end: 4 }, // Pages 3-5
]);
rotate
Rotates specified pages in a PDF.
import { rotate } from '@pdfme/manipulator';
const pdf = new ArrayBuffer(...); // Source PDF
const result = await rotate(pdf, 90); // Rotate all pages 90 degrees
// Or rotate specific pages:
const result2 = await rotate(pdf, 90, [0, 2]); // Rotate pages 1 and 3
insert
Inserts PDF pages at specified positions.
import { insert } from '@pdfme/manipulator';
const basePdf = new ArrayBuffer(...); // Base PDF
const insertPdf = new ArrayBuffer(...); // PDF to insert
const result = await insert(basePdf, [
{ pdf: insertPdf, position: 1 } // Insert after first page
]);
remove
Removes specified pages from a PDF.
import { remove } from '@pdfme/manipulator';
const pdf = new ArrayBuffer(...); // Source PDF
const result = await remove(pdf, [1, 3]); // Remove pages 2 and 4
move
Moves a page from one position to another within the PDF.
import { move } from '@pdfme/manipulator';
const pdf = new ArrayBuffer(...); // Source PDF
const result = await move(pdf, { from: 0, to: 2 }); // Move first page to third position
organize
Performs multiple PDF operations in sequence.
import { organize } from '@pdfme/manipulator';
const pdf = new ArrayBuffer(...); // Source PDF
const insertPdf = new ArrayBuffer(...); // PDF to insert
const result = await organize(pdf, [
{ type: 'remove', data: { position: 1 } },
{ type: 'insert', data: { pdf: insertPdf, position: 0 } },
{ type: 'rotate', data: { position: 0, degrees: 90 } },
]);
Error Handling
All functions throw descriptive errors when invalid parameters are provided:
- Invalid page numbers:
[@pdfme/manipulator] Invalid page number
- Invalid rotation degrees:
[@pdfme/manipulator] Rotation degrees must be a multiple of 90
- Invalid positions:
[@pdfme/manipulator] Invalid position
- Empty inputs:
[@pdfme/manipulator] At least one PDF is required
Types
type PDFInput = ArrayBuffer;
interface PageRange {
start?: number;
end?: number;
}
interface InsertOperation {
pdf: PDFInput;
position: number;
}
type OrganizeAction =
| { type: 'remove'; data: { position: number } }
| { type: 'insert'; data: { pdf: PDFInput; position: number } }
| { type: 'replace'; data: { pdf: PDFInput; position: number } }
| { type: 'rotate'; data: { position: number; degrees: 0 | 90 | 180 | 270 | 360 } }
| { type: 'move'; data: { from: number; to: number } };
Contact
If you have any questions or suggestions about @pdfme/manipulator
, please reach out via:
- Discord: https://discord.gg/xWPTJbmgNV
- GitHub Issues: https://github.com/pdfme/pdfme/issues