pdf-merger-ts
v1.0.1
Published
TypeScript library to merge multiple PDF documents, or parts of them, to a new PDF document. Based on pdf-merger-js.
Maintainers
Readme
pdf-merger-ts
TypeScript rewrite of pdf-merger-js
All credit goes to the original author nbesli for creating the original library.
A TypeScript library to merge multiple PDF documents, or parts of them, to one new PDF document. Works in Node.js and directly in the browser.
The only dependency is pdf-lib so it can run in any JavaScript-only environment without any non-JavaScript dependencies.
Credits
This library is a TypeScript rewrite of pdf-merger-js by nbesli. The original library is an excellent JavaScript solution for PDF merging - this version adds full TypeScript support with type definitions included.
- Original Library: pdf-merger-js
- Original Author: nbesli
- License: MIT (same as original)
Installation
npm install --save pdf-merger-tsOr for global CLI installation:
npm install -g pdf-merger-tsUsage
CLI "pdf-merge"
Usage: pdf-merge [options] <inputFiles...>
merge multiple PDF documents, or parts of them, to a new PDF document
Options:
-V, --version output the version number
-o, --output <outputFile> Merged PDF output file path
-v, --verbose Print verbose output
-s, --silent do not print any output to stdout. Overwrites --verbose
-h, --help display help for commandExample calls
Merge pages 1-2 from the first input with pages 1,2 and 5-7 from the second pdf document:
pdf-merge --output ./merged.pdf ./input1.pdf#1-2 ./input2.pdf#1,2,5-7Node.js
The Node.js version has the following export functions:
saveAsBufferexports a merged PDF as a Buffer.savesaves the PDF under the given filename.setMetadatasets metadata for producer, author, title or creator.resetresets the internal state of the document, to start again.
Example
import PDFMerger from 'pdf-merger-ts';
const merger = new PDFMerger();
await merger.add('pdf1.pdf'); // merge all pages
await merger.add('pdf2.pdf', 2); // merge only page 2
await merger.add('pdf2.pdf', [1, 3]); // merge pages 1 and 3
await merger.add('pdf2.pdf', '4, 7, 8'); // merge pages 4, 7 and 8
await merger.add('pdf3.pdf', '3 to 5'); // merge pages 3 to 5 (3,4,5)
await merger.add('pdf3.pdf', '3-5'); // merge pages 3 to 5 (3,4,5)
// Set metadata
await merger.setMetadata({
producer: "pdf-merger-ts based script",
author: "John Doe",
creator: "John Doe",
title: "My Document"
});
await merger.save('merged.pdf');
// Or export as Buffer:
// const mergedPdfBuffer = await merger.saveAsBuffer();Browser
The browser version has the following export functions:
saveAsBufferexports a merged PDF as a Uint8Array.saveAsBlobexports a merged PDF as a Blob.savestarts a file download directly in the browser.setMetadatasets metadata for producer, author, title or creator.resetresets the internal state of the document, to start again.
React Example
import PDFMerger from 'pdf-merger-ts/browser';
import React, { useEffect, useState } from 'react';
// files: Array of PDF File or Blob objects
const Merger = ({ files }: { files: File[] }) => {
const [mergedPdfUrl, setMergedPdfUrl] = useState<string>();
useEffect(() => {
const render = async () => {
const merger = new PDFMerger();
for (const file of files) {
await merger.add(file);
}
await merger.setMetadata({
producer: "pdf-merger-ts based script"
});
const mergedPdf = await merger.saveAsBlob();
const url = URL.createObjectURL(mergedPdf);
setMergedPdfUrl(url);
};
render().catch(console.error);
return () => {
if (mergedPdfUrl) URL.revokeObjectURL(mergedPdfUrl);
};
}, [files]);
return !mergedPdfUrl ? (
<div>Loading...</div>
) : (
<iframe
height={1000}
src={mergedPdfUrl}
title="pdf-viewer"
width="100%"
/>
);
};TypeScript Support
This library includes full TypeScript type definitions. The main types are:
import PDFMerger, {
Metadata, // PDF metadata interface
PdfInput, // Valid input types
PageSelection // Page selection options
} from 'pdf-merger-ts';API Differences from pdf-merger-js
This library maintains API compatibility with pdf-merger-js. You can switch by simply changing your import:
- import PDFMerger from 'pdf-merger-js';
+ import PDFMerger from 'pdf-merger-ts';Similar Libraries
- pdf-merger-js - The original JavaScript library this is based on.
- pdf-lib - The underlying PDF library used for merging.
- pdf-merge - Has a dependency on PDFtk.
- easy-pdf-merge - Has a dependency on Apache PDFBox.
License
MIT - See LICENSE file for details.
This library is based on pdf-merger-js by nbesli. Thank you for the excellent work!
