This library provides compress your PDFs using ghostscript
npm install compress-pdfyarn add compress-pdfStarting from version 0.6.0, Ghostscript binaries are automatically downloaded and installed during npm install, similar to how Puppeteer handles browser downloads. This means you can use the library right away without any additional setup! 🎉
The installation script will:
- Detect your operating system (Windows, macOS, or Linux)
- Download the appropriate Ghostscript binaries
- Extract them to the
bin/gsfolder within the package - Set proper executable permissions (on Unix-like systems)
You can control the binary installation behavior using environment variables:
COMPRESS_PDF_SKIP_DOWNLOAD=true: Skip automatic binary download during installationCOMPRESS_PDF_BIN_PATH=/path/to/gs: Use a custom Ghostscript binary path
If you prefer to use system-installed Ghostscript or the automatic download fails, you can install Ghostscript manually:
Ubuntu
sudo apt-get install ghostscript -yMacOS
brew install ghostscriptWindows (Chocolatey)
choco install ghostscriptor download Ghostscript .exe installer
import path from 'path';
import fs from 'fs';
import { compress } from 'compress-pdf';
(async () => {
const pdf = path.resolve(__dirname, 'A17_FlightPlan.pdf');
const buffer = await compress(pdf);
const compressedPdf = path.resolve(__dirname, 'compressed_pdf.pdf');
await fs.promises.writeFile(compressedPdf, buffer);
})();npx compress-pdf --file [PDF_FILE] --output ./compressed.pdf
Options:
--file [PDF_FILE] (REQUIRED)
--output [COMPRESSED_PDF_FILE] (REQUIRED)
--resolution [ebook/printer/screen/prepress]
--compatibilityLevel [NUMBER] The compatibility pdf level
--gsModule [FILE PATH] The directory of ghostscript binaries. Ex: /usr/bin/gs
--pdfPassword The pdf password
--removePasswordAfterCompression [BOOLEAN] Remove pdf password after compression
Option 1: Using Automatic Binary Download (Recommended)
FROM node:18 AS build
WORKDIR /src
COPY package*.json ./
RUN npm i
COPY . .
RUN npm run build
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm i
COPY --from=build /src/build /app/build/
EXPOSE 8080
CMD [ "npm", "start" ]Option 2: Using System Ghostscript
If you prefer to use system-installed Ghostscript, you can skip the automatic download:
FROM node:18 AS build
WORKDIR /src
COPY package*.json ./
RUN COMPRESS_PDF_SKIP_DOWNLOAD=true npm i
COPY . .
RUN npm run build
FROM node:18
WORKDIR /app
RUN apt-get update \
&& apt-get install -y ghostscript
COPY package*.json ./
RUN COMPRESS_PDF_SKIP_DOWNLOAD=true npm i
COPY --from=build /src/build /app/build/
EXPOSE 8080
CMD [ "npm", "start" ]You can see examples in examples folder
This project is under MIT license, see LICENSE.md for details.