0.1.8 • Published 8 months ago

pdf-to-images-browser v0.1.8

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

npm version TypeScript

PDF to Images Browser

A lightweight, browser-based library for converting PDF files to images with ease. Built with PDF.js, this package provides a simple yet powerful API to transform PDF documents into high-quality PNG or JPEG images.

Features

  • 🔌 Just plug and play - no setup or configuration needed
  • 🌐 Browser-only implementation with zero server dependencies
  • 🎯 Works out of the box - all complexity handled internally
  • 🖼️ Automatic worker initialization and bundling
  • 💪 Built-in canvas rendering and image conversion
  • 🎨 Smart defaults that just work
  • 📦 Multiple output formats (PNG/JPEG) and types (base64, buffer, blob, dataURL)
  • ⚡ Convert specific pages or page ranges
  • 🛡️ Robust error handling and TypeScript support
  • 🧠 Super memory efficient with batch processing and cleanup

Demo

Table of Contents

Installation

npm install pdf-to-images-browser

Quick Start

import pdfToImages from 'pdf-to-images-browser';

// Convert PDF file to images
const handlePDFConversion = async (file: File) => {
  try {
    const images = await pdfToImages(file, {
      format: 'png',
      output: 'dataurl',
    });

    console.log(`Converted ${images.length} pages`);
  } catch (error) {
    console.error('Conversion failed:', error);
  }
};

API Reference

Main Function

pdfToImages(source: PDFSource, options?: PDFToImagesOptions): Promise<PDFToImagesResult>

Parameters

source: PDFSource

The PDF document to convert. Accepts:

  • File object
  • URL string
  • Base64 string
  • ArrayBuffer
  • URL object

options: PDFToImagesOptions

Optional configuration object with the following properties:

OptionTypeDefaultDescription
format'png' \| 'jpg''png'Output image format
scalenumber1.0Scale factor for the output images
pagesPDFPageSelection'all'Which pages to convert
output'buffer' \| 'base64' \| 'blob' \| 'dataurl''base64'Output format
docParamsPDFDocumentParamsundefinedAdditional PDF.js parameters
batchSizenumber3Number of pages to process per batch
batchDelaynumber100Delay in ms between batches
onProgressfunctionundefinedProgress callback function

Page Selection Options

The pages option accepts various formats:

// Convert all pages
pages: 'all'

// Convert only first page
pages: 'first'

// Convert only last page
pages: 'last'

// Convert specific page
pages: 2

// Convert multiple specific pages
pages: [1, 3, 5]

// Convert range of pages
pages: { start: 1, end: 5 }

Examples

Basic Usage with File Input

import pdfToImages from 'pdf-to-images-browser';

const handleFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {
  const file = event.target.files?.[0];
  if (!file) return;

  try {
    const images = await pdfToImages(file, {
      format: 'png',
      output: 'dataurl',
    });

    // Display images
    images.forEach((imageUrl, index) => {
      const img = document.createElement('img');
      img.src = imageUrl as string;
      document.body.appendChild(img);
    });
  } catch (error) {
    console.error('Conversion failed:', error);
  }
};

Converting Specific Pages

// Convert only pages 1, 3, and 5
const images = await pdfToImages(pdfFile, {
pages: [1, 3, 5],
format: 'jpg',
scale: 1.5
});

// Convert a range of pages
const images = await pdfToImages(pdfFile, {
pages: { start: 1, end: 5 },
output: 'blob'
});

Using Different Output Formats

// Get base64 strings
const base64Images = await pdfToImages(pdfFile, {
  output: 'base64',
});

// Get Blob objects
const blobImages = await pdfToImages(pdfFile, {
  output: 'blob',
});

// Get ArrayBuffer objects
const bufferImages = await pdfToImages(pdfFile, {
  output: 'buffer',
});

Progress Tracking

const images = await pdfToImages(pdfFile, {
  onProgress: ({completed, total, batch}) => {
    console.log(`Processed ${completed} of ${total} pages`);
    // Handle new batch of images if needed
    batch.forEach(image => {
      // Process each image in the batch
    });
  },
});

Error Handling

The library throws specific errors that you can catch and handle:

import pdfToImages from 'pdf-to-images-browser';

try {
  const images = await pdfToImages(file);
} catch (error) {
  if (error.name === 'PDFToImagesError') {
    // Handle specific PDF conversion errors
    console.error('PDF conversion error:', error.message);
  } else {
    // Handle other errors
    console.error('Unexpected error:', error);
  }
}

Browser Compatibility

This library works in all modern browsers that support the Canvas API and PDF.js:

Performance Limits

The PDF to Images conversion process is constrained by browser limitations and available system resources. Here are the recommended limits for optimal performance:

ResourceRecommended LimitMaximum LimitNotes
File Size100MB200MBBrowser memory constraints
Page Count100 pages200-300 pagesDepends on content complexity
Page Dimensions5000x5000px8192x8192pxBrowser canvas limits
Scale Factor2.04.0Memory usage increases quadratically

Server-side usage

This library only works in browser environments. Attempting to use it in Node.js or other server-side environments will throw a BrowserEnvironmentError.

Next.js Usage

For Next.js applications, you need to use dynamic imports with SSR disabled to prevent server-side execution errors.

Create a separate component, e.g. PDFConverter.tsx, including the 'use client' directive, and then use it in your pages like this:

"use client";

import dynamic from 'next/dynamic';

const PDFConverter = dynamic(() => import('./PDFConverter'), {
  ssr: false,
});

export default function Page() {
  return <PDFConverter />;
}

Contributing

Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.

License

This project is licensed under the MIT License - see the LICENSE file for details.

0.1.8

8 months ago

0.1.7

8 months ago

0.1.6

8 months ago

0.1.5

8 months ago

0.1.4

8 months ago

0.1.3

8 months ago

0.1.2

8 months ago

0.1.1

8 months ago