Skip to main content

utilvo-pdf-merger

Lightweight, zero-dependency library for inspecting PDF binary headers (%PDF-1.x), counting /Type /Page objects, validating cross-reference (xref) tables, and merging multiple PDF byte streams into a single document with renumbered indirect objects.

Built as the open-source companion library for the Merge PDF document processing utility, utilvo-pdf-merger allows developers to pre-validate PDF buffers, verify %%EOF markers, count total pages across multi-file batches, and concatenate uncompressed PDF streams programmatically in Node.js, Python, Go, Rust, PHP, Ruby, Elixir, Dart, Swift, Lua, and .NET.

Architecture & How It Works

When combining multiple PDF files into a single document, raw byte concatenation is invalid because each PDF file contains its own independent object numbering (1 0 obj, 2 0 obj, ...) and a byte-offset cross-reference (xref) table at the end of the file:

  1. Header & Integrity Inspection (inspectPdf / inspect_pdf): Reads the first 1,024 bytes of each buffer to verify the %PDF-1.x specification header and scans the trailer for a valid %%EOF marker.
  2. Page Tree Counting (countPdfPages / count_pdf_pages): Scans indirect dictionary objects matching /Type /Page\b(?!s) to count leaf page nodes while excluding parent /Type /Pages catalog containers.
  3. Indirect Object Renumbering & xref Reconstruction (mergePdfBuffers / merge_pdf_bytes): Extracts page content streams across all input documents, assigns sequential object IDs under a unified /Type /Pages root array (/Kids [...]), and calculates exact byte offsets (%010d 00000 n ) to emit a standards-compliant xref table and trailer dictionary.

Installation

Node.js (npm)

npm install utilvo-pdf-merger

Python (PyPI)

pip install utilvo-pdf-merger

Rust (Cargo)

cargo add utilvo-pdf-merger

Go

go get github.com/utilvo/utilvo-pdf-merger

Dart / Flutter

dart pub add utilvo_pdf_merger

Elixir (Hex)

{:utilvo_pdf_merger, "~> 1.0"}

Ruby (RubyGems)

gem install utilvo-pdf-merger

Usage Examples

JavaScript / TypeScript

import { inspectPdf, countPdfPages, mergePdfBuffers } from 'utilvo-pdf-merger';

// 1. Inspect an individual PDF buffer before merging
const info = inspectPdf(pdfBytes);
console.log(info.version, info.pageCount, info.isValid);

// 2. Merge multiple PDF byte buffers into a single PDF document
const mergedBytes = mergePdfBuffers([pdfBufferA, pdfBufferB]);

Python

from utilvo_pdf_merger import inspect_pdf, count_pdf_pages, merge_pdf_bytes

# 1. Validate PDF header, EOF marker, and page count
info = inspect_pdf(pdf_bytes)
print(info["version"], info["page_count"], info["is_valid"])

# 2. Merge multiple PDF byte streams into a unified PDF
merged = merge_pdf_bytes([pdf_a, pdf_b])

Rust

use utilvo_pdf_merger::{inspect_pdf, count_pdf_pages, merge_pdf_buffers};

let info = inspect_pdf(&pdf_bytes);
assert!(info.is_valid);

let merged = merge_pdf_buffers(&[&pdf_a, &pdf_b]);

Go

import utilvopdfmerger "github.com/utilvo/utilvo-pdf-merger"

info := utilvopdfmerger.InspectPdf(pdfBytes)
merged, err := utilvopdfmerger.MergePdfBuffers([][]byte{pdfA, pdfB})

API Reference

Function Parameters Returns Description
inspectPdf / inspect_pdf bytes: Uint8Array | bytes PdfInspectionResult Extracts PDF specification version (1.4–2.0), page count, and %%EOF integrity status.
countPdfPages / count_pdf_pages bytes: Uint8Array | bytes number Counts leaf /Type /Page dictionary entries (excluding /Type /Pages parent nodes).
mergePdfBuffers / merge_pdf_bytes documents: Array<Uint8Array | bytes> Uint8Array | bytes Extracts page content streams and constructs a consolidated PDF document with a unified /Pages root and rebuilt xref table.

License

MIT

Metadata

Release files for utilvo-pdf-merger 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for utilvo-pdf-merger 1.0.1
File Size Uploaded Provenance
utilvo_pdf_merger-1.0.1.tar.gz 4.4 kB Without provenance Details

Release files / utilvo_pdf_merger-1.0.1.tar.gz

Download URL utilvo_pdf_merger-1.0.1.tar.gz
Size 4.4 kB
Tags Source
SHA-256 checksum
How to use checksums
bc4905446a2d3bcb27c9c38edf616952aa66ce2f5e01e2ab78a7fd4128db354b
BLAKE2b-256 checksum
How to use checksums
20b1653c79b786e8134dbfb26cbb6365c2a04ef2fe429ec4f6ad4743c256facb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0

Security for utilvo-pdf-merger 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

1.0.1 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page