Merge PDF
Combine PDFs in your browser. Preview first pages, check page counts and reorder documents before downloading.
220 tools for documents, images and data. Find your task and make it happen, right in your browser.
220 tools ready when you are
Merge, split, compress, edit, sign, protect, convert — the whole document lifecycle.
Combine PDFs in your browser. Preview first pages, check page counts and reorder documents before downloading.
Add text, images, rectangles, ellipses and freehand strokes to any page — baked into the page content, verifiable in the export.
Add split points with the + markers between pages. Preview the parts and download separate PDFs.
Add legacy RC4-128 password protection to a PDF locally. Not modern AES encryption; unsuitable for sensitive-document protection.
Draw on a pad, type in a script face or upload an image, click the page to place, export — embedded at that exact position.
Click page thumbnails to choose what to keep, then export a new PDF.
Click page thumbnails to delete them — see exactly what goes before exporting.
Drag page thumbnails into a new order and export exactly what you arranged.
Click pages to rotate them in 90° steps — thumbnails preview the result live.
Style the watermark — color, opacity, font, rotation — place it with presets or drag it, previewed live.
Preview the number on the live page, pick a start value, export all pages.
Drag a crop box on the live page, preview the result, then export. Content outside stays in the file.
See the metadata currently in the file, edit it pre-filled, and export.
Pick a grid and preview sheet 1 composited exactly as it exports.
Click the live page to place text, drag to position, and export exactly what you see.
Blend base and overlay live at your chosen opacity before exporting.
Re-writes a PDF that still opens, which can fix minor structural issues. Cannot recover files that fail to open.
Click pages on a visual grid to cover them with a black layer. Visual covering only — not legal redaction.
Place a drawn signature image on a PDF page.
See the exact text that will convert before exporting slides.
See the exact text that will convert before exporting a DOCX. Layout and images are not preserved.
See the exact text lines that will convert before exporting. No table reconstruction.
Flip the page order — last becomes first. Count stays identical.
Insert blank pages at any position — resulting count shown before export.
Scale every page onto uniform A4 or Letter — centered, nothing cropped.
Saddle-stitch imposition: 2-up sheets that fold into correct page order.
Auto-detect content and tighten the visible box — nothing deleted.
One PDF per top-level bookmark, ranges previewed before export. No bookmarks — it says so.
Bake comments, shapes and form fields into the page and remove the annotation objects. Links kept.
Turn every page 90°, 180° or 270° in one click — page count and content untouched.
Embedded raster images to a ZIP — JPEGs byte-for-byte, RGB/grey as PNG; undecodable ones listed as skipped.
Fixed-size chunks of N pages, last one holds the remainder — chunk list previewed before export.
One .txt per page, zipped — no OCR, and pages without a text layer are called out.
Any N pages per sheet (2–64) in a square-ish grid, scaled to fit — sheet count shown before export.
Every page rendered to a lossless PNG at 1×–2×, zipped — exact pixel size shown before export.
Interleave two PDFs A1, B1, A2, B2 … — the duplex-scan fix; order previewed before export.
Remove RC4 or AES-128 protection with the user or owner password; AES-256 refused with a clear message.
Header and footer lines on every page with {page}/{pages} tokens — centred, Helvetica.
Prefix + zero-padded sequential number on every page, bottom-right — first/last labels previewed.
Every AcroForm field with name, type and value → CSV; no-form PDFs reported honestly.
Edit top-level bookmarks as Title | page lines and write a new outline — nested levels flattened, and it says so.
Page count, page sizes, PDF version and document metadata (title, author, dates) as plain text.
Type into real AcroForm fields, tick boxes, pick options — values written into the form itself; optional flatten.
Drag rectangles to paint regions solid white into the page content. Covers pixels; text underneath is not deleted, and it says so.
Strip the Info dictionary and XMP stream — title, author, producer, dates — pages untouched.
Delete comments, highlights, stamps and notes from every page; widgets kept, links optional; counts by type.
Writes PDF/A-2B identification (XMP pdfaid), an sRGB output intent, document ID and MarkInfo. Fonts not re-embedded — validate with veraPDF.
Consecutive parts each under your KB limit, page order kept, oversized single pages flagged — zipped with page ranges.
A new document at every page whose text contains a phrase or matches /regex/ — matching pages previewed first.
Two-page spreads cropped into left/right (or top/bottom) halves — A3 → 2×A4 — text stays selectable.
Every page rendered and converted to true luminance grayscale at your dpi; pages become images, and it says so.
Render every page to an image at your dpi and rebuild the PDF — flattens layers, forms, annotations and fonts into pixels.
Mirror every page left↔right or top↔bottom via a reflected matrix — vector content stays vector.
Click the page to drop text, checkbox and dropdown fields — real AcroForm fields with your names.
Move between documents, images and data formats without losing what matters.
Reorder thumbnails and preview each image on its A4 page exactly as exported.
Decode iPhone photos right here and see every converted JPG before downloading.
See the exact extracted text before it becomes a PDF. Layout and images are not preserved.
Structured HTML (headings, paragraphs, lists, tables, bold/italic) laid out into a paginated PDF — no fetches, no scripts; it says what it does not render.
Headings → #, bold/italic runs, bullets → "- " items; tables and images not converted, and it says so.
See the exact slide text before it becomes a PDF.
Render PDF pages as JPG images in one ZIP.
Combine JPG images into a clean PDF.
See the converted result and its exact size live. AVIF depends on your browser.
Headings, emphasis, links, lists, code — HTML previewed before download. Subset, not full CommonMark.
Strip tags and scripts, keep readable text.
Extract readable text to .txt, previewed first. No OCR — and it says so.
Clean YAML that round-trips to the identical object.
Re-encode as WebP at your quality — same pixel size, real output size shown. Tells you if your browser can't encode WebP.
YAML in, JSON out — block and flow collections, quoted and block scalars. No anchors, aliases or tags — refused with a line number, not guessed.
Rasterize SVG at 1×–3× of its declared size. Embedded external images can't be captured — fails honestly.
Decode WebP to lossless PNG — same pixels, same size, transparency kept.
Typed, reversible XML: every value carries its JSON type, arrays use <item>. XML to JSON restores it exactly.
Attributes → @attr, text → #text, repeated elements → arrays; values stay strings. FileUp24 typed XML round-trips exactly.
Header, --- separator, one row per record; pipes escaped, line breaks become <br>.
<table> with a <thead> header and one <tr> per record — every cell HTML-escaped.
Decode WebP to JPG at 92% quality — same pixel size; transparency becomes white.
Re-encode JPG as WebP at your quality — same pixel size, real output size shown; tells you if your browser can't encode WebP.
Headings, paragraphs, bold/italic, code, links, lists → Markdown. A practical subset; scripts and styles dropped.
<rows> of <row> elements with one element per header column; names sanitised, values escaped, well-formed.
Flatten transparency onto white and save as JPG at 92% — same pixel size.
Every paragraph of a Word document as plain text — read from word/document.xml in your browser.
Plain text → a real Word document, one Normal paragraph per blank-line block.
# ## ### → Heading 1–3 styles, lists → bullets, **bold**/*italic* → runs; styles.xml and numbering.xml written.
Control words and tables stripped, \'xx and \u escapes decoded, paragraph breaks kept.
Headings and paragraphs from content.xml as lines; spaces, tabs and line breaks expanded.
Base64 data:image/svg+xml URI of the exact bytes — decodes back to the original file.
data:<mime>;base64,… of the exact file bytes — no re-encoding.
Paste any data: URI (base64 or percent-encoded) and get the original file back.
Plain text → paginated PDF: sans/mono/serif, point size, A4/Letter, wrapped lines.
# ## ### headings at 24/18/14pt, bullets, bold/italic runs, wrapped and paginated.
A printable table: shaded header repeated per page, proportional columns, A4/Letter portrait or landscape — real text cells.
Browser-rendered SVG at your dpi on a page of the SVG's exact size; rasterised, and it says so.
Resize, crop, compress, convert, straighten and analyse pictures — pixel-exact.
See the resized image live at exact pixel dimensions, with output size, before downloading.
Drag on the image with ratio presets, preview the exact crop, then download.
Detects a scanned page's skew to 0.05° and rotates it straight; the angle and residual are reported as numbers.
Re-encode pixels and drop EXIF (GPS, camera, author). Visible content unchanged.
Convert browser-supported images to grayscale — the live preview is the exact export.
Rotate in 90° steps with a live preview that matches the export.
Mirror horizontally or vertically with a live preview.
Add a solid border or padding with live preview — width and color are yours.
Reads real bytes, reports the true format, downloads a correctly-named copy — bytes untouched.
Replace transparency with a solid background — every pixel fully opaque.
Pad to a perfect square — original centered on your background, nothing cropped.
Pad to an exact 16:9, 4:3, 1:1 or 9:16 frame — original centered, bars in your color, nothing scaled.
Dominant colours as hex codes with pixel share — a fast frequency count, not a perceptual model, and it says so.
Flip horizontally — left becomes right — live preview is the exact export, size unchanged.
Any degree, canvas grows to fit, corners transparent, white or black — nothing cropped, PNG out.
Trim a uniform border to the exact content box — nothing scaled, lossless PNG out.
Scale by a percentage — output pixel size shown first, aspect ratio always kept.
Bake the EXIF orientation into the pixels and drop the tag — upright everywhere.
Set the whole image to a chosen opacity — real alpha channel, PNG out.
Exact per-pixel brightness offset and contrast factor, clamped, lossless PNG out.
Blend a colour over every pixel at a chosen strength — exact per-channel mix, PNG out.
Protanopia, deuteranopia or tritanopia via a fixed Machado 2009 matrix — deterministic preview.
256-bin luminance + RGB counts exported as CSV; counts sum to the pixel total.
Most common colours as a PNG swatch strip (most dominant first) with hex codes.
Every frame of an animated GIF as a composited PNG, zipped — LZW, transparency and disposal handled.
2–200 images → a looping GIF89a encoded in your browser; exact colours when ≤255, else 6×6×6 quantised.
Windows .ico with PNG entries at the sizes you pick (16–256 px).
favicon.ico + 16/32/180/192/512 PNGs + site.webmanifest + head snippet, zipped.
Strip declaration, comments, DOCTYPE and inter-tag whitespace — same drawing, smaller file.
Linear/radial/conic gradients with any stops — live preview, exact CSS, and a PNG export at your size.
Clean, count, encode, convert, hash and generate — the developer and writer toolbox.
Count words, characters and paragraphs locally.
JavaScript regex + flags + text → live-highlighted matches with spans, capture groups and named groups; exportable report.
Compute SHA-256 checksums for any files — sha256sum-compatible output.
Clean whitespace, repeated blank lines and stray formatting.
Convert text to upper, lower or title-style case.
Sort, de-duplicate or reverse lines — output box is exactly what downloads.
Bulk find/replace with optional regex and a live match count.
Encode or decode Base64 text instantly — unicode-safe, fully local.
Percent-encode text for URLs or decode it back — instant and local.
See which lines repeat and how often — a count-sorted report.
Exact counts of uppercase, lowercase, digits, whitespace, punctuation.
Prefix every line with its number — blank lines counted, output is exactly what downloads.
Drop repeated lines, keep the first occurrence, preserve order — exact match, case and whitespace count.
Decimal, hex, binary, octal — every number converted to all four bases exactly, big integers included.
Text or URL → QR PNG, generated locally; error-correction level and size selectable.
#rrggbb ↔ rgb(r, g, b), one colour per line, exact channels — anything else flagged.
Strip #, **bold**, links, list markers and tags — keep the words and the line structure.
rgb(r, g, b) ↔ hsl(h, s%, l%), one colour per line, exact integers.
URL slugs from any text: accents removed, lower-case, hyphen-separated — one per line.
cmyk(c%, m%, y%, k%) ↔ rgb(r, g, b), one per line — the naïve conversion, no ICC profile, and it says so.
hsl(h, s%, l%) → #rrggbb and back, exact, one per line.
Rotate letters by 13 — its own inverse; digits and punctuation untouched.
RFC 4648 §5 encode/decode (+ → -, / → _, no padding); auto-detects direction.
RFC 4648 Base32 with padding; auto-detects direction; "foobar" → MZXW6YTBOI======.
& < > " ' ↔ entities; decodes named and numeric entities; auto-detects direction.
Non-ASCII ↔ \uXXXX (surrogate pairs for astral chars); "café" ↔ "caf\u00e9".
Trim lines, collapse runs, CRLF → LF, collapse blank lines — words never change.
Curly ↔ straight quotes, … ↔ ..., — ↔ --; direction chosen from the input.
Characters, words, unique words, sentences, lines + every word with its count, as CSV.
MD5 digest of any file in checksum format (<hex> <name>) — for integrity/duplicates, not security, and it says so.
SHA-1 digest in sha1sum format; WebCrypto, in your browser.
SHA-512 digest in checksum format; WebCrypto, in your browser.
IEEE CRC-32 of text and/or a file as 8 hex digits — "123456789" → cbf43926.
Cryptographically random RFC 4122 v4 UUIDs, as many as you need, fresh every time.
Unbiased random strings (rejection sampling) with length, charset and count options; entropy shown.
HMAC-SHA-1/256/384/512 of a message under a key — deterministic, WebCrypto.
Unix seconds/milliseconds ↔ ISO-8601 UTC, one per line — 1700000000 ↔ 2023-11-14T22:13:20.000Z.
Text → a scannable Code 128 (set B) barcode PNG with the standard checksum and quiet zones.
Comments and redundant whitespace removed, last semicolons dropped — rules identical.
Comments, indentation and blank lines removed; strings respected, statements never joined.
Keywords upper-cased, clauses on their own lines, AND/OR indented — identifiers and literals untouched.
Integer ↔ Roman numerals (1–3999), strict validation — 1994 ↔ MCMXCIV.
A wall-clock time in one IANA zone → the same instant in another, DST-aware, with offsets shown.
Text ↔ International Morse, letters spaced and words separated by " / "; auto-detects direction.
Text ↔ 8-bit binary per UTF-8 byte; "A" ↔ 01000001; auto-detects direction.
File + published hash → MATCH / NO-MATCH; algorithm inferred from the hash length; all digests shown.
Seeded placeholder text — same seed, same output; paragraphs and words per paragraph configurable.
3661s → "1h 1m 1s"; 1234 → "one thousand two hundred thirty-four".
Layered shadows and per-corner radii tuned visually; the exported CSS is exactly what you set.
Workbooks, CSV, JSON, YAML and TOML — cleaned, converted, compared.
See exactly which rows and cells will change — counts and samples — before exporting.
Preview the worksheet data — dimensions and first rows — before exporting CSV.
Preview which duplicate rows will be removed, with samples, before exporting.
First row becomes keys — JSON previewed before download.
Draft-07 subset; every violation listed with its JSON path and the rule it broke.
First sheet → JSON array of objects keyed by the header row; numbers stay numbers.
Export the first worksheet (up to 300 rows) as a simple text-layout PDF for quick printing.
Convert CSV data into an XLSX workbook.
Preview per-file row counts and header mismatches before merging first sheets.
See every sheet with its row count, tick what to keep, export.
Turn a JSON array of objects into CSV — output previewed before download.
Pretty-print or minify with instant validation.
Tick the columns to keep — output previewed exactly before export.
Convert tab-separated to comma-separated and back — rows and columns preserved.
Keep only rows where a column matches — header preserved, previewed exactly.
One JSON object per line — header row becomes the keys, values stay strings, previewed exactly.
One JSON object per line → CSV; header is the union of keys, missing values empty, nested values kept as JSON text.
First pipe table → CSV; separator row dropped, \| unescaped, <br> becomes a line break.
Parse and compact JSON for smaller text output. Very large numbers can lose precision.
Tab-separated text → JSON array of objects; header row becomes the keys, values stay strings.
JSON array of objects → tab-separated text; header = union of keys, one line per record.
One INSERT per record, header as the column list, values single-quoted with quotes doubled.
A JSON array → one compact JSON value per line, in order, nothing re-typed.
Repeated child elements → rows; attributes and child elements → columns; nested content flattened to text, and it says so.
A YAML list of mappings → CSV; header from the union of keys, missing keys empty.
Rebuild a text table from a page by baselines and shared x-positions; row × column count shown first.
Objects → [tables], arrays of objects → [[tables]], scalars inline; nulls dropped and listed.
Tables, arrays of tables, inline tables, strings, numbers, booleans → pretty JSON; unsupported syntax reported by line.
[sections] → objects, key = value → string properties; comments ignored, nothing retyped.
$.key, [n], [*] and .. over any JSON document — one match per line, in order.
Auto-detects the direction; pretty JSON out, exact round-trip of rows and cells.
One JSON value per line → a pretty array in the same order; bad lines reported by number.
Re-indent XML 2 spaces per level — same tree, attributes and comments preserved.
Bold header on a violet fill, frozen row, autofilter, typed numeric cells — a real styles.xml.
Every VEVENT → a row (UID, SUMMARY, DTSTART, DTEND, LOCATION, …); folded lines unfolded, escapes decoded.
Every VCARD → a row (FN, N, EMAIL, TEL, ORG, …); repeated fields joined with "; ".
Dot-path columns (a.b.c, tags[0]) from nested objects/arrays — one row per object.
See exactly what changed between two files — text, PDFs, spreadsheets, JSON.
Side-by-side pages, visual pixel difference and text diff — where practical for the files.
Compare two text files and inspect line-level changes.
Compare cells of the first worksheet in each file and show changed coordinates.
Compare normalized JSON structures and values.
Compare extracted text from two Word documents.
Compare structured CSV values and highlight changes.
Line-level LCS diff of two PDFs’ text with page references — removed/added/unchanged counts shown.
Two lists → added / removed / common, sorted, with counts.
Smaller files for e-mail and upload limits, with the size you need.
Compare before/after pages and a size estimate per preset, then export. Output text is non-selectable.
Set a KB target; pages are re-rendered as JPEG with quality/dpi stepped down until the file fits — settings reported, failure stated.
Pick a KB target and watch the live before/after result before exporting.
List names, sizes and compression of every entry by reading the directory only — nothing extracted.