@junglo/zine-pdf
v0.1.0
Published
Posts → typeset vector PDF zine: htmlToBlocks parsing + template typesetting with pdf-lib. Browser, Bun, Deno, Node. Feeds straight into @junglo/impose for booklet output.
Maintainers
Readme
@junglo/zine-pdf
Posts → typeset vector PDF zine. generate(doc, opts) → Uint8Array, ready to
feed into @junglo/impose for
a print-ready booklet.
- Parse:
htmlToBlocksturns messy post HTML into typesettable blocks (headings, paragraphs, quotes, lists, images, rules). Scripts, styles and nav are stripped; embeds become link lines; unknown tags salvage their text. - Typeset (pure):
paginateflows blocks onto pages — greedy wrap, heading keep-with-next, post openers with byline + rule, optional centered title page, page numbers. Width measurement is injected, so the layout core runs without pdf-lib (live page estimates, preview UIs). - Render:
generatedraws everything as vector text with pdf-lib.
Use
import { generate, estimatePages } from "@junglo/zine-pdf";
const doc = {
title: "MY ZINE",
subtitle: "issue #1",
posts: [{ title: "Hello print", author: "me", html: "<p>…post HTML…</p>" }],
};
const pdf = await generate(doc, { pageSize: "A5", template: "serif" });
const pages = await estimatePages(doc); // "5 posts → ~24 pages" live footersBrowser: works as-is (native DOMParser). Bun/Deno/Node: pass a parser —
import { DOMParser } from "linkedom";
const pdf = await generate(doc, { parser: new DOMParser() });Straight into a booklet:
import { impose } from "@junglo/impose";
const booklet = await impose(await generate(doc), {
mode: "saddle", sheet: "A4", pagesPerSide: 2, flip: "short-edge",
});Options
| Option | Values | Notes |
|---|---|---|
| template | serif | classic Times-family layout (more templates planned) |
| pageSize | A5 (default), A6, half-letter | styles scale to the page |
| parser | DOMParser-compatible | required outside the browser |
Current limits (M1, honest)
- Built-in fonts only (WinAnsi): Latin-1 + typographic punctuation render
fine; emoji and non-Latin scripts degrade to
?. Bundled Unicode fonts via@pdf-lib/fontkitare the planned fix. - Images render as labeled placeholder frames — raster embedding
(fetch → downscale → JPEG) lands with the
<zine-maker>component work, where the browser canvas lives. - Inline bold/italic inside paragraphs is flattened to the block style.
- One template so far.
License
MIT © junglostore
