Spotlight on pdfly, the Swiss Army knife for PDF files

Project documentation: pdfly.readthedocs.io pdfly is the youngest project of the py-pdf organization. It has been created by Martin Thoma in 2022. It’s simply a CLI tool to manipulate PDF files, written in Python and based on the fpdf2 & pypdf libraries. I’m a maintainer of the project 🙂 What can …

pdfly logo

Project documentation: pdfly.readthedocs.io

pdfly is the youngest project of the py-pdf organization.
It has been created by Martin Thoma in 2022.

It’s simply a CLI tool to manipulate PDF files, written in Python and based on the fpdf2 & pypdf libraries.

I’m a maintainer of the project 🙂

What can it do?

It has meany features, including:

$ pdfly meta minimal-document.pdf
                      Operating System Data
┏━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃         Attribute  Value                     ┃
┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│         File Name  /tmp/minimal-document.pdf │
│  File Permissions  -rw-r--r--                │
│         File Size  16,978 bytes              │
│     Creation Time  2025-10-13 09:44:32       │
│ Modification Time  2025-10-13 09:44:32       │
│       Access Time  2025-10-13 09:44:46       │
└───────────────────┴───────────────────────────┘
                       PDF Data
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃          Attribute  Value                                                    ┃
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│       CreationDate  2022-04-03 18:05:42+02:00                                │
│            Creator  TeX                                                      │
│           Producer  pdfTeX-1.40.23                                           │
│              Pages  1                                                        │
│          Encrypted  None                                                     │
│   PDF File Version  %PDF-1.5                                                 │
│        Page Layout                                                           │
│          Page Mode                                                           │
│             PDF ID  ID1=b'q\x96\xc3\xe3U\xc1|\x9fS\xba\x9a\r\xcap\xcd\xd0'   │
│                     ID2=b'q\x96\xc3\xe3U\xc1|\x9fS\xba\x9a\r\xcap\xcd\xd0'   │
│ Fonts (embedded)                                                           │
│   Fonts (embedded)  /KNEUFH+CMR10                                            │
│        Attachments  []                                                       │
│             Images  0 images (0 bytes)                                       │
└────────────────────┴──────────────────────────────────────────────────────────┘
  • pdfly can also combine files into new PDF documents: it can extract specific pages & merge documents (pdfly cat); selectively remove pages (pdfly rm); convert images to PDF documents (pdfly x2pdf); and even compress documents (pdfly compress) or build booklets (pdfly 2-up & pdfly booklet).

  • pdfly includes some commands to pull out specific content from PDF files: pdfly extract-images & pdfly extract-annotated-text.

  • sometimes you want to edit a PDF file manually, in a text editor.
    But when you do so, you break its xref table, that is an index of byte offsets in the document. pdfly update-offsets is there to save the day, fixing manually-edited PDF documents, so that they can be opened in a PDF viewer again!

Release 0.5.0 & new features

Today we released a new version: pdfly release 0.5.0.

Thanks to several contributors, including developers taking part in Hacktoberfest, new exciting features have been added:

What’s next?

We have a bunch of feature ideas: up-for-grabs issues, including some good first issues aimed specially at new contributors, that are willing to help but new to open-source.

Personally, I think the pdfly sign & check-sign could become handy to many end-users, and I think we should continue to extend those commands usage options, as described in issue #71.

We would also be happy to get your feedbacks, bug reports & feature suggestions! 🙂

By

Leave a Reply

Your email address will not be published. Required fields are marked *