PDF to Image Node.js Examples

Complete Node.js examples for common PDF to Image tasks. See the Node.js SDK guide for installation and result handling.

You can run the examples below with the displayed API credentials. Update the input URLs and filenames as needed. Each Node.js example can be copied and run independently.

Basic examples

Choose file, in-memory, or output-stream handling for the ZIP archive. Stream examples use a binary file stream as their destination.

These basic examples produce a ZIP archive containing PNG images of the PDF pages. The archive variable holds ZIP bytes in the memory variants.

Convert a PDF file

Upload an existing invoice.pdf file.

Save to a file

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setForceZip(true);
client.setOutputFormat("png");
client.convertFileToFile("invoice.pdf", "invoice.zip", (error, filePath) => {
    if (error) {
        console.error(error.toString());
        return;
    }
    console.log("Saved:", filePath);
});

Keep in memory

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setForceZip(true);
client.setOutputFormat("png");
const chunks = [];
let failed = false;
client.convertFile("invoice.pdf", {
    data: (stream) => stream.on("data", (chunk) => chunks.push(chunk)),
    error: (message, statusCode) => {
        failed = true;
        console.error(new pdfcrowd.Pdfcrowd.Error(
            message, statusCode).toString());
    },
    end: () => {
        if (failed) {
            return;
        }
        const archive = Buffer.concat(chunks); // Buffer
        console.log("Archive ready:", archive.length, "bytes");
    }
});

Write to a stream

const pdfcrowd = require('pdfcrowd');
const fs = require('node:fs');
const { pipeline } = require('node:stream');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

let output_stream;
let failed = false;

function fail(error) {
    if (failed) return;
    failed = true;
    console.error(error.toString());
    process.exitCode = 1;
    if (output_stream) output_stream.destroy();
}

try {
    client.setForceZip(true);
    client.setOutputFormat("png");
    client.convertFile("invoice.pdf", {
        data: (stream) => {
            if (failed) {
                stream.destroy();
                return;
            }
            output_stream = fs.createWriteStream("invoice.zip");
            pipeline(stream, output_stream, (error) => {
                if (error) {
                    fail(error);
                    return;
                }
                if (failed) return;
                console.log("Saved:", "invoice.zip");
            });
        },
        error: (message, statusCode) => fail(new pdfcrowd.Pdfcrowd.Error(
            message, statusCode)),
        end: () => {
            console.log("Conversion response ended.");
        },
    });
} catch (error) {
    fail(error);
}

Convert a URL

Fetch a PDF from its URL.

Save to a file

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setForceZip(true);
client.setOutputFormat("png");
client.convertUrlToFile(
    "https://your-server.com/invoice.pdf", "invoice.zip",
    (error, filePath) => {
        if (error) {
            console.error(error.toString());
            return;
        }
        console.log("Saved:", filePath);
    }
);

Keep in memory

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setForceZip(true);
client.setOutputFormat("png");
const chunks = [];
let failed = false;
client.convertUrl("https://your-server.com/invoice.pdf", {
    data: (stream) => stream.on("data", (chunk) => chunks.push(chunk)),
    error: (message, statusCode) => {
        failed = true;
        console.error(new pdfcrowd.Pdfcrowd.Error(
            message, statusCode).toString());
    },
    end: () => {
        if (failed) {
            return;
        }
        const archive = Buffer.concat(chunks); // Buffer
        console.log("Archive ready:", archive.length, "bytes");
    }
});

Write to a stream

const pdfcrowd = require('pdfcrowd');
const fs = require('node:fs');
const { pipeline } = require('node:stream');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

let output_stream;
let failed = false;

function fail(error) {
    if (failed) return;
    failed = true;
    console.error(error.toString());
    process.exitCode = 1;
    if (output_stream) output_stream.destroy();
}

try {
    client.setForceZip(true);
    client.setOutputFormat("png");
    client.convertUrl("https://your-server.com/invoice.pdf", {
        data: (stream) => {
            if (failed) {
                stream.destroy();
                return;
            }
            output_stream = fs.createWriteStream("invoice.zip");
            pipeline(stream, output_stream, (error) => {
                if (error) {
                    fail(error);
                    return;
                }
                if (failed) return;
                console.log("Saved:", "invoice.zip");
            });
        },
        error: (message, statusCode) => fail(new pdfcrowd.Pdfcrowd.Error(
            message, statusCode)),
        end: () => {
            console.log("Conversion response ended.");
        },
    });
} catch (error) {
    fail(error);
}

Convert raw PDF bytes

Read invoice.pdf as binary data. In an application, pass the bytes you already hold in memory instead.

Save to a file

const pdfcrowd = require('pdfcrowd');
const fs = require('node:fs');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

const pdf_data_1 = fs.readFileSync("invoice.pdf"); // Buffer
client.setForceZip(true);
client.setOutputFormat("png");
client.convertRawDataToFile(pdf_data_1, "invoice.zip", (error, filePath) => {
    if (error) {
        console.error(error.toString());
        return;
    }
    console.log("Saved:", filePath);
});

Keep in memory

const pdfcrowd = require('pdfcrowd');
const fs = require('node:fs');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

const pdf_data_1 = fs.readFileSync("invoice.pdf"); // Buffer
client.setForceZip(true);
client.setOutputFormat("png");
const chunks = [];
let failed = false;
client.convertRawData(pdf_data_1, {
    data: (stream) => stream.on("data", (chunk) => chunks.push(chunk)),
    error: (message, statusCode) => {
        failed = true;
        console.error(new pdfcrowd.Pdfcrowd.Error(
            message, statusCode).toString());
    },
    end: () => {
        if (failed) {
            return;
        }
        const archive = Buffer.concat(chunks); // Buffer
        console.log("Archive ready:", archive.length, "bytes");
    }
});

