Show HN: Papermill Press – An AI-friendly markup language for PDF generation
If you’ve generated PDFs from HTML, you’ll know the pain: headless Chrome in Docker, CSS hacks, content that flows over pages or table boundaries and other quality issues. The fundamental problem is that HTML was designed for screens, not print. We built Press, a markup-based document language where pages, content flows, and assets are first-class concepts. Content can flow across frames, columns, and pages without manual pagination. Pages are created dynamically based on the available content. Press templates separate layout from content. You can send markdown, Press markup, or a mixture of both to the API. Data can be sent in JSON, CSV, XML. Because Press is XML-based it can easily be generated by agents - some of our users are generating complete documents in a single shot, although the language is designed for repeatable automation. You can also use our MCP server, which enables models to design templates. A simple API call sends a markdown payload, which is injected into a <flows><body>…</body></flows> element in Press: curl -X POST https://api.papermill.io/v2/pdf?template_id=papermill-modern-report \ -H "Authorization: Bearer $PAPERMILL_API_KEY" \ -H "Content-Type: text/markdown" \ --data-binary @- \ -o report.pdf <<'EOF' # Q3 Revenue Summary Quarterly performance across our core product lines. | Product | Revenue | Growth | |----------|----------|--------| | Platform | £482,000 | +18% | | Add-ons | £124,000 | +42% | | Services | £67,000 | -3% | Strong quarter overall, driven by add-on adoption. EOF PDF output: https://mill.pm/hn Pages and frames in Press can declare dependencies on a content flow like the <body> above. By default, if there’s no content in the flow then the frame or page won’t be generated. You can run flows between frames and pages, and combine multiple flows on a page - for example, a sidebar can run across pages until no content is left, then make room for body content. This makes it possible to implement complex layouts. You can mix markdown and Press: # Visualisation Sometimes it's *useful* to mix both markdown and Press: <visualization>...</visualization> The typesetter adapts to dynamic content (e.g. LLM output). For example, tables and columns can be automatically sized and Papermill will even auto-rotate a table and its page to fit if needed. Templates support components, repeating over data, document logic, and conditional styling. We mostly use an inline-styling approach, and provide the concept of a style “alias”, which is a bag of styling properties you can reuse and compose. Here’s an example template written in Press, our document language. It uses the first page layout until the sidebar flow is exhausted, then switches to the second: <press> <document format="A4" page-margin="2cm"> <repeat flow="sidebar"> <page> <frame direction="row"> <frame padding-left="1cm" padding-right="1cm"><flow name="body" /></frame> <frame width="20%" background-color="#f5f5f5" padding="0.5cm" font-size="9pt"><flow name="sidebar" /></frame> </frame> </page> </repeat> <repeat flow="body"> <page><flow name="body" width="fill" /></page> </repeat> </document> <flows> <body type="markdown"><lipsum paragraphs="10" /></body> <sidebar type="markdown"><lipsum paragraphs="3" /></sidebar> </flows> </press> Papermill is a paid API with a free tier. Press is the document language. Try it for free: https://app.papermill.io/signup (no credit card needed) Docs including MCP setup: https://docs.papermill.io Data-only sandbox: https://app.papermill.io/demo.html (no email needed) We're a small team based in Manchester, UK. Tom (CTO) and I are happy to answer questions about the language design, the rendering engine, or anything else!
Discussion Highlights (9 comments)
tompapermill
Hi, Tom here. I'm happy to answer any questions r.e., generating PDFs, better ways of making automated document workflows more robust, or anything related to Papermill and Press!
tim_at_ping
V cool. Glad to see another Manchester based start up!
davidpapermill
Hi Folks - I'm David, CEO of Papermill. We're super excited to get feedback on what we're building. This is the first time we've posted to a forum. Designing a document language for AI is a major undertaking and we'd love to hear from folks with experience and interest in document languages and generation.
Ste_CreaTech
I'm excited to see more about how Papermill and Press can interact with agents in agentic workflows! This seems like a great problem solved in AI-first startups.
tomfitzsimmons
I'd love to see something like this in chatgpt or claude. The PDFs you can generate there are always so boring.
frantzalot
As a solicitor myself managing a high street law firm that is already comfortable drafting, reviewing, and producing client-ready PDFs from Word, where is the return on investment in adopting Press? What can Press do that cannot be achieved with Word and existing document automation tools?”
lmartinneuwave
looks great dave! loved the product. Hope it all goes well.
off_by_two
Looks interesting. Are there any limits on the file size or length of pages that can be produced?
jonnyburch
This looks cool - I’ve been building pdf rendering for agents this year and styling is such a pain. I’ll check it out