Archive project Archived

PDF Builder / Editor

A single-page document workshop I built for the original sandbox: compose multi-page documents in the browser, format text like a lightweight word processor, insert links and images, add signatures, then export through the print dialog as PDF. It was never a server-side PDF engine - the value was in the editing UX and how far you could push client-side layout before hitting browser print limits.

This project is no longer maintained or updated. The write-up and screenshots are kept for reference; the legacy demo on the old sandbox may behave differently in modern browsers.

← Back to projects Contact about front-end work Legacy demo (old sandbox)

What it was

PDF Builder / Editor lived entirely in static HTML, CSS, and JavaScript. Each page was an editable surface with a persistent toolbar across the top, optional side panels for pages and print settings, and modal dialogs for links, search, signatures, and help. There was no account system and no backend: your document stayed in the browser until you printed or cleared it.

The goal was practical document assembly - letters, simple reports, checklists, and signed forms - without installing software. Export relied on the browser’s native “Save as PDF” print path, which keeps the implementation honest about what the web platform can guarantee across Chrome, Firefox, and Edge.

The main editor with toolbar, document canvas, and status bar showing word count and active page.
  • Fully client-side: no uploads, no server rendering step.
  • Multi-page documents with per-page editing and navigation.
  • Live word and character counts plus page indicators in the status area.
  • Sample document loader to explore features without starting from scratch.
  • Context menu on selected text for quick formatting and list changes.

Pages panel

The Pages sidebar treated each sheet as a first-class object. You could add pages, jump between them, duplicate content when repeating sections, reorder the stack, or delete pages you no longer needed. Thumbnails and labels made longer documents easier to scan than scrolling one endless contenteditable block.

Each page kept its own DOM subtree, so formatting on page three did not bleed into page one. That separation mattered for print margins and for mental modelling - users could think in “sheets” the same way they would in a desktop publisher.

Page management: add, select, and organise multiple document pages from the sidebar.
A fresh page ready for content - toolbar visible, margins implied by the print preview area.
  • Add Page extends the document without reloading.
  • Reorder, duplicate, and delete from the Pages panel.
  • Per-page focus: the toolbar always targets the active page.
  • Blank canvas state for starting from zero.

Formatting toolbar

The toolbar covered the usual rich-text operations: bold, italic, underline, strikethrough, block headings from Normal through Heading 6, font family picks (Georgia, Arial, Times, Courier, Verdana, Helvetica), text colour, and highlight colour. Alignment buttons handled left, centre, and right; list controls supported bullet styles (disc, circle, square) and numbered variants (1,2,3…, a,b,c…, A,B,C…, roman numerals).

A Clear control stripped inline formatting from the current selection - useful after pasting from Word or email. Keyboard shortcuts mirrored desktop expectations: Ctrl+B/I/U for basic styles, Ctrl+Z/Y for undo/redo, Ctrl+A to select all on the active page.

Font family dropdown with text colour and highlight colour pickers.
  • Heading levels H1–H6 plus Normal paragraph style.
  • Six font families and independent text/highlight colours.
  • Bullet and numbered lists with multiple numbering schemes.
  • Clear formatting on the current selection.
  • Right-click context menu for faster list and style tweaks.

Insert: links, images, tables, TOC, signatures

Beyond plain text, the insert cluster added structured content. Links opened a small dialog for display text and URL. Images could be placed with sizing options. Tables and a table-of-contents generator helped longer documents. Signatures were the most involved flow: draw on a canvas, upload an image, or render typed text in a handwriting-style font with size and colour, then preview before inserting.

Link insertion dialog with text and URL fields.
Image options when embedding media into the document.
Signature workflow: draw, upload, or type - with brush size, font, colour, and live preview.
  • Link dialog: label + URL, inserted as anchored text.
  • Image insertion with layout/size options.
  • Table builder for simple grids inside the document.
  • Table of contents block for multi-section documents.
  • Signature modes: freehand draw, file upload, or styled text.
  • Signature preview before committing to the page.

Search & replace

A dedicated Search & Replace dialog (Ctrl+F) walked matches across the document. Case-sensitive and whole-word toggles narrowed results; Previous/Next navigation let you review hits before replacing one occurrence or running Replace All.

F3 and Shift+F3 duplicated next/previous match behaviour from desktop editors, and Escape closed open dialogs without losing the underlying document state.

  • Case-sensitive matching option.
  • Whole words only filter.
  • Replace single match or Replace All.
  • Keyboard: Ctrl+F to open, F3 / Shift+F3 to step matches.

Print settings & export

Print Settings opened a sidebar for page size (A4, Letter, Legal), orientation (portrait or landscape), and margin values in millimetres. The UI reminded users to choose “Save as PDF” in the system print dialog - because that is how browser-based export actually works without a proprietary PDF library on the server.

Actions included Print / Save as PDF, Clear document, and Load sample document. Document info tracked words, characters, total pages, and the active page index so you could sanity-check length before exporting.

  • Page sizes: A4, Letter, Legal.
  • Portrait and landscape orientation.
  • Configurable margins (mm).
  • Print / Save as PDF via the browser print pipeline.
  • Clear and sample-document shortcuts for quick resets.

Help & keyboard shortcuts

An in-app Help panel documented the toolbar, shortcuts, and tips - opened with Ctrl+/ and dismissible with Escape alongside the other modals.

  • Ctrl+/ - open or close Help.
  • Ctrl+F - search & replace.
  • Ctrl+B / Ctrl+I / Ctrl+U - bold, italic, underline.
  • Ctrl+Z / Ctrl+Y - undo and redo.
  • Ctrl+A - select all on the current page.
  • Esc - close dialogs.

Why it is archived

I am not actively developing or supporting PDF Builder anymore. Browser APIs, print engines, and contenteditable quirks move quickly; keeping a document editor polished is a product in itself. The tool remains documented here so the design decisions and feature scope are visible in the portfolio, even though it will not receive fixes or new capabilities.

If you need a maintained document workflow today, use a dedicated editor or a server-side PDF pipeline. This archive entry is a snapshot of what I shipped on the old sandbox - including the legacy demo link for curiosity, not as a supported product.