Go to file
2022-01-26 11:10:00 +05:30
.github/workflows [ci] Run tests on python3.10 2021-12-30 17:02:30 +05:30
docs Initial commit 2021-05-26 18:14:02 +05:30
src/pystitcher Fix for older Python 2021-07-16 17:05:27 +05:30
tests Fix for older Python 2021-07-16 17:05:27 +05:30
.coveragerc Initial commit 2021-05-26 18:14:02 +05:30
.editorconfig Functionally running, but only for me 2021-05-26 19:24:36 +05:30
.gitignore Initial commit 2021-05-26 18:14:02 +05:30
.readthedocs.yml Initial commit 2021-05-26 18:14:02 +05:30
AUTHORS.rst Initial commit 2021-05-26 18:14:02 +05:30
CHANGELOG.rst update changelog 2021-12-31 13:15:36 +05:30
LICENSE.txt Initial commit 2021-05-26 18:14:02 +05:30
pyproject.toml Initial commit 2021-05-26 18:14:02 +05:30
README.rst Add README badges 2022-01-26 11:10:00 +05:30
setup.cfg [dep] switch from html5 to html5lib 2021-12-30 17:18:03 +05:30
setup.py Initial commit 2021-05-26 18:14:02 +05:30

==========
pystitcher
==========

.. image:: https://img.shields.io/pypi/v/pystitcher
    :target: https://pypi.org/project/pystitcher/
    :alt: PyPI Version

.. image:: https://img.shields.io/pypi/l/pystitcher
    :target: LICENSE.txt
    :alt: Repository License

.. image:: https://img.shields.io/github/checks-status/captn3m0/pystitcher/main
    :target: https://github.com/captn3m0/pystitcher/actions?query=branch%3Amain
    :alt: GitHub branch checks status

.. image:: https://img.shields.io/codecov/c/gh/captn3m0/pystitcher
    :target: https://app.codecov.io/gh/captn3m0/pystitcher/
    :alt: Codecov

|

pystitcher stitches your PDF files together, generating nice customizable bookmarks for you using a declarative input in the form of a markdown file. It is written in pure python and uses `PyPDF3 <https://pypi.org/project/PyPDF3/>`_ for reading and writing PDF files.

Installation
============

You can install it easily using `pipx <https://pypa.github.io/pipx/>`_::

	pipx install pystitcher
	
The Wiki has `Alternative Installation Instructions <https://github.com/captn3m0/pystitcher/wiki/Installation>`_.


Description
===========

pystitcher is a command line tool, with very few cli options::

	usage: pystitcher [-h] [--version] [-v] [--cleanup | --no-cleanup] spine.md output.pdf

	Stitch PDF files together

	positional arguments:
	  spine.md              Input markdown file
	  output.pdf            Output PDF file

	optional arguments:
	  -h, --help            show this help message and exit
	  --version             show program's version number and exit
	  -v, --verbose         log more things
	  --cleanup, --no-cleanup
	                        Delete temporary files (default: True)

Given this input::

	existing_bookmarks: remove
	title: Complete Guide to the Personal Data Protection Bill
	author: Medianama
	keywords: privacy, surveillance, personal data protection
	subject: Personal Data Protection Bill
	# A Complete Guide to the Personal Data Protection Bill

	- [Cover](cover.pdf)

	# The Bills

	- [Personal Data Protection Bill, 2019](https://example.com/2019-bill.pdf)
	- [Personal Data Protection Bill, 2018](https://example.com/2018-bill.pdf)

	# Other key reading material

	- [Srikrishna Committee Report](2.a.pdf)
	- [Dvara Research's Personal Data Protection Bill](2.b.pdf)
	- [MP Shashi Tharoor's Data Protection Bill](2.c.pdf)
	- [MP Jay Panda's Data Protection Bill](2.d.pdf)
	- [SaveOurPrivacy.in bill](2.e.pdf)
	- [TRAI recommendations on privacy](2.f1.pdf)
	- [Comments on TRAI recommendations on privacy](2.f2.pdf)

Will generate a PDF with proper bookmarks:

.. image:: https://i.imgur.com/qPVpZGt.png

And the correct metadata::

	Title:          Complete Guide to the Personal Data Protection Bill
	Subject:        Personal Data Protection Bill
	Keywords:       privacy, surveillance, personal data protection
	Author:         Medianama
	Creator:        pystitcher/1.0.0
	Producer:       pystitcher/1.0.0

Configuration options can be specified with Meta data at the top of the file.

+---------------------+--------------------------------------------------------------------------+
| Option              | Notes                                                                    |
+=====================+==========================================================================+
| fit                 | Default fit of the bookmark. Can be overwritten per bookmark             |
|                     | See `wiki <https://github.com/captn3m0/pystitcher/wiki/Zoom-Levels>`_    |
|                     | for more details.                                                        |
+---------------------+--------------------------------------------------------------------------+
| author              | PDF Author                                                               |
+---------------------+--------------------------------------------------------------------------+
| keywords            | PDF Keywords                                                             |
+---------------------+--------------------------------------------------------------------------+
| subject             | PDF Subject                                                              |
+---------------------+--------------------------------------------------------------------------+
| title               | PDF Title. If left unspecified, first Heading (h1)                       |
|                     | in the document is used.                                                 |
+---------------------+--------------------------------------------------------------------------+
| existing_bookmarks  | What to do with existing bookmarks in individual files.                  |
|                     | Options are ``keep``, ``flatten``, and ``remove``. See                   |
|                     | `docs <https://github.com/captn3m0/pystitcher/wiki/Existing-Bookmarks>`_ |
|                     | for more details.                                                        |
+---------------------+--------------------------------------------------------------------------+

Additionally, PDF links specified in markdown can have attributes to alter the PDFs before merging. The below attribute will rotate the second PDF file by 90 degrees clockwise before merging::

	[Part 1](1.pdf)
	[Part 2](2.pdf){: rotate="90"}

And the below attribute will merge only pages 2 to 5, both inclusive, from the second PDF file::

	[Part 1](1.pdf)
	[Part 2](2.pdf){: start=2 end=5}

The list of available attributes are:

+---------------------+-----------------------------------------------+
| Attribute           | Notes                                         |
+=====================+===============================================+
| rotate              | Rotate the PDF. Valid values are 90, 180, 270 |
+---------------------+-----------------------------------------------+
| start               | Start page number for PDF page selection      |
+---------------------+-----------------------------------------------+
| end                 | End page number for PDF page selection        |
+---------------------+-----------------------------------------------+

Documentation
=============

Additional documentation is maintained on the `project wiki <https://github.com/captn3m0/pystitcher/wiki>`_ on GitHub.