YMPrint

Desktop publishing with YAML

The technology of the year 2000…today!

YMPrint is a Python-based PDF authoring application geared towards professionals who need to generate lots of PDF documents. You write the content of your report in YAML (as opposed to Markdown) and YMPrint renders it to PDF with near-instant speeds. YMPrint lets you use Python scripting within your document, create variables, render variable values, and pass live Python objects between report blocks to create a truly expressive authoring system—the likes of which have not been created before.

Report title:
  - >
    Here is the first paragraph. Word-wrapped, styled, and typeset
    straight from YAML — no LaTeX, no HTML, no page-layout software.
  - Sub-heading: >
      Nest a heading under a paragraph by turning the list item into
      a key/value pair. The key becomes the heading.
  - Standard content types:
    - Bullets:
      - Bullet 1
      - Bullet 2
    - Tables:
      - Item: 12.01
        Location: Under the stairs
ym convert report.yml
# ✍️ .... 📝 ... PDF created: report.pdf
🚀 Quickstart

Install YMPrint and render your first PDF in a couple of minutes.

Quickstart
🖼️ Examples

A gallery of runnable reports with their rendered-PDF previews.

Examples
📄 Document structure

How headings, paragraphs, bullets, ordered lists, and tables map onto YAML.

Document structure
🧱 Blocks

Images, admonitions, code, quotes, spacers, rules, figures, and Python.

Blocks reference
🎨 Configuration

Control page templates, text styles, and table styles across three priority levels.

Configuration
🔢 Variables

Define _vars, render them with Jinja, and pass Python objects into blocks.

Variables
⌨️ CLI

ym convert and ym live — one-shot rendering and hot-reload preview.

CLI reference

Why YMPrint?

  • Readable source. Your document is the outline. YAML nesting is the document hierarchy — no markup soup.

  • Batteries included. Bundled fonts, sensible default styles, and a set of blocks for the content markdown can’t express.

  • Dynamic content. Interpolate _vars with Jinja, execute _py blocks, load JSON, embed matplotlib figures, and auto-fill PDF form fields.

  • Custom templates. Overlay your document onto a designed PDF background and auto-populate its form fields from document variables.