Turn lecture slides and A4 notes into printable sheets that cost less to print.
Students print decks and notes constantly, and the defaults waste both paper and ink: one slide per page, dark backgrounds that soak the cartridge, wide blank margins. This app fixes all three in the browser. Nothing is uploaded — your PDFs never leave your device.
- Several pages on one sheet — 1, 2, 4, 6, 8, 9, 12 or 16 per sheet. Each option shows how big the text will actually print, so you can tell "readable" from "too small" before you commit.
- Detects what's in your PDF — A4, Letter, A5, A3 or 16:9 / 4:3 slides, and offers the layouts that suit it. You can override the guess.
- Both sheet orientations — portrait, landscape, or best fit. It will turn pages sideways when that prints them meaningfully bigger, and only then.
- Trims blank margins — crops the empty border, using one crop box for every page so text stays the same size throughout. Typically buys another 5% of page size.
- Ink saver — dark text on white with the lightest possible fills. Around 65% less ink on the sample notes.
- Removes background tints and inverts dark slides so they don't print as a solid black rectangle.
- Room to write — a notes box under each sheet, or ruled lines beside each page.
- Skip slides you don't need, including animation duplicates, and insert blanks where you want space.
- Before / after preview — drag across the sheet to compare the original with what will actually come out of the printer.
Every PDF is parsed and rendered in your own browser with pdf.js and rebuilt with pdf-lib. There is no server and no upload. The only network requests the page makes are for those two libraries and the web fonts, all from public CDNs.
| Choose pages | Set up printing |
|---|---|
![]() |
![]() |
There is no build step. The whole app is one index.html.
git clone https://github.com/Coderchintu/digital-to-printable.git
cd digital-to-printable
python3 -m http.server 8000Then open http://localhost:8000. Serve it over HTTP rather than opening the file directly — file:// blocks the web workers pdf.js needs.
No PDF handy? The first screen generates a sample deck and sample A4 notes for you, in the browser.
pdf.jsrenders each page to a canvas and reports its size in points.- Page sizes are matched against known paper sizes and slide aspect ratios to decide whether you're printing slides or document pages.
- For trimming, each page is scanned for its ink bounding box; the boxes are merged per file and page size so every page is cropped identically.
- The layout planner tries every grid that divides evenly into the pages-per-sheet count, in both sheet orientations, upright and turned, and keeps whichever prints the content largest. Turning only wins if it gains more than 5% — nobody wants to rotate a sheet for a 1% gain.
pdf-libwrites the output. In Colour mode with no clean-up, pages are embedded as vector PDF pages, so text stays sharp and files stay small. Any filtering falls back to JPEG at 150 or 220 DPI.
Help wanted on all of these — see the issues.
- Booklet mode — print double-sided, fold and staple into an A5 booklet, with pages reordered automatically.
- Double-sided helper — split the output into odd and even sheets for printers without duplex.
- Mixed PDFs — lay out slides and A4 notes differently when they appear in the same file.
- Translations, starting with Hindi.
Pull requests are welcome. Please read CONTRIBUTING.md first — most importantly, do not upload copyrighted PDFs (course slides, textbooks) to this repository. Use the built-in samples.
| Library | Licence |
|---|---|
| pdf.js | Apache-2.0 |
| pdf-lib | MIT |
| Bricolage Grotesque and Instrument Sans | SIL Open Font Licence 1.1 |
MIT © Raj Kumar


