PDF-Writer (PDFHummus)

September 20, 2025 ยท View on GitHub

A fast and free C++ library for creating, parsing and manipulating PDF files and streams.

๐Ÿ“– Documentation | ๐ŸŒ Project Site | ๐ŸŸข NodeJS Wrapper

Prerequisites

  • Compiler: Visual Studio (Windows), GCC/Clang (Linux/macOS)
  • CMake: Download here
  • OpenSSL: Required for PDF2.0 encryption (set PDFHUMMUS_NO_OPENSSL=TRUE to disable)

Project Structure

  • PDFWriter: Main library implementation
  • PDFWriterTesting: Test code for ctest
  • FreeType, LibAesgm, LibJpeg, LibPng, LibTiff, Zlib: Bundled dependencies

Quick Start

# Build
mkdir build && cd build
cmake ..
cmake --build . --config Release

# Test
ctest --test-dir . -C Release

# Install
cmake --install . --prefix ./install --config Release

CMake Options

OptionDefaultDescription
PDFHUMMUS_NO_DCTFALSEExclude DCT decoding support/Detach LibJpeg dependency
PDFHUMMUS_NO_TIFFFALSEExclude TIFF Images support/Detach LibTiff dependency
PDFHUMMUS_NO_PNGFALSEExclude PNG Images support/Detatch LibgPng dependency
PDFHUMMUS_NO_OPENSSLFALSEExclude PDF2.0 encryption/Detach OpenSSL dependency
USE_BUNDLEDTRUEUse bundled dependencies
USE_UNBUNDLED_FALLBACK_BUNDLEDFALSEFallback to bundled if system libs not found
BUILD_FUZZING_HARNESSFALSEEnable fuzz testing

Example: cmake .. -DUSE_BUNDLED=FALSE

Using in Your Project

include(FetchContent)
FetchContent_Declare(
  PDFHummus
  GIT_REPOSITORY https://github.com/galkahana/PDF-Writer.git
  GIT_TAG        v4.6.2
  FIND_PACKAGE_ARGS
)
FetchContent_MakeAvailable(PDFHummus)
target_link_libraries(YourTarget PDFHummus::PDFWriter)

Option 2: find_package

find_package(PDFHummus REQUIRED)
target_link_libraries(YourTarget PDFHummus::PDFWriter)

Option 3: Copy Sources

Simply copy the source folders to your project and include them directly.

Development

Testing

# Run tests
ctest --test-dir build -C Release -j8

# Build and test 
cmake --build build --target pdfWriterCheck --config Release

Test output files: ./build/Testing/Output

VS Code Setup

Install these extensions:

  • C/C++ Extension Pack
  • CMake Tools
  • CMake Test Explorer

Packaging

cd build && cpack .

Development Guidelines

For detailed development guidelines, coding standards, and contribution patterns, see CLAUDE.md. This document contains:

  • Project coding standards and conventions
  • Build commands and configuration options
  • Error handling patterns and best practices
  • Testing guidelines and organizational structure

This documentation is also optimized for AI-assisted development with Claude Code.

Additional Build Instructions

iOS: See build guide

Manual builds: All PDFWriter sources are in the PDFWriter folder. Link against Zlib, LibTiff, LibJpeg, LibPng, FreeType, and OpenSSL.