{"id":19003909,"url":"https://github.com/py-pdf/pdfly","last_synced_at":"2025-09-01T14:31:56.489Z","repository":{"id":38010215,"uuid":"479840531","full_name":"py-pdf/pdfly","owner":"py-pdf","description":"CLI tool to extract (meta)data from PDF and manipulate PDF files","archived":false,"fork":false,"pushed_at":"2024-06-27T10:15:06.000Z","size":1681,"stargazers_count":75,"open_issues_count":15,"forks_count":9,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-07-07T09:08:12.618Z","etag":null,"topics":["application","cli","hacktoberfest","pdf","python","terminal","terminal-based"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/py-pdf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-09T20:49:42.000Z","updated_at":"2024-06-27T15:36:48.000Z","dependencies_parsed_at":"2023-11-12T11:30:15.328Z","dependency_job_id":"40ce45cd-43dc-4300-8247-28f30fa8dd4e","html_url":"https://github.com/py-pdf/pdfly","commit_stats":null,"previous_names":["py-pdf/cpdf"],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-pdf%2Fpdfly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-pdf%2Fpdfly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-pdf%2Fpdfly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/py-pdf%2Fpdfly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/py-pdf","download_url":"https://codeload.github.com/py-pdf/pdfly/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231696143,"owners_count":18412361,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["application","cli","hacktoberfest","pdf","python","terminal","terminal-based"],"created_at":"2024-11-08T18:20:42.302Z","updated_at":"2025-09-01T14:31:56.456Z","avatar_url":"https://github.com/py-pdf.png","language":"Python","funding_links":[],"categories":["docs","Python"],"sub_categories":[],"readme":"[![Pypi latest version](https://img.shields.io/pypi/v/pdfly.svg)](https://pypi.org/pypi/pdfly#history)\n[![Python Support](https://img.shields.io/pypi/pyversions/pdfly.svg)](https://pypi.org/project/pdfly/)\n[![License: BSD 3 Clause](https://img.shields.io/badge/License-BSD%203%20Clause-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0)\n[![Documentation Status](https://readthedocs.org/projects/pdfly/badge/?version=latest)](https://pdfly.readthedocs.io/en/latest/?badge=latest)\n\n[![build status](https://github.com/py-pdf/pdfly/workflows/CI/badge.svg)](https://github.com/py-pdf/pdfly/actions?query=branch%3Amain)\n[![GitHub last commit](https://img.shields.io/github/last-commit/py-pdf/pdfly)](https://github.com/py-pdf/pdfly)\n[![issues closed](https://img.shields.io/github/issues-closed/py-pdf/pdfly)](https://github.com/py-pdf/pdfly/issues)\n[![PRs closed](https://img.shields.io/github/issues-pr-closed/py-pdf/pdfly)](https://github.com/py-pdf/pdfly/pulls)\n\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Pull Requests Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com)\n[![first-timers-only Friendly](https://img.shields.io/badge/first--timers--only-friendly-blue.svg)](http://www.firsttimersonly.com/)\n\n# pdfly\n\npdfly (say: PDF-li) is a pure-python cli application for manipulating PDF files.\n\n## Installation\n\n```bash\npip install -U pdfly\n```\n\nAs `pdfly` is an application, you might want to install it with [`pipx`](https://pypi.org/project/pipx/).\n\n## Usage\n\n```console\n$ pdfly --help\n\n Usage: pdfly [OPTIONS] COMMAND [ARGS]...\n\n pdfly is a pure-python cli application for manipulating PDF files.\n\n╭─ Options ────────────────────────────────────────────────────────────────────────────╮\n│ --version                                                                            │\n│ --help                    Show this message and exit.                                │\n╰──────────────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ───────────────────────────────────────────────────────────────────────────╮\n│ 2-up                      Create a booklet-style PDF from a single input.            │\n│ cat                       Concatenate pages from PDF files into a single PDF file.   │\n│ compress                  Compress a PDF.                                            │\n| uncompress                Uncompresses a PDF.                                        │\n| extract-annotated-pages   Extract only the annotated pages from a PDF.               |\n│ extract-images            Extract images from PDF without resampling or altering.    │\n│ extract-text              Extract text from a PDF file.                              │\n│ meta                      Show metadata of a PDF file                                │\n│ pagemeta                  Give details about a single page.                          │\n│ rm                        Remove pages from PDF files.                               │\n│ update-offsets            Updates offsets and lengths in a simple PDF file.          │\n│ x2pdf                     Convert one or more files to PDF. Each file is a page.     │\n╰──────────────────────────────────────────────────────────────────────────────────────╯\n```\n\nYou can see the help of every subcommand by typing `--help`:\n\n```console\n$ pdfly 2-up --help\n\n Usage: pdfly 2-up [OPTIONS] PDF OUT\n\n Create a booklet-style PDF from a single input.\n Pairs of two pages will be put on one page (left and right)\n\n usage: python 2-up.py input_file output_file\n\n╭─ Arguments ──────────────────────────────────────────────────────────────────────────╮\n│ *    pdf      PATH  [default: None] [required]                                       │\n│ *    out      PATH  [default: None] [required]                                       │\n╰──────────────────────────────────────────────────────────────────────────────────────╯\n╭─ Options ────────────────────────────────────────────────────────────────────────────╮\n│ --help          Show this message and exit.                                          │\n╰──────────────────────────────────────────────────────────────────────────────────────╯\n```\n\n## Contributors ✨\n\npdfly is a free software project without any company affiliation. We cannot pay\ncontributors, but we do value their contributions 🤗\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"http://martin-thoma.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1658117?v=4?s=100\" width=\"100px;\" alt=\"Martin Thoma\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMartin Thoma\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=MartinThoma\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=MartinThoma\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-MartinThoma\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#infra-MartinThoma\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#maintenance-MartinThoma\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#projectManagement-MartinThoma\" title=\"Project Management\"\u003e📆\u003c/a\u003e \u003ca href=\"#tutorial-MartinThoma\" title=\"Tutorials\"\u003e✅\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://chezsoi.org/lucas/blog/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/925560?v=4?s=100\" width=\"100px;\" alt=\"Lucas Cimon\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLucas Cimon\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/issues?q=author%3ALucas-C\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=Lucas-C\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=Lucas-C\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#maintenance-Lucas-C\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/pastor-robert\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/35646090?v=4?s=100\" width=\"100px;\" alt=\"Rob Adams\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRob Adams\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=pastor-robert\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/Kaos599\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/115716485?v=4?s=100\" width=\"100px;\" alt=\"Harsh \"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHarsh \u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=Kaos599\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/srogmann\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/59577610?v=4?s=100\" width=\"100px;\" alt=\"Sascha Rogmann\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSascha Rogmann\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=srogmann\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/ebotiab\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/62219950?v=4?s=100\" width=\"100px;\" alt=\"Enrique Botía\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEnrique Botía\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=ebotiab\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/kommade\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/99523586?v=4?s=100\" width=\"100px;\" alt=\"kommade\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ekommade\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=kommade\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://spoo.me/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/90309290?v=4?s=100\" width=\"100px;\" alt=\"Zingzy\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eZingzy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=Zingzy\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://wolfram77.github.io\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3179612?v=4?s=100\" width=\"100px;\" alt=\"Subhajit Sahu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSubhajit Sahu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=wolfram77\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://www.kianmeng.org\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/134518?v=4?s=100\" width=\"100px;\" alt=\"Kian-Meng Ang\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKian-Meng Ang\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-kianmeng\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/hwine\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/132412?v=4?s=100\" width=\"100px;\" alt=\"Hal Wine\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHal Wine\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/issues?q=author%3Ahwine\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=hwine\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/philippesamuel\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/32560769?v=4?s=100\" width=\"100px;\" alt=\"philippesamuel\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ephilippesamuel\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=philippesamuel\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"20%\"\u003e\u003ca href=\"https://github.com/marcobrb\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/219329309?v=4?s=100\" width=\"100px;\" alt=\"marcobrb\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emarcobrb\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/py-pdf/pdfly/commits?author=marcobrb\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification\n([emoji key](https://allcontributors.org/docs/en/emoji-key)).\nContributions of any kind welcome!\n\nThe list might not be complete. You can find more contributors via the git\nhistory and [GitHubs 'Contributors' feature](https://github.com/py-pdf/pdfly/graphs/contributors).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpy-pdf%2Fpdfly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpy-pdf%2Fpdfly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpy-pdf%2Fpdfly/lists"}