Skip to content

A cross-platform utility to join, split, stamp, and rotate PDFs written in Python. Yes, Python!

License

Notifications You must be signed in to change notification settings

py-pdf/PyPDF-Builder

Repository files navigation

PyPDF Builder

A cross-platform utility to join, split, stamp, extract pages, and rotate PDFs written in Python. Yes, Python!

This project is inspired by Angus Johnson's PDFTK Builder. Its goal is a GUI that builds on PyPDF2 as well as other PDF related libraries and offers a unified and simple experience for end-users.

This fork added the page extraction module and fixed minor ui issues (and is only tested) on Mac OS.

Getting Started

Grab a copy of virtualenv or virtualenvwrapper and set up a virtual environment with your favorite Python interpreter (see Prerequisites) to separate the dependencies for this project. Then it's the same old same old:

git clone https://github.com/mrgnth/PyPDF-Builder.git
pip install -r requirements.txt

These instructions will get you a copy of the project up and running on your local machine for development purposes.

Prerequisites

PyPDF Builder is built on Tkinter, Pygubu and PyPDF2, a pure-python PDF library. Running pip freeze should give you something like this:

pygubu==0.9.8.2
PyInstaller==3.3.1
PyPDF2==1.26.0
Sphinx==1.7.2

... and a whole bunch of related dependencies (especially Sphinx is a doozy!).

Python 3.6 was used in development… I haven't checked for compatibility with lower versions, so your mileage my vary with anything starting 3.5 on downward.

Deployment

Distributable application for Windows, Linux and Mac OS using PyInstaller:

Linux and Mac OS

pyinstaller --onefile --clean --windowed --add-data="mainwindow.ui:." \
    --hidden-import="pygubu.builder.ttkstdwidgets" \
    --hidden-import="pygubu.builder.widgets.dialog" \
    pypdfbuilder.py

Windows

pyinstaller --onefile --clean --windowed --add-data="mainwindow.ui;." \
    --hidden-import="pygubu.builder.ttkstdwidgets" \
    --hidden-import="pygubu.builder.widgets.dialog" \
    pypdfbuilder.py

Subsequent builds can be managed by editing the .spec file created by the first build and then simply running pyinstaller pypdfbuilder.spec to build the executable.

Long term: Inclusion in Debian repos for direct installation on end-user systems.

License

This project is licensed under the MIT License - see the LICENSE file for details

Acknowledgments

To Do

  • Join Tab Functionality
  • Split Tab Functionality
  • Refactor to avoid code repetition in save, file info, etc methods
  • User Documentation (mostly self-explanatory)
  • Developer Documentation
  • Write tests
  • Error checking user input
  • Error/Exception Handling
  • Failover to system PDF Tools (e.g. Poppler)
  • Stamp/Background/Number Tab
  • Rotate Pages
  • Menus
  • Persistent User Settings
  • Logging
  • Error Reporting?
  • Github Project pages with Nikola
  • Package via pyInstaller
  • Distribution via Releases on GitHub