Print pages, to be cut, stacked, folded, and eventually bound.

Example: You want to print and bind one single tiny A7 book. This book is made with A6 sheets (when you open the book, you get two A7 pages side-by-side, which is A6). Since you can fit four A6 pages on an A4 page, this means that you can print four A6 sheets on one A4 sheet.

To use this schema (without using option –group):

  • print your imposed file, two-sided;

  • cut the stack of paper, to get several stacks (four in the example above);

  • stack the several stacks you got on top of each other (take care to keep the pages in the right order);

  • fold and bind the stack of paper you got;

  • voilà! You now have a shiny, tiny book.

With option –group=3 (for instance), repeat the step above for every group of three sheets. You get several signatures, that you have to bind together to get a proper book.


source, destination.


class pdfimpose.schema.cutstackfold.CutStackFoldImpositor(last: int = 0, omargin: ~pdfimpose.schema.Margins | str | ~numbers.Real | ~decimal.Decimal = <factory>, mark: list[str] = <factory>, bind: str = 'left', creep: ~typing.Callable[[int], float] = <function nocreep>, imargin: str | ~numbers.Real | ~decimal.Decimal = 0, signature: tuple[int] = (0, 0), group: int = 0)[source]

Perform imposition of source files, with the ‘cutstackfold’ schema.


pdfimpose.schema.cutstackfold.impose(files, output, *, imargin=0, omargin=0, last=0, mark=None, signature=None, size=None, bind='left', creep=<function nocreep>, group=0)[source]

Perform imposition of source files into an output file, using the cut-stack-bind schema.

  • files (list[str]) – List of source files (as strings or io.BytesIO streams). If empty, reads from standard input.

  • output (str) – List of output file.

  • omargin (float) – Output margin, in pt. Can also be a Margins object.

  • imargin (float) – Input margin, in pt.

  • last (int) – Number of last pages (of the source files) to keep at the end of the output document. If blank pages were to be added to the source files, they would be added before those last pages.

  • mark (list[str]) – List of marks to add. Only crop marks are supported (mark=[‘crop’]); everything else is silently ignored.

  • signature (tuple[int]) – Layout of source pages on output pages. For instance (2, 3) means: the printed sheets are to be cut in a matrix of 2 horizontal sheets per 3 vertical sheets. This option is incompatible with size.

  • size (str|tuple[float]) – Size of the output page. Signature is computed to fit the page. This option is incompatible with signature.

  • bind (str) – Binding edge. Can be one of left, right, top, bottom.

  • creep (function) – Function that takes the number of sheets in argument, and return the space to be left between two adjacent pages (that is, twice the distance to the spine).

  • group (int) – Group sheets before cutting them. See help of command line –group option for more information.