{
    "type": "article",
    "title": "Why I built PrintMD",
    "canonical": "https://www.dealmobile.co.uk/writing/why-i-built-printmd",
    "path": "/writing/why-i-built-printmd",
    "url": "https://www.dealmobile.co.uk/writing/why-i-built-printmd",
    "markdown": "https://www.dealmobile.co.uk/writing/why-i-built-printmd.md",
    "json": "https://www.dealmobile.co.uk/writing/why-i-built-printmd.json",
    "summary": "I write in Markdown, and getting from there to a PDF I’d happily send someone was more work than it should be. So I built an editor that shows the page as I type and exports PDF, Word and PowerPoint from the same text.",
    "published": "2026-11-02T08:00:00+00:00",
    "modified": "2026-11-02T11:22:31+00:00",
    "image": {
        "url": "https://www.dealmobile.co.uk/sites/default/files/content/images/posts/why-i-built-printmd/hero.png",
        "alt": "The PrintMD editor in the Unbranded template: on the left, the Markdown for a short note about moving team docs to Markdown, with a bulleted list, a table and a quotation; on the right, the same note as a printed page with a serif text face and a ruled Before and After table."
    },
    "fields": {
        "image_dark": null
    },
    "tags": [
        {
            "name": "Markdown",
            "url": "https://www.dealmobile.co.uk/writing/tag/markdown",
            "json": "https://www.dealmobile.co.uk/writing/tag/markdown.json"
        },
        {
            "name": "JavaScript",
            "url": "https://www.dealmobile.co.uk/writing/tag/javascript",
            "json": "https://www.dealmobile.co.uk/writing/tag/javascript.json"
        },
        {
            "name": "PrintMD",
            "url": "https://www.dealmobile.co.uk/writing/tag/printmd",
            "json": "https://www.dealmobile.co.uk/writing/tag/printmd.json"
        }
    ],
    "projects": [
        {
            "name": "PrintMD",
            "url": "https://www.dealmobile.co.uk/projects/printmd",
            "json": "https://www.dealmobile.co.uk/projects/printmd.json"
        }
    ],
    "body": {
        "html": "<p>I write in Markdown. Notes, plans, short reports, the odd longer document. Plain text is quick, it diffs well and it never gets in my way. The trouble starts when someone else has to read it.</p>\n<p>Most of the time that means a PDF, and getting from Markdown to a PDF that doesn’t look like a text file with a margin is more work than it sounds. Pasting into a word processor loses the structure. A browser’s print dialog gets most of the way, then splits a table across two pages or leaves a heading alone at the foot of a page. The command-line tools are powerful, and many of them want a pile of packages and a LaTeX installation.</p>\n<p>I wanted one thing: write Markdown, see the page, press a button, and get a PDF I wouldn’t be embarrassed to send. That became <a href=\"/projects/printmd\">PrintMD</a>.</p>\n<h2 id=\"what-it-is\">What it is</h2>\n<p>PrintMD is a Markdown editor with a live preview and two templates. The preview shows the page in the template’s own type and spacing, so it’s close to what you’ll print; page breaks and the running head and foot only appear in the PDF. Export gives you a PDF, a Word file or a PowerPoint file from the same text.</p>\n<figure class=\"shot shot--prose\"><img class=\"theme-img theme-img--light\" src=\"/sites/default/files/styles/almanac_shot/public/content/images/products/printmd.png.webp?itok=noJQODgA&amp;v=315c0856\" srcset=\"/sites/default/files/styles/almanac_shot_md/public/content/images/products/printmd.png.webp?itok=TD1n14rH&amp;v=315c0856 1200w, /sites/default/files/styles/almanac_shot/public/content/images/products/printmd.png.webp?itok=noJQODgA&amp;v=315c0856 2400w\" sizes=\"(width &gt;= 39em) 37rem, calc(100vw - 2rem)\" alt=\"The PrintMD editor showing a document called Paper sizes, briefly: its Markdown on the left, and on the right its cover in the Dealmobile template, with the title in heavy black type and the last word in red italic.\" width=\"2400\" height=\"1500\" loading=\"lazy\" decoding=\"async\"><img class=\"theme-img theme-img--dark\" src=\"/sites/default/files/styles/almanac_shot/public/content/images/products/printmd-dark.png.webp?itok=yUp3CbJw&amp;v=d81bb8e3\" srcset=\"/sites/default/files/styles/almanac_shot_md/public/content/images/products/printmd-dark.png.webp?itok=_GXIIAnV&amp;v=d81bb8e3 1200w, /sites/default/files/styles/almanac_shot/public/content/images/products/printmd-dark.png.webp?itok=yUp3CbJw&amp;v=d81bb8e3 2400w\" sizes=\"(width &gt;= 39em) 37rem, calc(100vw - 2rem)\" alt=\"The PrintMD editor showing a document called Paper sizes, briefly: its Markdown on the left, and on the right its cover in the Dealmobile template, with the title in heavy black type and the last word in red italic.\" width=\"2400\" height=\"1500\" loading=\"lazy\" decoding=\"async\"><figcaption>The second template, Dealmobile, styles a document like a magazine article. The first, Unbranded, is the quiet default.</figcaption></figure>\n<p>It’s plain HTML, CSS and JavaScript modules. There’s no build step and no framework, so if you can serve a folder, you can run it. I made that choice early and haven’t regretted it: the whole thing can be read, and changed, by one person.</p>\n<h2 id=\"where-it-grew\">Where it grew</h2>\n<p>The first version was an editor and a template. Then I wanted the PDFs to be right rather than nearly right, and that turned into most of the work:</p>\n<ul>\n<li>Fonts are bundled with the app and embedded in the PDF, so it doesn’t depend on what the reader has installed.</li>\n<li>Page breaks follow a few simple rules: a heading stays with the text after it, a table row stays whole where it fits on a page, and a table that runs on repeats its header.</li>\n<li>Page size is a choice for each document, including a custom size, and so is a single long page for things that aren’t really pages.</li>\n<li>A small service on my own computer turns a Markdown file into a PDF with one command, which is how I use it from scripts and from other tools.</li>\n</ul>\n<p>Each of those has its own post: <a href=\"/writing/print-quality-pdfs-from-a-browser\">print-quality PDFs from a browser</a>, <a href=\"/writing/page-options-custom-size-continuous-fit\">custom sizes, one long page and fit to width</a>, and <a href=\"/writing/a-pdf-service-that-only-runs-on-your-machine\">a PDF service that only runs on your machine</a>.</p>\n<h2 id=\"why-local\">Why local</h2>\n<p>PrintMD is happiest on your own machine, and I want to be plain about that. Your documents stay in your browser. The PDF service prints with a browser on your own computer and listens only there. The editor also works <a href=\"https://printmd.dealmobile.co.uk\">hosted</a>, and there it says that running it locally is better. The PDF service won’t run hosted at all.</p>\n<h2 id=\"what-next\">What next</h2>\n<p>It’s a tool I use, so it grows when I hit a wall. If you try it and something is awkward, the <a href=\"https://github.com/tomgould/PrintMD/issues\">issue tracker</a> is the place to say so.</p>"
    },
    "markdown_text": "---\ntitle: 'Why I built PrintMD'\ncanonical: 'https://www.dealmobile.co.uk/writing/why-i-built-printmd'\nurl: 'https://www.dealmobile.co.uk/writing/why-i-built-printmd'\ntype: Post\npublished: '2026-11-02'\nsummary: 'I write in Markdown, and getting from there to a PDF I’d happily send someone was more work than it should be. So I built an editor that shows the page as I type and exports PDF, Word and PowerPoint from the same text.'\n---\n\n# Why I built PrintMD\n\nPublished 2026-11-02\n\n![The PrintMD editor in the Unbranded template: on the left, the Markdown for a short note about moving team docs to Markdown, with a bulleted list, a table and a quotation; on the right, the same note as a printed page with a serif text face and a ruled Before and After table.](https://www.dealmobile.co.uk/sites/default/files/styles/almanac_shot_md/public/content/images/posts/why-i-built-printmd/hero.png.webp?itok=mSmosJDH)\n\nI write in Markdown. Notes, plans, short reports, the odd longer document. Plain text is quick, it diffs well and it never gets in my way. The trouble starts when someone else has to read it.\n\nMost of the time that means a PDF, and getting from Markdown to a PDF that doesn’t look like a text file with a margin is more work than it sounds. Pasting into a word processor loses the structure. A browser’s print dialog gets most of the way, then splits a table across two pages or leaves a heading alone at the foot of a page. The command-line tools are powerful, and many of them want a pile of packages and a LaTeX installation.\n\nI wanted one thing: write Markdown, see the page, press a button, and get a PDF I wouldn’t be embarrassed to send. That became [PrintMD](https://www.dealmobile.co.uk/projects/printmd.md).\n\n## What it is\n\nPrintMD is a Markdown editor with a live preview and two templates. The preview shows the page in the template’s own type and spacing, so it’s close to what you’ll print; page breaks and the running head and foot only appear in the PDF. Export gives you a PDF, a Word file or a PowerPoint file from the same text.\n\n![The PrintMD editor showing a document called Paper sizes, briefly: its Markdown on the left, and on the right its cover in the Dealmobile template, with the title in heavy black type and the last word in red italic.](https://www.dealmobile.co.uk/sites/default/files/styles/almanac_shot/public/content/images/products/printmd.png.webp?itok=noJQODgA&v=315c0856)\n\n*The second template, Dealmobile, styles a document like a magazine article. The first, Unbranded, is the quiet default.*\n\nIt’s plain HTML, CSS and JavaScript modules. There’s no build step and no framework, so if you can serve a folder, you can run it. I made that choice early and haven’t regretted it: the whole thing can be read, and changed, by one person.\n\n## Where it grew\n\nThe first version was an editor and a template. Then I wanted the PDFs to be right rather than nearly right, and that turned into most of the work:\n\n- Fonts are bundled with the app and embedded in the PDF, so it doesn’t depend on what the reader has installed.\n- Page breaks follow a few simple rules: a heading stays with the text after it, a table row stays whole where it fits on a page, and a table that runs on repeats its header.\n- Page size is a choice for each document, including a custom size, and so is a single long page for things that aren’t really pages.\n- A small service on my own computer turns a Markdown file into a PDF with one command, which is how I use it from scripts and from other tools.\n\nEach of those has its own post: [print-quality PDFs from a browser](https://www.dealmobile.co.uk/writing/print-quality-pdfs-from-a-browser.md), [custom sizes, one long page and fit to width](https://www.dealmobile.co.uk/writing/page-options-custom-size-continuous-fit.md), and [a PDF service that only runs on your machine](https://www.dealmobile.co.uk/writing/a-pdf-service-that-only-runs-on-your-machine.md).\n\n## Why local\n\nPrintMD is happiest on your own machine, and I want to be plain about that. Your documents stay in your browser. The PDF service prints with a browser on your own computer and listens only there. The editor also works [hosted](https://printmd.dealmobile.co.uk), and there it says that running it locally is better. The PDF service won’t run hosted at all.\n\n## What next\n\nIt’s a tool I use, so it grows when I hit a wall. If you try it and something is awkward, the [issue tracker](https://github.com/tomgould/PrintMD/issues) is the place to say so.\n\n- **Projects:** [PrintMD](https://www.dealmobile.co.uk/projects/printmd.md)\n- **Tags:** [Markdown](https://www.dealmobile.co.uk/writing/tag/markdown.md), [JavaScript](https://www.dealmobile.co.uk/writing/tag/javascript.md), [PrintMD](https://www.dealmobile.co.uk/writing/tag/printmd.md)\n\n---\n\nIndex of this site: [llms.txt](https://www.dealmobile.co.uk/llms.txt)\n"
}