Write to a stream

const pdfcrowd = require('pdfcrowd');
const fs = require('node:fs');
const { pipeline } = require('node:stream');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

let output_stream;
let failed = false;

function fail(error) {
    if (failed) return;
    failed = true;
    console.error(error.toString());
    process.exitCode = 1;
    if (output_stream) output_stream.destroy();
}

try {
    const pdf_data_1 = fs.readFileSync("invoice.pdf"); // Buffer
    client.setForceZip(true);
    client.setOutputFormat("png");
    client.convertRawData(pdf_data_1, {
        data: (stream) => {
            if (failed) {
                stream.destroy();
                return;
            }
            output_stream = fs.createWriteStream("invoice.zip");
            pipeline(stream, output_stream, (error) => {
                if (error) {
                    fail(error);
                    return;
                }
                if (failed) return;
                console.log("Saved:", "invoice.zip");
            });
        },
        error: (message, statusCode) => fail(new pdfcrowd.Pdfcrowd.Error(
            message, statusCode)),
        end: () => {
            console.log("Conversion response ended.");
        },
    });
} catch (error) {
    fail(error);
}

Read from an input stream

Open invoice.pdf as a binary input stream and save the result to invoice.zip.

const pdfcrowd = require('pdfcrowd');
const fs = require('node:fs');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setForceZip(true);
client.setOutputFormat("png");
const input_stream = fs.createReadStream("invoice.pdf");
try {
    client.convertStreamToFile(
        input_stream, "invoice.zip",
        (error, filePath) => {
            input_stream.destroy();
            if (error) {
                console.error(error.toString());
                process.exitCode = 1;
                return;
            }
            console.log("Saved:", filePath);
        }
    );
} catch (error) {
    input_stream.destroy();
    throw error;
}

Customize page images

These examples use report.pdf, a three-page document with text, a chart, and vector graphics. The CropBox variant uses cropbox.pdf, a page with a predefined crop boundary.

Create page previews

Render page 1 of report.pdf directly as a PNG. Use 72 DPI for a compact preview or 300 DPI for more detail at higher pixel dimensions and file size. Selecting one page produces an image file without ZIP packaging.

Compact preview at 72 DPI

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setDpi(72);
client.setOutputFormat("png");
client.setPrintPageRange("1");
client.convertFileToFile("report.pdf", "preview.png", (error, filePath) => {
    if (error) {
        console.error(error.toString());
        return;
    }
    console.log("Saved:", filePath);
});

High-resolution image at 300 DPI

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setDpi(300);
client.setOutputFormat("png");
client.setPrintPageRange("1");
client.convertFileToFile("report.pdf", "page-300dpi.png", (error, filePath) => {
    if (error) {
        console.error(error.toString());
        return;
    }
    console.log("Saved:", filePath);
});

Render selected pages

Render pages 1 and 3 of report.pdf as PNG images in selected-pages.zip. Force ZIP packaging so the result stays an archive even if you later select just one page.

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setForceZip(true);
client.setOutputFormat("png");
client.setPrintPageRange("1,3");
client.convertFileToFile(
    "report.pdf", "selected-pages.zip",
    (error, filePath) => {
        if (error) {
            console.error(error.toString());
            return;
        }
        console.log("Saved:", filePath);
    }
);

Export a JPEG

Convert page 1 of report.pdf into page.jpg for applications that need JPEG input. JPEG is lossy and is not always smaller than PNG, especially for pages dominated by text and flat graphics.

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setOutputFormat("jpg");
client.setPrintPageRange("1");
client.convertFileToFile("report.pdf", "page.jpg", (error, filePath) => {
    if (error) {
        console.error(error.toString());
        return;
    }
    console.log("Saved:", filePath);
});

Crop page images

Extract the chart from page 1 of report.pdf into chart.png, or honor the predefined CropBox in cropbox.pdf to remove its production margins.

The chart example fixes 144 DPI and uses pixel coordinates from the rendered page's top-left corner: X = 96, Y = 370, width = 1024, height = 384. Adjust the coordinates when changing the page layout or DPI. The CropBox variant uses the boundary already stored in the PDF.

Extract a chart region

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setCropAreaHeight(384);
client.setCropAreaWidth(1024);
client.setCropAreaX(96);
client.setCropAreaY(370);
client.setDpi(144);
client.setOutputFormat("png");
client.setPrintPageRange("1");
client.convertFileToFile("report.pdf", "chart.png", (error, filePath) => {
    if (error) {
        console.error(error.toString());
        return;
    }
    console.log("Saved:", filePath);
});

Use the PDF's CropBox

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setOutputFormat("png");
client.setPrintPageRange("1");
client.setUseCropbox(true);
client.convertFileToFile(
    "cropbox.pdf", "cropped-page.png",
    (error, filePath) => {
        if (error) {
            console.error(error.toString());
            return;
        }
        console.log("Saved:", filePath);
    }
);

Create a grayscale image

Render page 1 of report.pdf into grayscale.png, replacing colors with shades of gray while preserving the page dimensions.

const pdfcrowd = require('pdfcrowd');

const client = new pdfcrowd.PdfToImageClient("demo", "demo");

client.setOutputFormat("png");
client.setPrintPageRange("1");
client.setUseGrayscale(true);
client.convertFileToFile("report.pdf", "grayscale.png", (error, filePath) => {
    if (error) {
        console.error(error.toString());
        return;
    }
    console.log("Saved:", filePath);
});