PDF Tools — Manual
The complete reference for PDF Tools: Viewer & Editor, Creator, Merge & Split, Convert and Reference — every feature, every option, every limit.
Back to the overview: PDF Tools · Open the tool live: www.jpkc.com/tools/pdf/
This manual documents PDF Tools in full: all five tabs, every feature and option, plus the architecture and operating limits. The interface is in English, so the original tab, button and option labels are used throughout — exactly as you will find them in the tool.
Architecture: all in the browser
PDF Tools are purely client-side. There is no server processing your files, no API, no upload and no account. Every operation runs locally in your browser via JavaScript. To do that, the tool combines several open-source libraries, all bundled locally. pdf-lib loads together with the page; the tool fetches the others only when you need them — pdfmake, for instance, on the first click on Generate PDF:
- Mozilla PDF.js (Apache 2.0) — the embedded viewer, preview rendering, text extraction and metadata reading.
- pdfmake (MIT) — the Creator plus the Markdown and Simple HTML conversions (producing real, searchable text). Embedded font: Roboto.
- pdf-lib (MIT, in the maintained Cantoo variant) — Merge, Split and Images → PDF; it can open encrypted PDFs with their password.
- html2pdf.js (MIT, internally html2canvas + jsPDF) — the visual Rich HTML conversion (raster).
- marked (MIT) tokenises Markdown for the conversion, DOMPurify sanitises the input for Rich HTML, and ACE provides the code editors in the Convert tab.
Size limit: PDFs in the Viewer & Editor, in Merge and Split, and images in Images → PDF may be up to 50 MB. Larger PDFs are rejected with the message "File too large (…). Maximum is 50 MB.", oversized images with "File too large: …". The image in the Creator, Import JSON and the open-file buttons in the Convert tab have no size check of their own. This protects your browser's memory — it is not a server-side limit.
Errors instead of stale results: every generator (the Creator and all four converters) discards the previous PDF before a new run and keeps Download disabled until the new one is ready. If a run fails, you get an error message — the download button will not quietly hand you the result of the last run.
Password-protected PDFs
Merge and Split open encrypted PDFs too. The tool first checks whether a file is encrypted, then tries an empty password — many PDFs only carry an owner password (a permissions lock against printing or copying) and open that way without asking. If the file needs an open password, the Password required dialog appears with the file name:
- Open checks the password. If it is wrong, the dialog says "Wrong password — please try again." and asks again.
- Skip file leaves the file out (message "Skipped … (no password).").
The password never leaves your browser. Keep in mind: the result — the merged PDF as well as every split file — is saved without password protection; the dialog says so ("The result is saved without password protection."). In the merge table a lock icon marks decrypted files; in the Split tab "decrypted" follows the page count. If you add several protected files at once, the tool asks for them one after the other, never with two dialogs at the same time.
Viewer & Editor
The default tab on load. Here you view and edit a PDF in the full Mozilla PDF.js viewer.
Open a PDF
Drag and drop a .pdf file onto the drop zone or click Browse Files. The file is loaded locally as an object URL and shown in the embedded viewer — it never leaves your browser. If the PDF has an open password, the viewer asks for it itself. Close unloads the file.
The embedded viewer follows your browser language: in an English browser its tools are called Highlight, Text, Draw, Save and Print; in a German one they appear as Hervorheben, Zeichnen, Speichern and so on. The buttons above it (Info, Text, Fullscreen, Close) belong to the tool and are always in English.
View, search, navigate
The embedded viewer offers the complete PDF.js interface: paging, zoom, page thumbnails and outline, search with match highlighting, rotate, presentation mode and print. The tool's own toolbar above the viewer adds Fullscreen; in full-screen mode the button reads Exit Fullscreen.
Annotate, highlight, draw, insert images
The viewer's editor tools let you genuinely edit the PDF (labels as shown in an English browser):
- Highlight — highlight text passages in colour (colour, thickness and visibility adjustable).
- Text (FreeText) — place text notes directly on the page (colour, font size).
- Draw (Ink) — draw freehand (colour, opacity, stroke width).
- Add or edit images (Stamp) — insert an image as a stamp.
The signature and comment tools that PDF.js knows in principle are not enabled in this viewer. To sign, insert your signature as an image with the stamp tool, or draw it with Draw.
You save your changes via the viewer's Save — the result is downloaded as a new PDF file. There is no server-side storage; saving means a local download only.
Fill in forms
If the PDF contains interactive form fields (AcroForms), the viewer renders them as fillable fields. Enter your values directly and save the completed form via Save.
Info (document metadata)
The Info button opens a panel with the document's metadata: file name and size, page count, title, author, subject, keywords, creator, producer, PDF version, page size (in points, mm and inches, computed from the first page), creation and modification dates, and the Linearized and Encrypted flags. Empty fields are hidden. Copy copies the table as text. (The "Tagged" field is derived from the AcroForm flag and therefore indicates the presence of form fields rather than a true tagged-PDF structure.)
Info and Text read the file independently of the viewer and without a password. For PDFs with an open password, both therefore stop at "Failed to read document info." or "Failed to extract text." — even after the viewer has displayed the document once you entered the password.
Extract text
The Text button reads all text content out of the PDF — page by page, each marked --- Page N ---. Above it you see statistics (pages, words, characters). You can Copy the text or save it with Download .txt as a text file named after the PDF (contract.pdf → contract.txt). This only works on PDFs with a real text layer; pure scans without text return little (the tool has no OCR).
Creator
Here you build a PDF from scratch — from blocks instead of code. The form on the left, the preview on the right, which you refresh with Generate PDF — changes to blocks or settings only show up there after the next click.
Document Settings
- Page Size — A4 (default), A3, A5, Letter, Legal or Tabloid.
- Orientation — Portrait or Landscape.
- Font — fixed to Roboto (the only embedded font).
- Font Size — base font size in points (6–72, default 12).
- Margins (pt) — top/right/bottom/left page margins in points (default 40 each). The generator turns an empty field or
0back into 40, so borderless pages are not possible here.
Content Blocks
Use Add Block to add building blocks. Each block can be moved (Move up/Move down), duplicated (Duplicate puts the copy right below), deleted (Delete) and collapsed or expanded by clicking its header. Alignment is always Left, Center, Right or Justify:
- Heading — a heading at level H1–H4 (sizes 24/20/16/14 pt) with alignment; always bold.
- Paragraph — body text with alignment, its own font size (6–72 pt, default 12) and bold (B) and italic (I) toggles.
- Table — an editable grid; a First row is header toggle; add rows and columns via Row/Col. Columns are distributed at equal width.
- List — a list; an Ordered list toggle for numbered vs. bulleted; add/remove items (empty items are dropped at generation).
- Image — embed an image (PNG or JPEG only) via Select Image; Width (pt) (default 200) and Alignment adjustable.
- Two Columns — a two-column section with Left Column and Right Column (equal width, 15 pt gap).
- Horizontal Rule — a grey divider. It is a fixed 515 pt long, which fits A4 portrait with the default 40 pt margins exactly; on other formats, in landscape or with other margins it falls short or runs past the margin.
- Page Break — forces a new page at this position.
Save your input before rearranging: what you type into the block fields is only picked up at the next sync — on Generate PDF, Export JSON, Duplicate, Row/Col and Add Item. Add Block, Move up/Move down and Delete, by contrast, rebuild the block list from the last synced state; unsynced input in all blocks is lost. So click Generate PDF before these actions — or create all blocks and put them in the right order first, then fill them in.
Generate, preview, export
- Generate PDF renders the document; the preview appears on the right, paged with the arrow buttons (tooltip Previous page / Next page). Without any blocks you get a single page with the placeholder "(Empty document)".
- Download saves the result as
document.pdf. - Export JSON / Import JSON saves and loads the full document definition (settings and blocks, including embedded images) as
pdf-document.json— so you can build templates and reuse them later. - Clear All discards all blocks.
Missing characters (glyph warning)
The only embedded font, Roboto, covers Latin, Greek and Cyrillic — but no arrows, check marks or boxes (✓, ☐), other symbols, CJK characters or emoji. pdfmake would silently drop such characters. So before every run the tool checks the text against the font's character set and warns: "Not in the PDF font, left out: …", listing up to 20 of the affected characters. The check runs in the Creator and for Markdown and Simple HTML in the Convert tab.
Merge & Split
Two sub-tabs (pills): Merge and Split, both built on pdf-lib. Both also open password-protected PDFs.
Page selections
Wherever you pick pages — in the Use pages column when merging and in the Extract page ranges field when splitting — the same syntax applies:
| Input | Meaning |
|---|---|
3, 1, 2 |
exactly these pages, in this order |
2-5 |
a range, ascending |
5-2 |
a range, backwards (5, 4, 3, 2) |
8- |
from page 8 to the last page |
-3 |
from page 1 to 3 |
end or last |
the last page, also inside ranges such as 5-end |
1-3; 4-6 |
split only: ; separates several output files |
Spaces do not matter, and the en dash – works as a range sign too. Duplicate pages are kept (1, 1 takes page 1 twice) — the tool treats that as intentional. Anything that is not a page or lies outside the document stops with an error, for example "12" is outside 1–10. or "x" is not a page or range.
Merge
Drag several .pdf files onto the drop zone or pick them via Browse Files (non-PDFs are skipped with a notice). The Files to Merge table shows for each file:
- # and Filename — with a lock icon if the file was encrypted and has been decrypted (even without a password prompt, for an owner password only), and a form icon if it contains form fields.
- Pages — the page count.
- Use pages — which pages of the file go into the result. Empty (placeholder "all") means all pages. Otherwise the syntax from Page selections applies, order included; Merge treats a
;like a comma. - Size — the file size.
- Actions — Move up/Move down change the order, Rotate pages by 90° turns all pages of this file another 90° clockwise with each click (the button then shows 90°, 180° or 270°; after 270° it goes back to 0°), Remove drops the file.
Merge All combines the selected pages into one document in table order — you need at least two files. If a page selection is invalid, the tool stops with a message before producing a half-merged file. The merged PDF gets:
- Bookmarks: one entry per source file (with its title or, if none is set, its file name), jumping to its first included page. Underneath hang the bookmarks the file brought along — but only those whose target page you actually included. The sub-levels are collapsed.
- Metadata: title, author, subject and keywords of the first file that has a title.
Then download the result via Download Merged PDF. The file name follows the first file: quote.pdf becomes quote-merged.pdf. If you change the order, rotation or page selection, click Merge All again. Clear All empties the list.
If a source file contains form fields, the tool warns after merging ("Form fields may not work in the merged file: …"): pdf-lib does not reliably carry the form structure over when copying pages. Fill in forms in the Viewer & Editor first.
Split
Drag a single .pdf onto the drop zone; the tool shows its name, size and page count (plus "decrypted" for decrypted files). Close unloads the file. There are three Split Modes:
- Extract page ranges — pages following the syntax from Page selections.
1-3, 10produces one file with pages 1, 2, 3 and 10;3, 1, 2keeps the order you type;1-3; 4-6produces two files in one go. If the input is invalid, a message appears and the result list of a previous run disappears. - Split every N pages — splits the PDF into chunks of N pages (default 1); each chunk becomes its own file.
- Extract each page as single PDF — pulls every page out as a separate PDF.
After Split, the Split Results list appears: for each file its name, page range and page count plus a Download button. File names combine the source file and the pages — report.pdf with 1-3, 10 becomes report_p1-3_10.pdf. If the source PDF has a title, each part gets it with the page range appended, e.g. "Annual Report (1-3, 10)". From two result files upward, Download all (ZIP) fetches them all at once as report-split.zip (stored uncompressed, since PDFs are compressed already).
Convert
Four sub-tabs (pills): Markdown, Images, Simple HTML and Rich HTML. Remember the core distinction: Markdown and Simple HTML produce searchable text, while Rich HTML produces a raster image PDF.
Markdown → PDF
An ACE editor for Markdown; the three icon buttons in its header are Open Markdown File (.md/.markdown/.txt), Load Example and Clear. Supported:
- Headings H1–H6 (24/20/16/14/12/11 pt), bold, italic,
inline codeand~~strikethrough~~ - Bulleted and numbered lists (including nested) plus task lists —
- [ ]and- [x]come out as[ ]and[x], because Roboto has no box characters - Code blocks (dark box, Roboto 9 pt — not a monospace font), tables with a highlighted header row, blockquotes and horizontal rules (a fixed 515 pt long as in the Creator, so they only fit A4 portrait with 40 pt margins)
- Links, including formatting inside the link text;
http:,https:,mailto:andtel:links are clickable in the PDF - Inline HTML
<b>/<strong>,<i>/<em>,<u>/<ins>,<s>/<del>/<strike>and<br>as formatting; whole HTML blocks go through the Simple HTML converter instead of ending up as raw tags in the PDF - Images only as an embedded
data:URL in PNG or JPEG, and only when the paragraph contains nothing but images (one or more, no text in between). The tool does not fetch images from URLs — they appear as a placeholder[Image: …], and a message points this out. An image in the middle of text, in a list item or in a table cell becomes a placeholder too, even as adata:image, and then without a message
Under Page Settings you set Page Size (A4/A3/A5/Letter/Legal), Orientation, Font Size (6–72 pt, default 12) and Margins (0–200 pt, default 40; the generator turns 0 back into 40). Generate PDF renders the preview (with page navigation from two pages up); Download saves markdown.pdf. The result contains real text — you can search and copy from it. Characters Roboto does not know are reported by the glyph warning.
Images → PDF
Drag one or more images onto the drop zone or click it to pick them (from the keyboard: Enter or Space). Supported formats: JPG, PNG, WebP, GIF, BMP, TIFF, each up to 50 MB. PNG and JPEG are embedded directly; WebP, GIF, BMP and TIFF are first converted to PNG via a canvas (edge length capped at 4000 px). The browser does the decoding: if it cannot display a format itself — for TIFF that is the case in Chrome and Firefox, for example — the tool reports "Failed to embed image …" and leaves the image out of the PDF. In such browsers, convert TIFF files to PNG beforehand. Each image gets its own page and is placed centred within the margins.
Photo orientation: for JPEGs the tool reads the EXIF orientation that cameras and phones write. Rotated shots (90°, 180°, 270°) are drawn into the PDF rotated, using the original JPEG data — no quality loss. Mirrored orientations are applied by the browser, which means the image is re-encoded once as JPEG.
The Images list shows a thumbnail, file name, size, the Fit Mode and a remove button; Clear All empties it. The pages follow the order of the list; there is no sorting. The Fit Mode decides how the image uses the area inside the margins:
- Fit — keep the aspect ratio, fit within the area.
- Fill — scale to fill the area; whatever sticks out is cropped at the margin (the image does not spill into the page margin).
- Stretch — distort to the area.
What counts is the choice in the image list, which starts at Fit for every new image. The Default Fit setting under Page Settings has no effect in the current version. Removing or adding an image resets every entry in the list back to Fit — so set the Fit Modes only once the image list is complete.
Under Page Settings you also set Page Size (A4/A3/A5/Letter/Legal), Orientation and Margins (0–200 pt, default 40); the generator turns 0 back into 40, so borderless image pages are not possible. Generate PDF → Download saves images.pdf.
Simple HTML → PDF
An ACE editor for HTML, with Open HTML File (.html/.htm/.txt), Load Example and Clear. Supported are common block and inline elements: p, h1–h6, ul/ol/li (nested too), strong/b, em/i, code/pre, table, br, hr (a fixed 515 pt long, as in the Creator), a and blockquote; containers such as div, section, article, main, header, footer and nav are traversed, other elements are taken over as plain text. That includes <style>, <script> and <title> elements: their content ends up as visible text in the PDF — remove them first, especially when you open a complete HTML file. Tables may use colspan and rowspan; rows in thead become a dark, bold header row, th cells in the table body are set in bold. The markup is translated into real PDF text — the result is searchable. CSS styling (inline styles and stylesheets) has no effect here; that is what Rich HTML is for. Page Settings, glyph warning and download (html.pdf) as with Markdown.
Rich HTML → PDF
Also an ACE editor with Open HTML File, Load Example and Clear, but a different approach: html2pdf.js renders the HTML visually, like a browser — including CSS, colours, flexbox, images and complex layouts, on a 794 px wide canvas (A4 at 96 dpi) with a white background. The output, however, is raster: each page is embedded in the PDF as a JPEG image, and the text is not selectable, not searchable and not readable by screen readers — the notice above the Generate button says so too.
Before rendering, DOMPurify sanitises the input: <script> elements and event handlers such as onclick or onerror are removed, while markup, inline styles and <style> blocks stay. Scripts in pasted or opened HTML therefore never run inside the tool.
Page Settings: Page Size (A4/A3/A5/Letter/Legal), Orientation, Margins in mm (0–50, default 10; the generator turns 0 back into 10) and Quality Scale — 1× (fast), 2× (default) or 3× (high quality). Download as rich-html.pdf.
Reference
A static lookup with no processing — always available, even without a loaded file:
- PDF Versions — the version history from PDF 1.0 (1993) to 2.0 (2020, ISO 32000-2) with each release's additions.
- Page Sizes Reference — A3 through Executive in millimetres, inches and points.
- Available Font — the font available in the Creator (Roboto, in Regular/Medium/Italic/MediumItalic).
- Creating Accessible PDFs — notes on accessible PDFs (tagged PDF, reading order, alt text, document language, bookmarks, colour contrast, labelled form fields, Unicode fonts).
- Unit Conversions — conversion to points (1 pt = 1/72 inch) for mm, cm, inches and pixels.
- Further Reading — links to the PDF specification (ISO 32000-1) and the libraries used.
Operating limits and privacy — in brief
- Privacy: everything runs locally in the browser; nothing is uploaded, no server sees your files.
- Size limit: PDFs in Viewer, Merge and Split and images in Images → PDF up to 50 MB (browser memory safeguard, not a server limit).
- No OCR: text extraction and searchable conversions need real text; pure scans return none.
- Rich HTML is raster: no searchable text — use Simple HTML or Markdown for searchable text.
- Embedded font in the Creator, Markdown and Simple HTML: Roboto only (Latin, Greek, Cyrillic); the glyph warning reports missing characters.
- Password-protected PDFs: Merge and Split open them with the password but save the result unprotected; Info and Text in the viewer cannot read files with an open password.
- Saving edits: local download only (no server-side persistence); your changes are not kept in the browser. The embedded viewer merely remembers the last view per document (such as page and zoom) in your browser's localStorage.
For the starting point and the big picture, see the overview page. For concrete walkthroughs, see the Examples. You can try everything directly in the tool.