---
title: "Top JavaScript PDF generator libraries for 2026"
canonical_url: "https://www.nutrient.io/blog/top-js-pdf-libraries/"
md_url: "https://www.nutrient.io/blog/top-js-pdf-libraries.md"
last_updated: "2026-08-19T10:38:42.544Z"
description: "Compare the best JavaScript PDF generator libraries — PDFKit, jsPDF, PDF-lib, pdfmake, Puppeteer, and Nutrient — with features, use cases, and code examples to help you choose the right one for your project."
---

**TL;DR**

This guide compares the top JavaScript PDF generator libraries for 2026, including:

- [Nutrient Web SDK](#1-nutrient-web-sdk-enterprise-javascript-pdf-generator-and-viewer)

- [PDFKit](#2-pdfkit-a-nodejs-javascript-pdf-generator)

- [jsPDF](#3-jspdf-browser-based-javascript-pdf-generator)

- [PDF-lib](#4-pdf-lib-javascript-pdf-generator-and-modifier)

- [pdfmake](#5-pdfmake-declarative-javascript-pdf-generator)

- [Puppeteer](#6-puppeteer-headless-chrome-javascript-pdf-generator)

It includes code examples for each library in Node.js and browser environments.

A JavaScript PDF generator library abstracts the PDF file format so you can create, modify, and export documents programmatically in the browser or in Node.js. Instead of working with raw byte streams, you use a high-level API to add text, images, shapes, and fonts, control layout and pagination, merge or split files, and stream downloads to users.

**The best JavaScript PDF generator depends on the use case: [jsPDF](#3-jspdf-browser-based-javascript-pdf-generator) and [PDFKit](#2-pdfkit-a-nodejs-javascript-pdf-generator) for lightweight generation, [PDF-lib](#4-pdf-lib-javascript-pdf-generator-and-modifier) to modify existing PDFs, [pdfmake](#5-pdfmake-declarative-javascript-pdf-generator) for declarative document definitions, [Puppeteer](#6-puppeteer-headless-chrome-javascript-pdf-generator) to render HTML and CSS to PDF, and [Nutrient Web SDK](#1-nutrient-web-sdk-enterprise-javascript-pdf-generator-and-viewer) for enterprise features — forms, annotations, and signatures — with dedicated support.**

## 1. Nutrient Web SDK: Enterprise JavaScript PDF generator and viewer![JavaScript PDF Viewer Nutrient Web SDK Standalone](@/assets/images/blog/2023/the-6-best-javascript-pdf-viewers/pspdfkit-javascript-pdf-viewer.png)

[Nutrient Web SDK](https://www.nutrient.io/guides/web/pdf-generation.md) is an enterprise-grade JavaScript library for generating, viewing, and editing PDFs in the browser. It provides accurate rendering, annotation, and collaboration features.

### PDF generation capabilities

- **[Create from template](https://www.nutrient.io/guides/web/pdf-generation/from-pdf-template.md)** — Insert text or images and prefill forms using existing PDF or Word templates.

- **[Generate from images](https://www.nutrient.io/guides/web/pdf-generation/from-images.md)** — Convert JPG, PNG, or TIFF files into PDF documents.

- **[Thumbnail previews](https://www.nutrient.io/guides/web/pdf-generation/thumbnail-preview.md)** — Render PDF pages as thumbnail images for gallery or navigation UIs.

- **Saving options** — Export your generated PDFs to an `ArrayBuffer` or browser storage, or upload to a remote server.

- **[Headless operation](https://www.nutrient.io/guides/web/pdf-generation/headless.md)** — Produce PDFs without displaying any UI components — ideal for automated backend workflows.

- **Extendable** — Seamlessly add features like [form filling](https://www.nutrient.io/guides/web/forms/form-filling.md), [digital signing](https://www.nutrient.io/guides/web/signatures/fill-and-sign-forms.md), [annotation](https://www.nutrient.io/guides/web/annotations.md), [collaboration](https://www.nutrient.io/guides/web/instant-synchronization.md), and more.

### When to use Nutrient Web SDK as your JavaScript PDF generator

- Enterprise applications needing robust PDF generation workflows (invoices, reports, contracts)

- Scenarios combining generation with interactive editing, annotation, and real-time collaboration in the browser

- Use cases requiring server-side PDF automation integrated with a client-side viewer

- Projects that need high security (encryption, access controls) and audit trails during PDF creation

- Teams seeking an integrated solution for both generation and rich document interactions

### Getting started with Nutrient Web SDK

Install the `@nutrient-sdk/viewer` package:

```bash

npm install @nutrient-sdk/viewer

# or

yarn add @nutrient-sdk/viewer

# or

pnpm install @nutrient-sdk/viewer

```

To run Nutrient Web SDK in the browser, copy the required library files (artifacts) to your `assets` folder:

```bash

cp -R./node_modules/@nutrient-sdk/viewer/dist/./assets/

```

Make sure your `assets/` folder contains:

- `nutrient-viewer.js` (entry point)

- A `nutrient-viewer-lib/` directory with the required runtime assets

### Integrating into your project

1. Add the PDF document you want to display (e.g. `document.pdf`) to the root of your project. You can use our [demo document](https://www.nutrient.io/example.pdf) as an example.

2. Create your HTML file (e.g. `index.html`) with a viewer container and a download button:

```html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Nutrient PDF Generator Example</title>
    <script src="assets/nutrient-viewer.js"></script>
  </head>
  <body>
    <!-- 1. Download button -->

    <button id="download-btn">Download PDF</button>
    <!-- 2. PDF viewer mount point -->

    <div id="nutrient" style="width:100%; height:80vh;"></div>
    <script src="index.js"></script>
  </body>
</html>

```

3. In your main JavaScript file (e.g. `index.js`), load the viewer using the global `window.NutrientViewer` API:

   ```js

   let instance;

   // 1. Load the Nutrient viewer.
   window.NutrientViewer.load({
     container: "#nutrient",

     document: "example.pdf", // Path to your PDF document.
   }).then((inst) => {
       instance = inst;
     }).catch((err) => {
       console.error("Viewer load error:", err);
     });

   // 2. Hook up the Download button.
   document.getElementById("download-btn").addEventListener("click", async () => {
       if (!instance) return console.warn("Viewer not ready");

       try {
         // Export the current PDF as a buffer.
         const buffer = await instance.exportPDF();

         // Create a Blob and trigger download.
         const blob = new Blob([buffer], { type: "application/pdf" });
         const url = URL.createObjectURL(blob);
         downloadPdf(url);
         URL.revokeObjectURL(url);
       } catch (err) {
         console.error("Export/download failed:", err);
       }
     });

   // 3. Generic download helper.
   function downloadPdf(href) {
     const a = document.createElement("a");
     a.href = href;
     a.download = "download.pdf";
     document.body.appendChild(a);
     a.click();
     document.body.removeChild(a);
   }
   ```

Clicking **Download PDF** exports the document — including annotations and form data — as a `Blob` and triggers a browser download.

### Run the project

Use a static file server like `serve` to launch your site locally:

```bash

npx serve.

# or

npm install --global serve && serve.

```

Navigate to `http://localhost:3000` to view the website.

Related reading:

- [Automate your document creation with a PDF generator](https://www.nutrient.io/blog/pdf-generation-automated/)

- [Node.js PDF generator: How to generate PDFs from HTML with Node.js](https://www.nutrient.io/blog/how-to-generate-pdf-from-html-with-nodejs.md)

- [How to export to PDF using React](https://www.nutrient.io/blog/how-to-export-to-pdf-using-react/)

- [How to generate PDF event tickets](https://www.nutrient.io/blog/how-to-generate-pdf-event-tickets/)

- [How to generate PDF invoices from HTML in Java](https://www.nutrient.io/blog/how-to-generate-pdf-invoices-from-html-in-java/)

- [How to build a PowerPoint (PPT/PPTX) viewer in JavaScript](https://www.nutrient.io/blog/how-to-build-a-powerpoint-viewer-using-javascript.md)

- [How to open Excel (XLS and XLSX) files in the browser with JavaScript](https://www.nutrient.io/blog/how-to-open-excel-file-using-javascript/)

- [How to build a React.js file viewer: PDF, image, MS Office](https://www.nutrient.io/blog/how-to-build-a-reactjs-file-viewer.md)

- [How to open Word (DOC and DOCX) files in the browser with JavaScript](https://www.nutrient.io/blog/how-to-open-word-file-in-browser-with-javascript/)

### Additional Nutrient PDF generation tools

Nutrient also provides PDF generation SDKs for other platforms:

- **[Nutrient Node.js SDK](https://www.nutrient.io/sdk/nodejs/)** — Advanced server-side PDF creation, manipulation, and optimization for Node.js apps.

- **[Nutrient.NET SDK](https://www.nutrient.io/guides/dotnet/pdf-generation.md)** — PDF generation and processing in.NET desktop or server environments.

- **[Nutrient iOS SDK](https://www.nutrient.io/guides/ios/pdf-generation.md)** — Native PDF creation and export for iOS apps.

- **[Nutrient Android SDK](https://www.nutrient.io/guides/android/pdf-generation.md)** — HTML- and DOCX-to-PDF generation in Android applications.

- **[Nutrient React Native SDK](https://www.nutrient.io/guides/react-native/pdf-generation.md)** — Cross-platform mobile PDF generation with React Native.

- **[Nutrient Flutter SDK](https://www.nutrient.io/guides/flutter/pdf-generation.md)** — PDF creation support for Flutter apps.

- **[Nutrient MAUI SDK](https://www.nutrient.io/guides/maui/pdf-generation.md)** — Cross-platform.NET MAUI PDF generation.

- **[Nutrient Document Engine](https://www.nutrient.io/guides/document-engine/pdf-generation.md)** — Server-side HTML-to-PDF conversion and dynamic document assembly.

- **[Nutrient PDF generation API](https://www.nutrient.io/api/pdf-generator-api/)** — Tech-agnostic HTTP API for generating PDFs from any backend or workflow.

These SDKs cover browser, server, and mobile environments.

## 2. PDFKit: A Node.js JavaScript PDF generator

[PDFKit](https://github.com/foliojs/pdfkit) is a Node.js library for creating multipage PDFs from scratch — text, images, shapes, and custom fonts. Although primarily server-side, it can run in the browser via [Browserify](https://browserify.org/).

### Key PDF generation features

- Create PDFs programmatically in JavaScript (Node.js environment)

- Embed images, vector shapes, and custom fonts

- Stream output to file, HTTP response, or buffer

- (Browser) Use Browserify to bundle PDFKit for client-side generation

### When to use PDFKit as your JavaScript PDF generator

- Server-side invoice/report generation in Node.js

- Complex layout generation where you need full control via code

- Streaming PDFs directly to clients (e.g. on-demand PDF downloads)

### Getting started with PDFKit

1. Initialize a new project and create an entry file (e.g. `app.js`):

   ```bash

   mkdir my-pdfkit-app
   cd my-pdfkit-app
   npm init -y
   touch app.js
   ```

2. Install PDFKit via `npm`:

   ```bash

   npm install pdfkit
   ```

3. Create a PDF in `app.js`:

   ```js

   const PDFDocument = require("pdfkit");
   const fs = require("fs");

   const doc = new PDFDocument();
   doc.pipe(fs.createWriteStream("output.pdf"));
   doc.text("Hello, PDFKit!");
   doc.end();
   ```

4. Run the script using Node.js to generate your PDF:

   ```bash

   node app.js
   ```

   Check your directory for the `output.pdf` file.

Related reading:

- [Python HTML to PDF: Convert HTML to PDF using wkhtmltopdf](https://www.nutrient.io/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-python.md)

- [Generate PDF invoices with PDFKit in Node.js](https://www.nutrient.io/blog/generate-pdf-invoices-pdfkit-nodejs/)

## 3. jsPDF: Browser-based JavaScript PDF generator![jspdf logo](@/assets/images/blog/2024/top-ten-ways-to-convert-html-to-pdf/jspdf.png)

[jsPDF](https://www.npmjs.com/package/jspdf) is a lightweight browser-side JavaScript PDF generator. It creates PDFs in the client from HTML content or JavaScript API calls. It also ships a Node.js build that works without additional setup.

### Key PDF generation features

- Create PDFs directly in the browser (client-side) without server roundtrips

- Add text, images, shapes, and annotations via a simple API

- Generate PDFs from HTML content using plugins (e.g. html2canvas integration)

- Plugin ecosystem for extended capabilities (tables, auto-pagination, custom fonts)

### When to use jsPDF as your JavaScript PDF generator

- Client-side form submissions: Generate and download PDFs in the browser immediately

- Simple reports or invoices from web forms without hitting the server

- Use cases where low bundle size and minimal setup are priorities

- Quick prototyping of PDF output in frontend projects

### Getting started with jsPDF

1. Install jsPDF via `npm`:

   ```bash

   npm install jspdf
   ```

2. Add a basic HTML file to use `jsPDF` in the browser:

   ```html

   <!DOCTYPE html>
   <html lang="en">
     <head>
       <meta charset="UTF-8" />
       <meta name="viewport" content="width=device-width, initial-scale=1.0" />
       <title>jsPDF Example</title>
     </head>
     <body>
       <button id="generate-pdf">Generate PDF</button>

       <script src="node_modules/jspdf/dist/jspdf.umd.min.js"></script>
       <script>
         const { jsPDF } = window.jspdf;

         document.getElementById("generate-pdf").addEventListener("click", function () {
             const doc = new jsPDF();
             doc.text("Hello, jsPDF!", 10, 10);
             doc.save("output.pdf");
           });
       </script>
     </body>
   </html>
   ```

Open the HTML file in a browser and click **Generate PDF**. It creates and downloads a PDF.

Related reading:

- [How to convert HTML to PDF in React](https://www.nutrient.io/blog/how-to-convert-html-to-pdf-using-react.md)

- [Generate PDFs in Salesforce with Lightning web components](https://www.nutrient.io/blog/how-to-generate-a-pdf-with-lightning-web-components/)

- [Generate a PDF from HTML with Vue.js](https://www.nutrient.io/blog/how-to-generate-a-pdf-with-vuejs/)

- [How to use jsPDF and Angular to generate PDFs](https://www.nutrient.io/blog/how-to-generate-pdfs-using-angular/)

- [How to export to PDF using React](https://www.nutrient.io/blog/how-to-export-to-pdf-using-react/)

## 4. PDF-lib: JavaScript PDF generator and modifier

[PDF-lib](https://pdf-lib.js.org/) is a JavaScript library for creating and modifying PDFs in both browser and Node.js environments. It handles generation from scratch and editing existing PDFs — filling forms, merging, and adding annotations.

### Key PDF generation features

- Create new PDFs with pages, text, images, and vector graphics

- Embed custom fonts and images

- Fill and modify existing PDF forms and structure

- Merge or split documents programmatically

- Works natively in the browser and Node.js without external dependencies

### When to use PDF-lib as your JavaScript PDF generator

- Applications needing both generation and modification of PDFs

- Filling out or programmatically editing existing PDF templates

- Merging multiple PDFs or adding dynamic content to an existing document

- Environments where a single library for both client-side and server-side use is ideal

### Getting started with PDF-lib

1. Install the library via `npm`:

   ```bash

   npm install pdf-lib
   ```

2. In `app.js`, generate a PDF:

   ```js

   const { PDFDocument, rgb, StandardFonts } = require("pdf-lib");
   const fs = require("fs");
   async function createPdf() {
     const pdfDoc = await PDFDocument.create();
     const page = pdfDoc.addPage([600, 400]);
     const font = await pdfDoc.embedFont(StandardFonts.HelveticaBold);
     page.drawText("Hello, PDF-lib JavaScript PDF generator!", {
       x: 50,
       y: 350,
       size: 18,
       font,
       color: rgb(0, 0, 0.8),
     });
     const pdfBytes = await pdfDoc.save();
     fs.writeFileSync("output.pdf", pdfBytes);
   }
   createPdf();
   ```

3. Run your script to generate the PDF:

   ```bash

   node app.js
   ```

Related reading:

- [How to build a JavaScript PDF editor with pdf-lib](https://www.nutrient.io/blog/how-to-build-a-javascript-pdf-editor/)

- [How to add annotations to PDF using Vue.js](https://www.nutrient.io/blog/how-to-add-annotations-to-pdf-using-vuejs/)

- [How to build a Node.js PDF editor with pdf-lib](https://www.nutrient.io/blog/how-to-build-a-nodejs-pdf-editor-with-pdflib/)

- [How to use JavaScript to capture signatures in PDFs](https://www.nutrient.io/blog/how-to-capture-signatures-in-javascript/)

- [How to convert images to PDF in Node.js](https://www.nutrient.io/blog/how-to-convert-image-to-pdf-in-nodejs/)

- [How to fill a PDF form in React](https://www.nutrient.io/blog/how-to-fill-a-pdf-form-in-react/)

- [How to fill PDF forms in Node.js](https://www.nutrient.io/blog/how-to-fill-pdf-form-in-nodejs/)

- [How to programmatically create and fill PDF forms in Angular](https://www.nutrient.io/blog/how-to-programmatically-create-and-fill-pdf-form-in-angular/)

## 5. pdfmake: Declarative JavaScript PDF generator![pdfmake logo](@/assets/images/blog/2024/top-ten-ways-to-convert-html-to-pdf/pdfmake.png)

[pdfmake](https://github.com/bpampuch/pdfmake) is a declarative JavaScript PDF generator that works in both the browser and Node.js. You define the document structure via a JSON-like “document definition” object, and pdfmake handles layout, pagination, and styling.

### Key PDF generation features

- Declarative document definitions (content arrays, styles, tables, lists)

- Built-in support for text styling, tables, lists, images, headers/footers

- Automatic pagination and page breaks based on content

- Embed custom fonts; support for Unicode and RTL languages

- Browser and Node.js support with a consistent API

### When to use pdfmake as your JavaScript PDF generator

- Generating structured reports, invoices, and catalogs where layout is defined declaratively

- Projects where automatic pagination and complex layouts (tables, lists) are needed without manual page management

- Applications requiring rich text styling, headers/footers, and consistent formatting

- Situations where a JSON-based definition simplifies maintenance

### Getting started with pdfmake

1. Install pdfmake via `npm`:

   ```bash

   npm install pdfmake
   ```

2. Use `pdfmake` in the browser with the following HTML file:

   ```html

   <!DOCTYPE html>
   <html lang="en">
     <head>
       <meta charset="UTF-8" />
       <meta name="viewport" content="width=device-width, initial-scale=1.0" />
       <title>pdfmake Example</title>
     </head>
     <body>
       <button id="generate-pdf">Generate PDF</button>

       <script src="node_modules/pdfmake/build/pdfmake.min.js"></script>
       <script src="node_modules/pdfmake/build/vfs_fonts.js"></script>
       <script>
         document.getElementById("generate-pdf").addEventListener("click", function () {
             const docDefinition = { content: "Hello, pdfmake!" };
             pdfMake.createPdf(docDefinition).download("output.pdf");
           });
       </script>
     </body>
   </html>
   ```

3. Open this HTML file in your browser, and click the **Generate PDF** button to generate and download a PDF.

Related reading:

- [How to convert HTML to PDF with JavaScript](https://www.nutrient.io/blog/html-to-pdf-in-javascript.md)

## 6. Puppeteer: Headless Chrome JavaScript PDF generator![puppeteer logo](@/assets/images/blog/2024/top-ten-ways-to-convert-html-to-pdf/puppeteer.png)

[Puppeteer](https://pptr.dev/) is a Node.js library that controls headless Chrome/Chromium, often used to generate PDFs from webpages or dynamic HTML content. It’s ideal when you need pixel-perfect rendering of complex layouts.

### Key PDF generation features

- Render full webpages or specific DOM elements to PDF via headless browser

- Support for CSS, web fonts, and complex layouts (flex, grid)

- Control page settings: margins, format, headers/footers, print styles

- Automate PDF generation in batch or on demand from dynamic content

### When to use Puppeteer as your JavaScript PDF generator

- Generating PDFs from complex HTML/CSS where the layout must match browser rendering

- Server-side snapshotting of webpages or dynamic reports (dashboards, charts)

- Situations requiring accurate print preview rendering (e.g. invoices styled via CSS)

- Automated workflows or testing pipelines that output PDFs from live pages

### Getting started with Puppeteer

1. Create a new directory and initialize your Node.js project:

   ```bash

   mkdir puppeteer-pdf-app
   cd puppeteer-pdf-app
   npm init -y
   touch generatePDF.js
   ```

2. Install Puppeteer. This also downloads a compatible Chromium binary:

   ```bash

   npm install puppeteer
   ```

3. In `generatePDF.js`, render a webpage to PDF:

   ```js

   const puppeteer = require("puppeteer");

   async function generatePDF() {
     const browser = await puppeteer.launch();
     const page = await browser.newPage();

     await page.goto("https://example.com", {
       waitUntil: "networkidle2",
     });
     await page.pdf({ path: "example.pdf", format: "A4" });

     await browser.close();
   }

   generatePDF();
   ```

4. Run the script:

   ```bash

   node generatePDF.js
   ```

   This saves the rendered page as `example.pdf`.

## Comparison table

| Library       | License    | GitHub stars | PDF creation | PDF modification | Client-side | Server-side | Complexity |
| ------------- | ---------- | ------------ | ------------ | ---------------- | ----------- | ----------- | ---------- |
| **Nutrient**  | Commercial | —            | Yes          | Yes              | Yes         | Yes         | Medium     |
| **PDFKit**    | MIT        | 10.5k+       | Yes          | No               | Yes*        | Yes         | Medium     |
| **jsPDF**     | MIT        | 31k+         | Yes          | No               | Yes         | Yes*        | Low        |
| **PDF-lib**   | MIT        | 8.3k+        | Yes          | Yes              | Yes         | Yes         | Medium     |
| **pdfmake**   | MIT        | 12.2k+       | Yes          | No               | Yes         | Yes         | Low        |
| **Puppeteer** | Apache 2.0 | 93k+         | Yes          | No               | No          | Yes         | Medium     |

* PDFKit runs in the browser via Browserify or its standalone build. jsPDF ships a Node.js build that works without additional setup.

## Common pitfalls with JavaScript PDF generator libraries

- **Font embedding** — Most libraries only bundle a few default fonts. Custom or Unicode fonts need to be explicitly embedded, or text renders as tofu (□□□).

- **CSS fidelity** — Client-side libraries like jsPDF and pdfmake don’t render CSS. Only headless browsers (Puppeteer) produce layout-accurate output from HTML/CSS.

- **Memory limits in the browser** — Generating large PDFs client-side can exhaust browser memory, especially with high-resolution images. Move heavy workloads to the server.

- **Async page loading** — Puppeteer and similar tools need explicit `waitUntil` strategies. Without them, dynamic content (charts, lazy-loaded images) may be missing from the output.

- **File size** — Embedded images and fonts inflate PDF size quickly. Compress images before embedding and subset fonts to include only the glyphs you use.

## Conclusion

For server-side Node.js generation, [PDFKit](https://github.com/foliojs/pdfkit) excels. For client-side downloads, [jsPDF](https://www.npmjs.com/package/jspdf) or [pdfmake](https://github.com/bpampuch/pdfmake) work well. For modifying existing PDFs, [PDF-lib](https://pdf-lib.js.org/) is ideal. For headless HTML-to-PDF conversion, [Puppeteer](https://pptr.dev/) handles complex layouts. For enterprise workflows combining generation, editing, and collaboration, [Nutrient Web SDK](https://www.nutrient.io/guides/web/pdf-generation.md) covers all three. To learn more about Nutrient, contact our [Sales team](https://www.nutrient.io/contact-sales/?=sdk) or try our [demo](https://www.nutrient.io/demo/).

**Related comparisons**

- [PDF.js vs Nutrient](https://www.nutrient.io/blog/pdfjs-vs-nutrient/)

- [React Native PDF libraries](https://www.nutrient.io/blog/react-native-pdf-libraries/)

- [Open source vs. proprietary SDKs](https://www.nutrient.io/blog/proprietary-vs-open-source-pdf-sdks/)

## FAQ

#### Can I generate a PDF from images in the browser with Nutrient?

Yes. Nutrient Web SDK lets you convert JPG/PNG/TIFF images directly into PDF documents on the client side, with no server required. You can also capture thumbnails or full-page exports.

#### How do I automate server‑side PDF generation with Nutrient?

Use the Nutrient Node.js SDK or the PDF generation API to run headless PDF creation workflows. Merge templates, fill forms, insert pages, and apply security settings — all without any UI.

#### Can I create interactive, fillable forms and then generate a PDF?

Yes. Nutrient Web SDK supports form filling in the browser and exporting the filled-in PDF. For server-side, use templates with predefined form fields and programmatically insert values.

#### Is it possible to merge multiple documents into one PDF?

Yes. Nutrient provides APIs to assemble documents by merging PDFs, inserting or reordering pages, and then exporting the combined PDF, either in the browser or via server-side SDKs.

#### What security features are available during PDF generation?

You can apply encryption, set permissions (print, copy, fill), and embed audit‑ready metadata at generation time. Nutrient’s SDKs and API support all major PDF security options.
---

## Related pages

- [The business case for accessibility: Five ways it drives enterprise value](/blog/5-ways-accessibility-drives-enterprise-value.md)
- [Accessibility Untangled Why It Matters Guide](/blog/accessibility-untangled-why-it-matters-guide.md)
- [Advanced Techniques For React Native Ui Components](/blog/advanced-techniques-for-react-native-ui-components.md)
- [`vector_store` holds your indexed documents (see the multimodal RAG post](/blog/agentic-rag.md)
- [Ai Document Automation Extraction To Action](/blog/ai-document-automation-extraction-to-action.md)
- [Ai Legal Assistant Document Authoring](/blog/ai-legal-assistant-document-authoring.md)
- [Start (clears any prior buffer), navigate the document, then stop into a file.](/blog/android-faster-pdf-rendering.md)
- [Android Pdf Out Of Memory Handling](/blog/android-pdf-out-of-memory-handling.md)
- [Angular File Viewer Pdf Image Office Files](/blog/angular-file-viewer-pdf-image-office-files.md)
- [Auto Tagging And Document Accessibility In Dotnet Sdk](/blog/auto-tagging-and-document-accessibility-in-dotnet-sdk.md)
- [Best Document Ai Platforms](/blog/best-document-ai-platforms.md)
- [Best Document Viewers](/blog/best-document-viewers.md)
- [Build Vs Buy Document Extraction](/blog/build-vs-buy-document-extraction.md)
- [The CEO’s AI playbook: Why decision architecture beats model selection](/blog/ceo-ai-playbook-decision-architecture.md)
- [1. Extract and chunk the PDF.](/blog/chat-with-pdf.md)
- [Complete Guide To Pdfjs](/blog/complete-guide-to-pdfjs.md)
- [Construction Document Data Extraction](/blog/construction-document-data-extraction.md)
- [Convert One Drive Files To Pdf In Sharepoint](/blog/convert-one-drive-files-to-pdf-in-sharepoint.md)
- [Create And Edit Pdfs In Flutter](/blog/create-and-edit-pdfs-in-flutter.md)
- [Create Pdfs With React](/blog/create-pdfs-with-react.md)
- [Creating A Document Scanner With Ocr In Python](/blog/creating-a-document-scanner-with-ocr-in-python.md)
- [Creating And Filling Pdf Forms Programmatically In Javascript](/blog/creating-and-filling-pdf-forms-programmatically-in-javascript.md)
- [The CTO’s AI playbook: Why accountability architecture beats orchestration](/blog/cto-ai-playbook-accountability-architecture.md)
- [Digital Signatures](/blog/digital-signatures.md)
- [Digital Workflow Automation](/blog/digital-workflow-automation.md)
- [Document Ai Vs Ocr](/blog/document-ai-vs-ocr.md)
- [Document Extraction Confidence Scores](/blog/document-extraction-confidence-scores.md)
- [Document Viewer](/blog/document-viewer.md)
- [Document Watermarking](/blog/document-watermarking.md)
- [Emerging threats: Your logging system may be an agentic threat vector](/blog/emerging-threats-your-logging-system.md)
- [Extract Patient Data On Premises](/blog/extract-patient-data-on-premises.md)
- [app.py](/blog/extract-text-from-pdf-using-python.md)
- [Fillable Pdf](/blog/fillable-pdf.md)
- [How To Add Digital Signature To Pdf Using React](/blog/how-to-add-digital-signature-to-pdf-using-react.md)
- [How To Build A Dotnet Maui Pdf Viewer](/blog/how-to-build-a-dotnet-maui-pdf-viewer.md)
- [How To Build A Flutter Pdf Viewer](/blog/how-to-build-a-flutter-pdf-viewer.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer-with-pdfjs.md)
- [How To Build A Javascript Pdf Viewer](/blog/how-to-build-a-javascript-pdf-viewer.md)
- [or](/blog/how-to-build-a-nextjs-pdf-viewer.md)
- [How To Build A Powerpoint Viewer Using Javascript](/blog/how-to-build-a-powerpoint-viewer-using-javascript.md)
- [Using Yarn](/blog/how-to-build-a-react-excel-viewer.md)
- [How To Build A React Native Pdf Viewer](/blog/how-to-build-a-react-native-pdf-viewer.md)
- [How To Build A React Powerpoint Viewer](/blog/how-to-build-a-react-powerpoint-viewer.md)
- [How To Build A Reactjs File Viewer](/blog/how-to-build-a-reactjs-file-viewer.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer-with-react-pdf.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer.md)
- [How To Build A Reactjs Viewer With Pdfjs](/blog/how-to-build-a-reactjs-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer With Pdfjs](/blog/how-to-build-a-vuejs-pdf-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer](/blog/how-to-build-a-vuejs-pdf-viewer.md)
- [How To Build An Android Pdf Viewer](/blog/how-to-build-an-android-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Ng2 Pdf Viewer](/blog/how-to-build-an-angular-pdf-viewer-with-ng2-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Pdfjs](/blog/how-to-build-an-angular-pdf-viewer-with-pdfjs.md)
- [How To Convert Docx To Pdf Using Javascript](/blog/how-to-convert-docx-to-pdf-using-javascript.md)
- [How To Convert Docx To Pdf Using Python](/blog/how-to-convert-docx-to-pdf-using-python.md)
- [How To Convert Html To Pdf Using Html2pdf](/blog/how-to-convert-html-to-pdf-using-html2pdf.md)
- [or](/blog/how-to-convert-html-to-pdf-using-react.md)
- [How To Convert Html To Pdf Using Wkhtmltopdf And Csharp](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-csharp.md)
- [or](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-python.md)
- [How To Convert Word To Pdf In Nodejs](/blog/how-to-convert-word-to-pdf-in-nodejs.md)
- [or](/blog/how-to-create-a-react-js-signature-pad.md)
- [How To Create Pdfs With React To Pdf](/blog/how-to-create-pdfs-with-react-to-pdf.md)
- [How To Edit Pdfs Using Ios Pdf Library](/blog/how-to-edit-pdfs-using-ios-pdf-library.md)
- [How To Embed A Pdf Viewer In Your Website](/blog/how-to-embed-a-pdf-viewer-in-your-website.md)
- [How To Extract Tables From Pdf And Images](/blog/how-to-extract-tables-from-pdf-and-images.md)
- [How To Generate Pdf From Html With Nodejs](/blog/how-to-generate-pdf-from-html-with-nodejs.md)
- [base_url tells WeasyPrint where to resolve relative asset paths](/blog/how-to-generate-pdf-reports-from-html-in-python.md)
- [How To Merge Pdfs Using Javascript](/blog/how-to-merge-pdfs-using-javascript.md)
- [How To Ocr Pdfs In Linux](/blog/how-to-ocr-pdfs-in-linux.md)
- [How To Print Pdf In Csharp](/blog/how-to-print-pdf-in-csharp.md)
- [Open an image.](/blog/how-to-use-tesseract-ocr-in-python.md)
- [From an HTML string.](/blog/html-in-pdf-format.md)
- [Html To Pdf In Javascript](/blog/html-to-pdf-in-javascript.md)
- [Javascript Pdf Editors](/blog/javascript-pdf-editors.md)
- [Javascript Pdf Libraries](/blog/javascript-pdf-libraries.md)
- [Linearized Pdf](/blog/linearized-pdf.md)
- [or](/blog/merge-pdfs.md)
- [Swift Package Manager](/blog/mobile-pdf-sdk.md)
- [`elements` come from your document parser — each has a type and content.](/blog/multimodal-rag.md)
- [Nutrient Flutter 6 Bindings Api](/blog/nutrient-flutter-6-bindings-api.md)
- [Nutrient Vs Conga Composer](/blog/nutrient-vs-conga-composer.md)
- [Online Document Viewer](/blog/online-document-viewer.md)
- [Open Pdf In Your Web App](/blog/open-pdf-in-your-web-app.md)
- [Building WCAG 2.2, Section 508, and PDF/UA-compliant PDFs with an SDK](/blog/pdf-accessibility.md)
- [Extract data from PDF files: A developer guide to structured data from PDFs and scans](/blog/pdf-data-extraction-developer-guide.md)
- [Pdf Extraction Benchmark Opendataloader Bench](/blog/pdf-extraction-benchmark-opendataloader-bench.md)
- [Pdf Extraction Document Case Studies](/blog/pdf-extraction-document-case-studies.md)
- [Pdf Page Labels](/blog/pdf-page-labels.md)
- [Pdf Sdk Compliance Security Checklist](/blog/pdf-sdk-compliance-security-checklist.md)
- [Pdf Sdk Performance Benchmark](/blog/pdf-sdk-performance-benchmark.md)
- [Pdf Ua Compliance Guide](/blog/pdf-ua-compliance-guide.md)
- [Pdfjs Accessibility Structtree Printing](/blog/pdfjs-accessibility-structtree-printing.md)
- [Pdfjs Advanced Loading Streaming Workers](/blog/pdfjs-advanced-loading-streaming-workers.md)
- [Pdfjs Annotation Editor Layer](/blog/pdfjs-annotation-editor-layer.md)
- [Pdfjs Area Annotations Canvas Capture](/blog/pdfjs-area-annotations-canvas-capture.md)
- [Pdfjs Coordinate Systems Pdf To Screen](/blog/pdfjs-coordinate-systems-pdf-to-screen.md)
- [Pdfjs Document Outline Bookmarks Metadata](/blog/pdfjs-document-outline-bookmarks-metadata.md)
- [Pdfjs Eventbus Guide](/blog/pdfjs-eventbus-guide.md)
- [macOS](/blog/pdfjs-file-format-conversion-to-pdf.md)
- [macOS](/blog/pdfjs-generating-pdf-thumbnails-pdf2pic.md)
- [Pdfjs Limitations Commercial Upgrade](/blog/pdfjs-limitations-commercial-upgrade.md)
- [Pdfjs Native Annotation Layer Forms](/blog/pdfjs-native-annotation-layer-forms.md)
- [Pdfjs Navigation Zoom Rotation](/blog/pdfjs-navigation-zoom-rotation.md)
- [Pdfjs Pdf Page Manipulation Pdf Lib](/blog/pdfjs-pdf-page-manipulation-pdf-lib.md)
- [Pdfjs React Viewer Setup](/blog/pdfjs-react-viewer-setup.md)
- [Pdfjs Rendering Overlays React Portals](/blog/pdfjs-rendering-overlays-react-portals.md)
- [Pdfjs Server Side Text Extraction](/blog/pdfjs-server-side-text-extraction.md)
- [Pdfjs Sticky Note Annotations](/blog/pdfjs-sticky-note-annotations.md)
- [Pdfjs Text Highlight Annotations](/blog/pdfjs-text-highlight-annotations.md)
- [Pdfjs Text Search Pdffindcontroller](/blog/pdfjs-text-search-pdffindcontroller.md)
- [Pdfjs Thumbnail Sidebar](/blog/pdfjs-thumbnail-sidebar.md)
- [Process Flows](/blog/process-flows.md)
- [React Native Pdf Annotation](/blog/react-native-pdf-annotation.md)
- [Using Yarn](/blog/react-pdf-editor.md)
- [React Pdf Setup Basic Rendering](/blog/react-pdf-setup-basic-rendering.md)
- [or](/blog/sample-blog-updated.md)
- [Sdk Product Updates Q2 2026](/blog/sdk-product-updates-q2-2026.md)
- [Add DWS MCP Server to your Claude Code project.](/blog/teaching-llms-to-read-pdfs.md)
- [Open an image file.](/blog/tesseract-python-guide.md)
- [Define the HTML part of the document.](/blog/top-10-ways-to-generate-pdfs-in-python.md)
- [Top 5 Javascript Pdf Viewers](/blog/top-5-javascript-pdf-viewers.md)
- [Convert an HTML file to PDF.](/blog/top-ten-ways-to-convert-html-to-pdf.md)
- [Vector Pdf](/blog/vector-pdf.md)
- [Wcag2 Accessibility Requirements Documents](/blog/wcag2-accessibility-requirements-documents.md)
- [Web Sdk Is Now Headless](/blog/web-sdk-is-now-headless.md)
- [What Are Annotations](/blog/what-are-annotations.md)
- [What Is A Vpat](/blog/what-is-a-vpat.md)
- [What Is Document Processing](/blog/what-is-document-processing.md)
- [What Is Intelligent Document Processing](/blog/what-is-intelligent-document-processing.md)
- [What Is Pdf Ua](/blog/what-is-pdf-ua.md)
- [Why Pdfium Is A Trusted Platform For Pdf Rendering](/blog/why-pdfium-is-a-trusted-platform-for-pdf-rendering.md)
- [Why Your Ai Agent Hallucinates Pdf Table Data](/blog/why-your-ai-agent-hallucinates-pdf-table-data.md)

