Booklet Imposition on Linux: Create a Print-Ready Zine PDF for an Indie Publisher
You can do booklet imposition on Linux entirely from the command line — pad the page count to a multiple of four, reorder the pages into fold order with pdfjam, psbook/psnup, qpdf, or a GUI imposer, verify the gutter and preflight the fonts and image resolution, then print one short-edge duplex test sheet before committing to a full run. Four facts decide whether your file survives the print shop: a saddle-stitched booklet needs a page count divisible by four; every side of every sheet must sum to N + 1; every font must be embedded (pdffonts shows emb = yes); and landscape-imposed pages need short-edge duplex flipping, not the long-edge default. This guide gives indie publishers a repeatable, same-day workflow for turning a reading-order zine PDF into a print-ready saddle-stitched booklet on a Linux laptop.
Key Facts
- Booklet imposition on Linux reduces to four local routes:
pdfjam --booklet true, the psutils pipelinepdf2ps | psbook | psnup | ps2pdf,qpdf --pagesfor reordering, and GUI tools such aspdfarrangerandbookletimposer. Cloud imposers exist too, but they mean uploading unpublished work to a third party. - A saddle-stitched booklet requires a page count that is a multiple of four; an 8-page booklet imposes as 8 | 1, 2 | 7, 6 | 3, 4 | 5, and every side of every sheet sums to N + 1.
- For a single 24-page saddle stitch, impose the whole job as one signature:
psbook -s24. Using-s8produces three stacked 8-page signatures, which folds as a different binding entirely. - Duplex booklets printed on Linux through CUPS need short-edge flipping (
-o sides=two-sided-short-edge); the long-edge default produces upside-down pages. - Print-readiness reduces to four checks: embedded fonts, 300 dpi images at final size, correct trim plus gutter margins, and a clean Ghostscript render.
- Gutter and bleed must be set in the source document before export; imposition tools rearrange pages but cannot create margin that is not in the artwork.
- Print shops price a booklet job on run length, stock, and finishing, and published price lists vary widely between shops — request written quotes from two or three before you decide whether an in-house proof run is cheaper.
Tool disclosure: this article is not sponsored and contains no affiliate links. The free, local command-line tools are treated as the default; the cloud option mentioned in Step 5 is described in the same format as the free alternatives.
The Challenge
You have just exported a 24-page zine from Scribus or Affinity Publisher on your Linux laptop. The PDF is in reading order: page 1, page 2, page 3, and so on. It looks perfect on screen. It is not printable as a booklet.
A saddle-stitched booklet (three staples in the fold) does not put pages in reading order on a sheet. It puts them in fold order, so that when the sheets are stacked, folded, and stapled, the story reads correctly. For an 8-page booklet, the sequence is:
- Sheet 1 (outside): page 8 | page 1 on one side, page 2 | page 7 on the other
- Sheet 2 (inside): page 6 | page 3 on one side, page 4 | page 5 on the other
If you send a reading-order PDF to a print shop, either they run their own imposition and charge setup for it, or they print exactly what you gave them and you receive a stack of single-sided pages that folds into nothing readable. If you print it at home on a duplex laser printer, the same thing happens — only faster and with your own toner.
Three additional problems show up on a Linux laptop specifically:
- Duplex orientation. Most office printers default to flipping on the long edge. A landscape-imposed booklet needs the other flip, and the result of getting it wrong is a booklet with half the pages upside down.
- Binding creep. The folded inner sheets push outward at the spine. Without a gutter allowance, text near the fold disappears into the crease.
- No InDesign. Your export, imposition, and preflight steps have to run through a command-line toolchain you assemble and trust.
Why Booklet Imposition on Linux Matters for Indie Publishers
- Unit economics on short runs. Print shops quote per job, and the figure moves with run length, paper stock, and finishing, so the only reliable comparison is two or three written quotes against the cost of your own proof run. For a 50-copy zine-fair run, doing your own imposition and preflight before handoff is where the margin actually lives.
- One bad proof costs a full reprint cycle. You have a zine fair, a distro shipment, or an Etsy order queue with a fixed date. A wrong imposition discovered after printing 50 copies is not a formatting bug — it is a week and a print budget gone.
- You are both the publisher and the prepress department. Even when a shop or print-on-demand vendor does the final output, they often want a file that already matches their spec sheet. Proof runs are explicitly one of the reasons publishers need booklet imposition in the first place.
The Booklet Imposition on Linux Workflow: Eight Steps
Step 1. Set the print spec, then freeze and inspect the source PDF
Do this before you export, because anything you skip here has to be fixed by re-exporting later.
Write down the spec first:
- Trim size — A5 (148 × 210 mm / 419.53 × 595.28 pt) for a typical zine.
- Bleed — usually 3 mm on all sides, but only if the printer's spec sheet asks for it.
- Gutter — a larger inner margin than outer, e.g. 10–12 mm inner against 8 mm outer for A5, so the fold does not consume text.
- Creep allowance — only needed for thick booklets (see Step 4).
Bake the gutter and bleed into the layout document, then export a flattened PDF and check the basics:
pdfinfo zine.pdf # page size, page count, PDF version
pdffonts zine.pdf # is every font embedded?
pdfimages -list zine.pdf # image resolutions
Every font should show emb = yes. Any font that is not embedded will be substituted somewhere in the chain, and the substituted version rarely has the same line breaks.
Step 2. Pad the page count to a multiple of four
Saddle stitching needs a page count divisible by 4. A 22-page zine needs two blank pages; a 21-page zine needs three. Generate a blank page at the trim size and merge:
gs -o blank.pdf -sDEVICE=pdfwrite -c "<</PageSize [419.53 595.28]>> setpagedevice showpage"
pdfjam --outfile padded.pdf zine.pdf blank.pdf blank.pdf
Adjust the PageSize values to your trim in points (A5 is 419.53 × 595.28 pt). Put the blanks at the back unless the content requires a specific gap — shops and readers both prefer a clean run of content followed by blanks rather than blanks scattered through the middle.
Step 3. Do the booklet imposition math
Saddle stitch works for booklets up to roughly 64 pages; perfect binding or a stacked staple for anything thicker. Before you print anything, derive the fold sequence and check it against the rule below.
Run the formula first, then copy the sequence you need straight from the table. The formula tells you whether your page count is legal; the table tells you what to type. If the two disagree, the page count or the fold direction is wrong — not the table.
The general rule for a booklet of N pages (N a multiple of 4), reading from the outermost sheet inward, for sheet k starting at 1:
| Position on the sheet | Page numbers |
|---|---|
| Front side | (N − 2k + 2) | (2k − 1) |
| Back side | (2k) | (N − 2k + 1) |
Two shortcuts fall out of that formula, and they are what actually catch an off-by-one error:
- Every side sums to N + 1. On the 24-page zine, the outer sheet is 24 | 1, the next is 22 | 3, and the innermost is 14 | 11. 24 + 1 = 25, 22 + 3 = 25, 14 + 11 = 25.
- The outer sheet pairs the last page with the first. n | 1, then 2 | n − 1, then n − 2 | 3, and so on inward.
Worked sequences for the page counts zine publishers actually use — copy the row that matches your padded page count:
| N (pages) | Sheets | Fold sequence, outermost sheet → innermost |
|---|---|---|
| 8 | 2 | 8 | 1 / 2 | 7 · 6 | 3 / 4 | 5 |
| 12 | 3 | 12 | 1 / 2 | 11 · 10 | 3 / 4 | 9 · 8 | 5 / 6 | 7 |
| 16 | 4 | 16 | 1 / 2 | 15 · 14 | 3 / 4 | 13 · 12 | 5 / 6 | 11 · 10 | 7 / 8 | 9 |
| 24 | 6 | 24 | 1 / 2 | 23 · 22 | 3 / 4 | 21 · 20 | 5 / 6 | 19 · 18 | 7 / 8 | 17 · 16 | 9 / 10 | 15 · 14 | 11 / 12 | 13 |
Legend: | separates the left and right page on a single side, / separates the front and back of the same physical sheet, · separates sheets.
A page count that is already a multiple of 4 needs no padding and no adjustment — go straight to checking the sequence. If your shop imposes the file themselves, skip this step and send them the reading-order PDF plus your spec sheet instead.
Step 4. Verify the gutter — and go back to Step 1 if it is missing
The inner margin on a folded booklet needs to be larger than the outer margin so the fold does not consume text. For A5 zines, 10–12 mm inner against 8 mm outer is a common starting point.
Check this on the imposed file, not the source: open a spread and measure the inner margin. Some imposition tools add a gutter allowance automatically when they arrange pages 2-up; pdfjam --booklet true does not. If the source document was exported without the extra inner margin, rearranging pages will not create it — return to Step 1, add the margin in the layout app, re-export, and re-impose. This is exactly why the gutter belongs in the Step 1 spec checklist rather than here.
Binding creep (shingling). The inner sheets of a folded booklet push outward at the spine, so content on inner pages needs to be nudged inward toward the trim. On 80–100 gsm stock, creep stays under about a millimetre for booklets up to 64 pages and can be ignored. Thicker catalogues and perfect-bound books need creep compensation — the trim is shifted progressively further on each inner sheet. Neither pdfjam nor psnup applies this for you; ask the printer for their creep figure or apply it in the source document.
Step 5. Impose the pages into fold order
Pick the method that matches what is already on your machine:
pdfjam(ships with TeX Live):pdfjam --booklet true --landscape --outfile zine-booklet.pdf padded.pdf. The--booklet trueflag handles 2-up layout and fold ordering together. Whether it also sets landscape orientation varies between pdfjam versions — if the output comes back portrait, add--landscapeexplicitly. Heaviest install, most reliable output.- psutils via Ghostscript:
pdf2ps padded.pdf - | psbook -s24 | psnup -2 | ps2pdf - zine-booklet.pdf.-s24treats the entire 24-page job as a single signature, which matches a single saddle-stitched booklet. Do not reach for-s8here unless you genuinely want three separate 8-page signatures stacked and stapled as one volume — that is a different binding, and it will not fold into a single 24-page saddle stitch. The round trip through PostScript can also flatten transparency and re-encode images, so re-check the output. qpdffor short zines:qpdf --empty --pages padded.pdf 8,1,2,7,6,3,4,5 -- fold-order.pdfreorders pages into fold sequence. It does not do 2-up layout on its own, so pair it withpsnupor tell your printer the pages are already in fold order.- GUI options:
pdfarrangerlets you drag pages into fold order and insert blanks by hand;bookletimposerconverts a linear PDF into an imposed one in one pass. Both are useful when you want to see the spread before committing. - Browser-based imposers: if you cannot install anything locally, a web imposer such as OctopusPDF will take a linear PDF and return one that is already reordered for duplex printing and folding, with gutter margins applied. The trade-off is uploading unpublished work to a third party, which matters if your zine contains contributor contact details — prefer a local tool for confidential files, and keep the browser route for material that is already public or non-sensitive.
Step 6. Print one duplex test sheet
Do not print the whole run first. Print sheet 1 only, duplex, fold it, and read it.
lp -d YourPrinter -o media=A4 -o sides=two-sided-short-edge sheet1.pdf
sides=two-sided-short-edge is the flip setting landscape booklets usually need. Check your printer's own duplex default in the CUPS web interface at localhost:631 — most desktop printers ship set to long-edge flip, which produces the upside-down-page failure.
Step 7. Run the preflight checklist
- Page count is a multiple of 4
- All fonts embedded (
pdffonts) - Images at 300 dpi or higher at final printed size (
pdfimages -list) - Page size equals the trim size, plus bleed if the printer asked for it
- Gutter allowance present on inner edges
- Creep compensation applied, if the booklet exceeds 64 pages
- No text or critical art inside the trim or bleed zone
- Barcode quiet zone left clear on the back cover, if you plan to place an ISBN barcode there
- Transparency flattened, no live layers
- File renders without errors:
gs -o /dev/null -sDEVICE=nullpage zine-booklet.pdf - One physical folded proof checked by hand
Three practical rules for this stage. First, the printer's spec sheet is authoritative, not this article — bleed, color space, and PDF/X requirements differ between a local shop and a print-on-demand vendor, so read their sheet before you invert any settings. Second, keep a flattened master, so a rejected file can be re-exported without rebuilding the layout. Third, clear permissions before the print run, not after: print is a separate use from a web post, and if you are printing quotes, photographs, or guest comics, confirm the contributor granted print rights and keep that record with the project file.
Step 8. Hand off and archive
Send only the final imposed PDF, and keep both files under a naming convention that records the spec: zine-title_A5_saddle-24pp_gutter10mm_v3.pdf. When you reprint in six months, the imposed file is the one that reproduces the edition exactly. Treat unpublished zine files as confidential throughout the handoff — contributor names, addresses, or unreleased artwork should not be uploaded to a converter whose retention terms you have not read, which is the same reason the local command-line route stays the default here.
Close the loop by confirming the archived file still satisfies the first rule on the checklist:
pdfinfo zine-title_A5_saddle-24pp_gutter10mm_v3.pdf | grep Pages
# Pages: 24 -> divisible by 4, matches the spec in the filename
If that number is not a multiple of four, the file you archived is not the file you printed.
Quick Reference Table
| Task | Recommended Approach | Caution |
|---|---|---|
| Fix page count to a multiple of 4 | Generate blanks with Ghostscript, merge with pdfjam |
Place blanks at the back unless the layout demands otherwise |
| Impose fold order as one saddle stitch | pdfjam --booklet true --landscape |
Add --landscape explicitly if your pdfjam version outputs portrait |
| Avoid a LaTeX install | pdf2ps | psbook -s24 | psnup -2 | ps2pdf |
-s24 = one signature; -s8 creates three stacked signatures, a different binding |
| Reorder only, no 2-up | qpdf --empty --pages ... -- |
Output stays single-page portrait |
| Inspect before printing | pdfarranger or bookletimposer GUI |
Manual dragging invites off-by-one errors |
| Gutter and creep | Set the inner margin before export; ask the printer for creep | Neither pdfjam nor psnup adds either automatically |
| Duplex test print | lp -o sides=two-sided-short-edge |
Long-edge default flips the wrong way |
| Verify fonts and images | pdffonts, pdfimages -list |
Non-embedded fonts substitute silently |
| Confirm the archive | pdfinfo book.pdf | grep Pages |
Page count must stay a multiple of 4 |
| Vendor handoff | Read their spec sheet and preflight report | Do not assume bleed or color space |
FAQ
Q1. Can I do booklet imposition on Linux without installing TeX Live or paying for software?
Yes — the job is fully doable with packages already present in most desktop Linux repositories, and no paid licence is required for any of the local routes. pdf2ps | psbook -s24 | psnup -2 | ps2pdf runs on packages most distros already have, and qpdf --empty --pages reorders short zines with no dependencies at all. pdfarranger and bookletimposer are in most distro repositories too, which covers the whole job with a graphical interface if you prefer one. If you would rather not maintain a toolchain, a browser-based imposer from Step 5 handles the conversion in one pass — the cost there is uploading the file to a third party, not a licence fee, so keep it for non-confidential material.
Q2. Why did my duplex booklet come out with half the pages upside down?
The printer flipped on the long edge instead of the short edge. Landscape pages printed 2-up on portrait sheets need short-edge binding. Set -o sides=two-sided-short-edge in lp, or change the duplex default for the queue in the CUPS interface, then print sheet 1 alone as a test.
Q3. How do I know a booklet imposition on Linux output is print-ready before sending it to a shop?
Run the Step 7 checklist: page count divisible by 4, all fonts embedded, images at 300 dpi or higher at final size, correct trim and bleed, gutter allowance on inner edges, no live transparency, and a clean render. Then fold one physical proof sheet. That combination catches nearly every rejection reason before the file leaves your laptop.
Q4. Should I use psbook -s8 or -s24 for a 24-page zine?
Use -s24 for a single saddle-stitched booklet. The -s flag sets the signature length, so -s8 splits 24 pages into three 8-page signatures that are stacked and stapled together — a different physical object from one 24-page saddle stitch. Match the signature length to the binding you actually ordered.
Optional: publish the FAQ and steps as structured data
If this page also serves as documentation for your own workflow, wrapping the FAQ and the eight steps in FAQPage and HowTo JSON-LD makes them directly extractable by search engines and AI answer engines:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Should I use psbook -s8 or -s24 for a 24-page zine?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Use -s24 for a single saddle-stitched booklet. -s8 splits 24 pages into three 8-page signatures, which is a different binding."
}
}]
}
Conclusion
The first pass is a one-time build: set the trim, bleed, and gutter spec, inspect and flatten the export, pad to a multiple of four, impose with pdfjam, psbook/psnup, qpdf, or a GUI, print one short-edge duplex test sheet, fold it, and only then commit to the run. Turn that sequence into a shell script with your trim size and gutter baked in, and every subsequent issue of the zine collapses into a short loop — re-impose the padded PDF, print one test sheet, check the fold, then run the copies. Your next step right now is to run pdfinfo and pdffonts on the zine you intend to print next — that tells you in thirty seconds whether your current export can be imposed at all.