Developers/JavaScript SDK

JavaScript SDK for FlexiDoc

Official JavaScript/TypeScript library for FlexiDoc API. Build document conversion features in browsers, Node.js, and modern frameworks.

npm installation
$ npm install flexidoc-js
yarn installation
$ yarn add flexidoc-js
npm versionnpm downloadsBundle sizeLicense

Why Use Our JavaScript SDK?

Browser & Node.js

Works in browsers, Node.js, and serverless environments

TypeScript Support

Built with TypeScript for excellent type safety and IDE support

Promise-Based

Modern async/await API with built-in retry logic

Tree-Shakeable

Modular design for optimal bundle sizes

Works With Your Favorite Framework

FlexiDoc JavaScript SDK is framework-agnostic and works seamlessly with all modern JavaScript frameworks

⚛️

React

🟢

Vue.js

🔺

Angular

Next.js

🟩

Nuxt

🟠

Svelte

Quick Start Examples

Basic Usage

import { FlexiDoc } from 'flexidoc-js';

// Initialize the client
const client = new FlexiDoc('your-api-key');

// Convert PDF to HTML
const file = document.getElementById('file-input').files[0];
const result = await client.pdfToHtml(file);
console.log(result.html);

// Convert HTML to PDF
const pdf = await client.htmlToPdf('<h1>Hello World</h1>');
// Download the PDF
pdf.download('output.pdf');

Browser Usage (CDN)

<!-- Include via CDN -->
<script src="https://cdn.jsdelivr.net/npm/flexidoc-js@latest/dist/flexidoc.min.js"></script>

<script>
// Initialize client
const client = new FlexiDoc('your-api-key');

// Handle file upload
async function convertPDF() {
  const fileInput = document.getElementById('pdf-file');
  const file = fileInput.files[0];
  
  try {
    const result = await client.pdfToHtml(file);
    document.getElementById('output').innerHTML = result.html;
  } catch (error) {
    console.error('Conversion failed:', error);
  }
}
</script>

Node.js Usage

import { FlexiDoc } from 'flexidoc-js';
import fs from 'fs/promises';

const client = new FlexiDoc(process.env.FLEXIDOC_API_KEY);

// Convert PDF file
const pdfBuffer = await fs.readFile('document.pdf');
const result = await client.pdfToHtml(pdfBuffer);

// Save HTML output
await fs.writeFile('output.html', result.html);

// Convert HTML to PDF
const pdf = await client.htmlToPdf('<h1>Report</h1>', {
  format: 'A4',
  margin: { top: '1cm', bottom: '1cm' }
});

await fs.writeFile('output.pdf', pdf);

React Component Example

import React, { useState } from 'react';
import { FlexiDoc } from 'flexidoc-js';

const client = new FlexiDoc(process.env.REACT_APP_FLEXIDOC_KEY);

function PDFConverter() {
  const [html, setHtml] = useState('');
  const [loading, setLoading] = useState(false);

  const handleFileUpload = async (event) => {
    const file = event.target.files[0];
    if (!file) return;

    setLoading(true);
    try {
      const result = await client.pdfToHtml(file, {
        semantic: true,
        extractImages: true
      });
      setHtml(result.html);
    } catch (error) {
      console.error('Conversion failed:', error);
    } finally {
      setLoading(false);
    }
  };

  return (
    <div>
      <input 
        type="file" 
        accept=".pdf" 
        onChange={handleFileUpload}
        disabled={loading}
      />
      {loading && <p>Converting...</p>}
      {html && (
        <div dangerouslySetInnerHTML={{ __html: html }} />
      )}
    </div>
  );
}

TypeScript Support

import { FlexiDoc, ConversionResult, PDFOptions } from 'flexidoc-js';

const client = new FlexiDoc('your-api-key');

// TypeScript interfaces are included
interface CustomOptions extends PDFOptions {
  watermark?: string;
}

async function convertWithTypes(): Promise<void> {
  try {
    // Full type support
    const result: ConversionResult = await client.pdfToHtml(
      file,
      {
        semantic: true,
        preserveLayout: true
      }
    );

    // Access typed properties
    console.log(result.html);
    console.log(result.metadata.pageCount);
    console.log(result.images.length);
  } catch (error) {
    if (error instanceof FlexiDocError) {
      console.error('API Error:', error.code, error.message);
    }
  }
}

Batch Processing

import { FlexiDoc } from 'flexidoc-js';

const client = new FlexiDoc('your-api-key');

// Create batch job
const batch = await client.batch.create({
  name: 'Website PDF Generation',
  conversions: [
    {
      source: 'https://example.com/page1',
      operation: 'html-to-pdf',
      options: { format: 'A4' }
    },
    {
      source: 'https://example.com/page2',
      operation: 'html-to-pdf',
      options: { format: 'A4' }
    }
  ]
});

// Monitor progress
batch.on('progress', (update) => {
  console.log(`Progress: ${update.percentage}%`);
});

batch.on('complete', (results) => {
  console.log('Batch complete!', results);
});

await batch.waitForCompletion();

Error Handling

import { FlexiDoc, FlexiDocError } from 'flexidoc-js';

const client = new FlexiDoc('your-api-key');

try {
  const result = await client.pdfToHtml(file);
} catch (error) {
  if (error instanceof FlexiDocError) {
    switch (error.code) {
      case 'rate_limit':
        console.error(`Rate limited. Retry after ${error.retryAfter}s`);
        break;
      case 'invalid_file':
        console.error('Invalid PDF file');
        break;
      case 'quota_exceeded':
        console.error('Monthly quota exceeded');
        break;
      default:
        console.error('API Error:', error.message);
    }
  } else {
    console.error('Unexpected error:', error);
  }
}

Browser & Runtime Support

Browsers

  • Chrome 90+
  • Firefox 88+
  • Safari 14+
  • Edge 90+

Runtimes

  • Node.js 16+
  • Deno
  • Cloudflare Workers
  • Vercel Edge Runtime

Resources & Support

Documentation

Complete API reference and guides

Read the docs →

GitHub

Source code and issue tracking

View repository →

CodeSandbox

Interactive examples to play with

Try examples →

Start Building with JavaScript

Get your API key and integrate document conversion in minutes