Skip to main content

A tool to edit the outline of a PDF file and shift page numbers to match printed ones

Project description

PDF_tools_outline

A simple CLI tool made for all the students who started using PDFs instead of paper book in order to save some weight in their backpack but stumbled into the problem of missing outline and shifted page numbering cause by preface, index and other additions.

GUIDA IN ITALIANO QUI

How to install

uv

uv tool install PDF_tools_outline

pipx

pipx install PDF_tools_outline

Development

Clone the repo and install the hooks. It may be necessary to give execution privileges to hooks files

git clone https://github.com/aGenius05/PDF_outline.git
cp ./hooks/* .git/hooks

uv

It's recommended that you use uv cause it makes everything much simpler

uv sync
uv pip install -e .

manual install

Manual installation is a bit trickier, you'll need python3 and pikepdf module. You should install it in a virtual environment through pip3:

python3 -m venv /path/to/venv/
source /path/to/venv/bin/activate
pip3 install -r requirements.txt
pip3 install -e .

Indeed requirements.txt contains the version I used and it's guaranteed that it will work on you're computer too.

Testing

This project has some automated tests written in the tests/ dir. They are unittest tests and are configured to run before commits and pushes via the hooks. The material used in the tests is described in this file.

Publishing

A Github Action is configured to look for commits on the main branch which also have a tag, build the package for those and publish them automatically on PyPi

Note that the hooks make it impossible to push to main tagged commit that haven't passed unittests first.

It's also possible to manually send a package version to PyPi using the command:

uv build
uv publish

oppure con pip

python3 -m build
python3 -m twine dist/*

Utilizzo

The usage is very simple:

PDF_outline_add [file_input.pdf] [file_index] [file_output.pdf] --start [first_page]

where file_input is the inpput pdf, first_page is the number of the first page in the "wrong" ordering, file_index is the file where the outline lays and file_output is the output's file name. The outline file has the following syntax

[starting page number] [section's name]

Subsections/paragraphs, if present, are written adding one additional space in front of their line:

1 first chapter
 2 section 1.1
 3 section 1.2
  paragraph
...

Pages befor the start of the "real" book, if present, are written using roman numeration:

i prefazione
v indicie
1 inizio libro
...

Gemini Gem

To generate index file it's very useful having a custom Agent for Gemini(Gem). To do so give it the prompt.

TODO

  • compile re
  • export index from existing pdf
  • right numeration on pages with double pages
  • --dry flag instead of --verbose
  • --version flag
  • standard output=input
  • y-ordinate for outline entries?
  • in place edit?
  • tempfile module

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pdf_tools_outline-1.1.3.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pdf_tools_outline-1.1.3-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file pdf_tools_outline-1.1.3.tar.gz.

File metadata

  • Download URL: pdf_tools_outline-1.1.3.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pdf_tools_outline-1.1.3.tar.gz
Algorithm Hash digest
SHA256 711093d94d1d840f66e63711c26a72b6c5929da7f9f6a0968dd60002d1f6bbe2
MD5 58457909bf061f562f5795ace8e6c4bf
BLAKE2b-256 0849793e5fe310083e0b2414e6ee1cf563831330b0cc4cb6bd051c53895e9df2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pdf_tools_outline-1.1.3.tar.gz:

Publisher: python-publish.yml on aGenius05/PDF_tools_outline

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pdf_tools_outline-1.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for pdf_tools_outline-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 fb9c88d94be733cacabeb8391af7f99e45c7103e71182c9c74fff56219e4d503
MD5 e8571a694780eadfac2dbc6b1c63cd37
BLAKE2b-256 4722fef402dfbae7be68a21563245df43c6aa80349f60791c2e0560329449ed2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pdf_tools_outline-1.1.3-py3-none-any.whl:

Publisher: python-publish.yml on aGenius05/PDF_tools_outline

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page