Git Product home page Git Product logo

pdf-merger-js's Introduction

Description

This node.js library can merge multiple PDF documents, or parts of them, to one new PDF document. It's only dependency is pdf-lib so it can run in any javascript-only environment without any external dependencies.

If you are searching for the legacy version based on pdfjs please install a v3 release. Since v4 we use pdf-lib instead.

This library is inspired by the PHP library PDFMerger and has a very similar API.

Installation

npm install --save pdf-merger-js

Usage

node.js

The node.js version has the following export functions:

  • saveAsBuffer exports a merged pdf as an Buffer.
  • save saves the pdf under the given filename.
  • setMetadata set Metadata for producer, author, title or creator.
  • reset resets the internal state of the document, to start again.

async node.js example

const PDFMerger = require('pdf-merger-js');

var merger = new PDFMerger();

(async () => {
  await merger.add('pdf1.pdf');  //merge all pages. parameter is the path to file and filename.
  await merger.add('pdf2.pdf', 2); // merge only page 2
  await merger.add('pdf2.pdf', [1, 3]); // merge the pages 1 and 3
  await merger.add('pdf2.pdf', '4, 7, 8'); // merge the 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)

  await merger.save('merged.pdf'); //save under given name and reset the internal document
  
  // Export the merged PDF as a nodejs Buffer
  // const mergedPdfBuffer = await merger.saveAsBuffer();
  // fs.writeSync('merged.pdf', mergedPdfBuffer);
})();

Browser

The Browser version has the following export functions:

  • saveAsBuffer exports a merged pdf as an Uint8Array.
  • saveAsBlob exports a merged pdf as a Blob.
  • save starts a file-download directly in the browser.
  • setMetadata set Metadata for producer, author, title or creator.
  • reset resets the internal state of the document, to start again.

Sample - React

import PDFMerger from 'pdf-merger-js/browser';
import React, { useEffect, useState } from 'react';

// files: Array of PDF File or Blob objects
const Merger = (files) => {
  const [mergedPdfUrl, setMergedPdfUrl] = useState();

  useEffect(() => {
    const render = async () => {
      const merger = new PDFMerger();

      for(const file of files) {
        await merger.add(file)
      }

      const mergedPdf = await merger.saveAsBlob();
      const url = URL.createObjectURL(mergedPdf);

      return setMergedPdfUrl(url);
    };

    render().catch((err) => {
      throw err;
    });

    () => setMergedPdfUrl({});
  }, [files, setMergedPdfUrl]);

  return !data ? (
    <>Loading</>
  ) : (
    <iframe
      height={1000}
      src={`${mergedPdfUrl}`}
      title='pdf-viewer'
      width='100%s'
    ></iframe>
  );
};

Sample - Set Metadata

const merger = new PDFMerger();

// Add files

// Set only producer
await merger.setMetadata({
  producer: "Custom Producer",
});

// Set all 4 fields
await merger.setMetadata({
  producer: "Custom Producer",
  author: "Custom Author",
  creator: "Custom Creator",
  title: "Custom Title"
});

Similar libraries

pdf-merger-js's People

Contributors

danmhammer avatar davbrito avatar dependabot[bot] avatar furkangunduz avatar iudex- avatar johnkmzhou avatar lukasloeffler avatar mmyjona avatar mojoaxel avatar nbesli avatar nicolaselopez avatar nixklai avatar prinzhorn avatar rimashmohomed avatar severi avatar uriroos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.