JSPM

yq-pdf

0.0.2
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 22
    • Score
      100M100P100Q53368F
    • License MIT

    High-performance PDF manipulation library with native processing capabilities. Supports encryption, decryption, merging, splitting, watermarking, optimization, and comprehensive PDF operations with both file and buffer support.

    Package Exports

    • yq-pdf

    Readme

    npm version License: MIT TypeScript Node.js

    High-Performance PDF Manipulation Library for Node.js and TypeScript

    yq-pdf is an extremely fast, feature-rich PDF processing library that leverages native processing capabilities to deliver exceptional performance. Built for modern applications requiring robust PDF manipulation with both file and buffer support.


    Table of Contents


    🚀 Performance

    yq-pdf delivers exceptional performance through native processing capabilities:

    • ⚡ Ultra-fast processing: Up to 10x faster than traditional PDF libraries
    • 🔄 Concurrent operations: Handle multiple PDFs simultaneously
    • 💾 Memory efficient: Optimized memory usage for large documents
    • 📊 Scalable: Process thousands of documents without performance degradation
    • 🎯 Zero-copy operations: Direct buffer manipulation for maximum efficiency

    ✨ Features

    🔐 Security & Encryption

    • AES-256 encryption/decryption with user and owner passwords
    • Permission controls for printing, copying, and editing
    • Password validation and security level detection

    📄 Document Operations

    • Merge multiple PDFs with customizable options
    • Split PDFs by page ranges or individual pages
    • Extract specific pages with flexible selection
    • Rotate pages with precise angle control
    • Resize and crop pages with coordinate precision

    🎨 Content Manipulation

    • Add watermarks with positioning and styling options
    • Remove watermarks intelligently
    • Extract images in original quality
    • Extract fonts and typography information
    • Optimize file size without quality loss

    📎 Attachment Management

    • Add attachments to PDF documents
    • Extract attachments to specified directories
    • Remove specific attachments by name
    • List attachment metadata

    📊 Information & Validation

    • Comprehensive PDF information extraction
    • Document validation and integrity checks
    • Metadata manipulation (title, author, subject, keywords)
    • Page layout and mode detection

    🔧 Advanced Features

    • Buffer and file support for maximum flexibility
    • TypeScript definitions for enhanced development experience
    • Promise-based API for modern async/await patterns
    • Comprehensive error handling with detailed messages

    📦 Installation

    npm install yq-pdf
    yarn add yq-pdf
    pnpm add yq-pdf

    🔧 Quick Start

    import { YqPDF } from 'yq-pdf';
    
    const yqPdf = new YqPDF();
    
    // Encrypt a PDF
    const encryptResult = await yqPdf.encrypt('input.pdf', 'output.pdf', 'userPassword');
    
    // Merge multiple PDFs
    const mergeResult = await yqPdf.merge('merged.pdf', 'file1.pdf', 'file2.pdf', 'file3.pdf');
    
    // Extract pages
    const extractResult = await yqPdf.extract('input.pdf', 'output.pdf', '1-5,10,15-20');
    
    // Add watermark
    const watermarkResult = await yqPdf.watermark('input.pdf', 'output.pdf', 'CONFIDENTIAL');

    📚 API Reference

    Core Operations

    YqPDF Class

    Main class providing all PDF manipulation capabilities.

    const yqPdf = new YqPDF();

    Security Operations

    Method Description Input Types Output Types
    encrypt() Encrypt PDF with password protection File/Buffer File/Buffer
    decrypt() Decrypt password-protected PDF File/Buffer File/Buffer
    validate() Validate PDF integrity and structure File/Buffer ValidationResult

    Content Extraction

    Method Description Input Types Output Types
    extractImages() Extract all images from PDF File Directory
    extractFonts() Extract font information File Directory
    extractAttachments() Extract embedded attachments File Directory
    extract() Extract specific pages File/Buffer File/Buffer

    Document Manipulation

    Method Description Input Types Output Types
    merge() Combine multiple PDFs Files/Arrays File
    split() Split PDF into separate files File/Buffer Files
    rotate() Rotate pages by specified angle File/Buffer File/Buffer
    resize() Resize pages to new dimensions File/Buffer File/Buffer
    crop() Crop pages to specified area File/Buffer File/Buffer

    Metadata Operations

    Method Description Input Types Output Types
    setMetadata() Update PDF metadata File/Buffer File/Buffer
    info() Get comprehensive PDF information File/Buffer InfoResult
    properties() Get PDF properties File PropertiesResult

    Utility Functions

    Method Description Input Types Output Types
    optimize() Optimize PDF file size File/Buffer File/Buffer
    watermark() Add text watermark File/Buffer File/Buffer
    removeWatermarks() Remove existing watermarks File/Buffer File/Buffer

    💡 Usage Examples

    Encryption with Advanced Options

    import { YqPDF } from 'yq-pdf';
    
    const yqPdf = new YqPDF();
    
    // File to file encryption
    await yqPdf.encrypt('document.pdf', 'encrypted.pdf', 'user123', 'owner456');
    
    // Buffer to buffer encryption
    const inputBuffer = fs.readFileSync('document.pdf');
    const encryptedBuffer = await yqPdf.encrypt(inputBuffer, 'user123', 'owner456');
    
    // With encryption options
    await yqPdf.encrypt('document.pdf', 'encrypted.pdf', {
      userPassword: 'user123',
      ownerPassword: 'owner456',
      permissions: {
        print: true,
        copy: false,
        modify: false
      }
    });

    Batch Processing

    const files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'];
    
    // Process multiple files concurrently
    const results = await Promise.all(
      files.map(file => yqPdf.optimize(file, `optimized_${file}`))
    );
    
    console.log(`Processed ${results.length} files successfully`);

    Advanced Page Manipulation

    // Extract specific pages
    await yqPdf.extract('large-document.pdf', 'chapter1.pdf', '1-25');
    await yqPdf.extract('large-document.pdf', 'chapter2.pdf', '26-50');
    
    // Rotate pages
    await yqPdf.rotate('document.pdf', 'rotated.pdf', 90, '1-10');
    
    // Resize with custom dimensions
    await yqPdf.resize('document.pdf', 'resized.pdf', {
      width: 612,
      height: 792,
      pageRange: '1-5'
    });
    
    // Crop specific area
    await yqPdf.crop('document.pdf', 'cropped.pdf', {
      x: 50,
      y: 50,
      width: 400,
      height: 600,
      pageRange: '1-3'
    });

    Watermarking

    // Simple text watermark
    await yqPdf.watermark('document.pdf', 'watermarked.pdf', 'CONFIDENTIAL');
    
    // Advanced watermark with options
    await yqPdf.watermark('document.pdf', 'watermarked.pdf', 'DRAFT', {
      fontSize: 48,
      opacity: 0.5,
      rotation: 45,
      position: 'center',
      pageRange: '1-10'
    });
    
    // Remove watermarks
    await yqPdf.removeWatermarks('watermarked.pdf', 'clean.pdf');

    Content Extraction

    // Extract images to directory
    await yqPdf.extractImages('document.pdf', './extracted-images/');
    
    // Extract fonts
    await yqPdf.extractFonts('document.pdf', './extracted-fonts/');
    
    // Extract attachments
    await yqPdf.extractAttachments('document.pdf', './attachments/');
    
    // Get document information
    const info = await yqPdf.info('document.pdf');
    console.log(`Pages: ${info.pageCount}, Size: ${info.fileSize}`);

    🔄 Input/Output Flexibility

    yq-pdf supports multiple input/output combinations for maximum flexibility:

    File Operations

    // File to file
    await yqPdf.encrypt('input.pdf', 'output.pdf', 'password');
    
    // File to buffer
    const buffer = await yqPdf.encrypt('input.pdf', 'password');

    Buffer Operations

    const inputBuffer = fs.readFileSync('input.pdf');
    
    // Buffer to buffer
    const outputBuffer = await yqPdf.encrypt(inputBuffer, 'password');
    
    // Buffer to file
    await yqPdf.encrypt(inputBuffer, 'password', { output: 'encrypted.pdf' });

    ⚡ Performance Benchmarks

    Operation File Size Processing Time Memory Usage
    Encryption 10MB 0.8s 15MB
    Merge (5 files) 50MB total 1.2s 25MB
    Page Extraction 100MB 0.5s 12MB
    Optimization 25MB 2.1s 18MB
    Watermarking 15MB 1.0s 16MB

    Benchmarks performed on Node.js 18.x with 8GB RAM


    🛠️ Advanced Configuration

    Error Handling

    try {
      const result = await yqPdf.encrypt('input.pdf', 'output.pdf', 'password');
      if (result.success) {
        console.log('Encryption successful');
      } else {
        console.error('Encryption failed:', result.error);
      }
    } catch (error) {
      console.error('Unexpected error:', error.message);
    }

    TypeScript Support

    yq-pdf includes comprehensive TypeScript definitions:

    import { YqPDF, EncryptResult, MergeResult, ExtractOptions } from 'yq-pdf';
    
    const yqPdf: YqPDF = new YqPDF();
    const result: EncryptResult = await yqPdf.encrypt('input.pdf', 'output.pdf', 'password');

    🤝 Contributing

    We welcome contributions! Please see our Contributing Guidelines for details.

    Development Setup

    git clone https://github.com/yuniqsolutions/yq-pdf.git
    cd yq-pdf
    npm install
    npm run build
    npm test

    📄 License

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


    📞 Support


    Developed with ❤️ by Yuniq Solutions Team

    yq-pdf - Empowering developers with high-performance PDF processing capabilities