Package: deba-bocho
Slice up PDFs like a pro:% bocho my-fancy-file.pdf --pages 1 3 5 6 10 --angle 30 --zoom 1.6
my-fancy-file-bocho-630x290.pngTakes a PDF file and creates a “stacked page” preview from a selection of pages.It accepts a bunch of options for customising the output (pass the-hflag for details).InstallationRequires ImageMagick so you might need to, e.g:% sudo apt-get install imagemagickIf you want to useWandinstead of callingconvertdirectly, you’ll also need to perform some some additional steps, e.g:% sudo apt-get install libmagickwand-dev
% pip install wandSee their installation instructions for more details.On OS X, you’ll want to use Homebrew to get the low-level dependencies in place:% brew install ghostscript imagemagickOnce all that’s sorted, you just need topip installdeba-bocho.PyPy: Oh My!For simple operations, there’s not much difference in performance between CPython and PyPy.
If you want to use theshadoweffect, it’s a different matter.
Cue unscientific benchmarking run on my laptop…Python 2.7:% time bocho /tmp/report.pdf --preset example --shadow
...
bocho /tmp/report.pdf --preset example --shadow  35.89s user 0.15s system 99% cpu 36.132 totalPyPy:% time bocho /tmp/report.pdf --preset example --shadow
...
bocho /tmp/report.pdf --preset example --shadow  4.10s user 0.18s system 99% cpu 4.297 totalMaking PyPy about 10x as fast as Python 2.7.
The same process without--shadowtakes around 2.5 seconds with both implementations.UsageFor information on usage, runbocho--help. If you want to use it as a module:>>> import bocho
>>> help(bocho.assemble)ConfigurationIf you will be using the same options many times, it’s probably worth creating a preset in aconfig.inifile (seeconfig.example.inior the example below to get started).By default,bochowill check for$HOME/.config/bocho/config.ini, so it’s probably best to keep your config there, but you can pass the--configoption with the path to an alternative location.[example]pages=1,3,5,7,9width=630height=290border=4reuse=truedelete=trueverbose=trueuse_convert=trueparallel=5You can tellbochoto use this preset by calling:bocho /path/to/file.pdf --preset example [--config /path/to/config.ini]TODOimplement rotation properly ✓allow a “zoom” option ✓optional drop-shadows ✓make shadows smarter in their orientation (they’re currently uniform, not respecting the angle / transformations)make the basic edge separators optional ✓automatic spacing as an option as well as fixed pixel spacinghorizontal and vertical spacing ✓horizontal and vertical offsets ✓optional right-to-left stacking ✓handle non-A4 aspect ratio input documents ✓optionally apply transforms:affine ✗ (abandoned in favour of vertical / horizontal shear effects)shear ✓ (applied by creating simplified affine transforms)stretch (can be achieved in a similar fashion to shear)perspectiveensure sliced PNGs are large enough when custom width / height are specifiedfix x and y spacing calculation to account for any applied rotation & transformationallow transforms to be configurable (probably with presets defined in an.inifile)drop the PyPDF dependency ✓use an ImageMagick binding rather than usingsubprocessto callconvert✓ (Wand)optionally re-use pages between runs ✓allow user-specified resolution for the PDF to PNG conversion ✓docs ✓pretty pictures illustrating the effect of the various optionsuse proper loggingLicenseSeeLICENSE.txt.
Test images are from the USC-SIPI Image Database (http://sipi.usc.edu/database/).
The test PDF is “Distributed Space-Time Interference Alignment” (arXiv:1405.0032).