Skip to main content

A-PDF

A-PDF is a fast, command-line tool designed to replace Unicode and Hex text directly within PDF content streams.

Features

  • Direct Stream Replacement: Modifies the underlying PDF streams directly for fast and precise text replacement.
  • Unicode & Hex Support: Replace text using standard string replacements that are automatically encoded to the document's fonts.
  • Spacing Compensation: Automatically compensates for TJ (Text Justification) width adjustments after text replacements to preserve document layout (can be disabled).
  • Strict Mode: Optionally fail replacements if text is missing or the font cannot encode the requested characters.
  • Fallback Font Support: Embed a custom TrueType font when the PDF's subset font lacks a glyph, or disable fallback entirely.
  • Page Selection: Select specific pages to process.

Installation

You can run the tool directly using uv, which will automatically handle dependencies:

uv add apdf # or As a tool: uv tool install apdf
# then Run it
uv run apdf --help

Or simply use it in your standard Python environment.

pip install apdf

# Run 
apdf --help

Usage As Library

from apdf import replace_pdf_text_detailed

rep = replace_pdf_text_detailed(
    input_pdf="Test1.pdf",
    output_pdf="Test1_out.pdf",
    replacements={
        "Old Text": "New Text",
        # "Hello": "World",
        # "2026": "2027", 
    },

    # Optional parameters:
    #pages={2, 3, 4},       # Only these pages
    # pages=2,             # Only page 2
    # pages=range(1, 6),   # Pages 1 through 5
    # pages=None,          # All pages (default)

    # fallback_font="FONT.ttf",
    # font_fallback=True,
    # strict=True,
)

print("Replacements:", rep.replacements)
print("Changed streams:", rep.changed_streams)
print("Scanned streams:", rep.scanned_streams)
print("Missing:", rep.missing)
print("Encoding failures:", rep.encoding_failures)

Usage As CLI Tool

apdf [-h] [-r OLD=NEW] [-nopa] [-s] [-ff FONT.ttf] [-no-ff] [-p PAGELIST] input [output]

Examples

Basic replacement:

apdf input.pdf output.pdf -r "OldText=NewText"

Multiple replacements:

apdf document.pdf updated_document.pdf \
    -r "Draft=Final" \
    -r "2023=2024"

Disable width compensation (if characters are bunching up or spacing is incorrect):

apdf input.pdf output.pdf -r "foo=bar" -nopa

Strict mode (fails if the replacement target is not found):

apdf input.pdf output.pdf -r "foo=bar" -s

Arguments

  • input: The source PDF file.
  • output: (Optional) The destination PDF file. Defaults to output.pdf.
  • -r OLD=NEW: Replace. The text replacement pair. You can supply this argument multiple times.
  • -p 2, -p 2,3,4, or -p 1-5 to edit only selected pages. Without -p, all pages are processed.
  • -nopa: No preserve advance. Do not compensate TJ text widths after making replacements.
  • -s: Strict. Fail if the original text is missing or the selected font cannot encode the new text.
  • -ff FONT.ttf: Fallback font. TrueType font to embed when the PDF's subset font lacks a glyph.
  • -no-ff: No font fallback. Reject missing glyphs instead of embedding a fallback font.

Metadata

Release files for apdf 1.6

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

Source distribution (sdist)

Source distribution for apdf 1.6
File Size Uploaded
apdf-1.6.tar.gz 29.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for apdf 1.6
File Interpreter ABI Platform
apdf-1.6-py3-none-any.whl Python 3 none any Details

Total release size: 57.2 kB

Release files / apdf-1.6.tar.gz

Download URL apdf-1.6.tar.gz
Size 29.6 kB
Tags Source
SHA-256 checksum
How to use checksums
9104f9ea6cbf393c9966dced3cbeaf0ae84ec954a9c681cef90a148f3edcdc40
BLAKE2b-256 checksum
How to use checksums
411ace17aae56fbc8b9e7015f8134144767c3eebcc8346548a66aa2d194be823
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / apdf-1.6-py3-none-any.whl

Download URL apdf-1.6-py3-none-any.whl
Size 27.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3e8d0f1cd109cdc117c99a02643a49af07125098c8423e66d247da7c6f9fe0a4
BLAKE2b-256 checksum
How to use checksums
f0f58e050498f85d79d1be5a3926e8108a0b7c5a53f7dd2ecbce5e0f1adbe676
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.6 This release

2 release files

1.5

2 release files

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