pdfdo
Everyday PDF operations from the command line.
Install
uvx pdfdo # run without installing
uv tool install pdfdo # install permanently
pipx install pdfdo # alternative
Use
pdfdo # interactive menu
pdfdo img2pdf scan1.jpg scan2.jpg -o out.pdf # lossless, keeps original JPEG data
pdfdo merge a.pdf b.pdf -o joined.pdf
pdfdo split report.pdf -d parts/
pdfdo extract report.pdf 2-last -o tail.pdf
pdfdo delete report.pdf 3 -o trimmed.pdf
pdfdo rotate scan.pdf 1,2 -a 90 -o upright.pdf
pdfdo pdf2img report.pdf -d pages/ --dpi 300
pdfdo compress big.pdf -o small.pdf
pdfdo protect private.pdf -o locked.pdf
pdfdo unlock locked.pdf -o open.pdf
pdfdo info report.pdf
pdfdo --version
Page ranges accept 1,3,5-8 and the keyword last, as in 2-last.
protect and unlock prompt for the password if -p is omitted, which keeps it
out of your shell history. Every command that writes refuses to overwrite an
existing file unless you pass --force.
Licence
MIT
Releases
Tagging vX.Y.Z publishes to PyPI via trusted publishing and attaches standalone
binaries for Windows, macOS and Linux to the GitHub release.
Those binaries are unsigned, so macOS Gatekeeper and Windows SmartScreen will warn
on first run. Installing with uv tool install pdfdo or pipx install pdfdo avoids
the warning entirely.
Metadata
Release files for pdfdo 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pdfdo-0.1.0.tar.gz | 109.8 kB | Without provenance | Details for pdfdo-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pdfdo-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for pdfdo-0.1.0-py3-none-any.whl |
Total release size: 134.2 kB
Release files / pdfdo-0.1.0.tar.gz
| Download URL | pdfdo-0.1.0.tar.gz |
|---|---|
| Size | 109.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0989fd3922ee930bb0922442b25aed48437128e0419f195a283a5367dc179df3
|
|
BLAKE2b-256 checksum How to use checksums |
9724a48f9c9513fdb8750bd326ebba62fb9d03d0d8aaa0aa8a16be5b8c3a8508
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pdfdo-0.1.0-py3-none-any.whl
| Download URL | pdfdo-0.1.0-py3-none-any.whl |
|---|---|
| Size | 24.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d9e17d7b645e199279d136f5d48fe8825373955ecab6eb4b4a2b0d69724bc5c0
|
|
BLAKE2b-256 checksum How to use checksums |
dfb0139019ce0c2ef9cf64f0adc48d011d3e2e516035848f1d4a77f09df6755d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for pdfdo 0.1.0
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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.