Read a PDF. Extract its text and images. Strip its metadata.
safe · secure · no server · works offline · fast
…or paste a file you copied in Finder, or just start typing at the cursor.
↓ scroll for about & FAQsafe · secure · no server · works offline · fast
…or paste a file you copied in Finder, or just start typing at the cursor.
↓ scroll for about & FAQ
OmniViewer opens a .pdf — the
Portable Document Format that
started at Adobe and is now the ISO 32000 standard — right in your
browser. Drop the file and you can extract the text from every
page, pull out every embedded image, inspect and
strip the metadata it carries, walk its objects,
and read the raw bytes. A password-protected PDF opens too —
type the password and every tab works normally. There is no upload and no
server, and the parse runs in a background Web Worker so the page never freezes.
A PDF is index-then-seek. It is not a stream of pages but a tree of numbered objects, and a cross-reference table at the very end of the file records the byte offset of every one of them. The trailer points at that table, the table points at the catalog, and the catalog points at the page tree — so to read one page OmniViewer seeks straight to its object instead of scanning the file. For a multi-gigabyte PDF it reads only a bounded window at the head (the header and first objects) and the tail (the trailer and cross-reference), and the raw and hex views stay windowed over every byte.
A PDF leaks who made it: the trailer’s Info dictionary
(author, producer, creation and modification dates) and the catalog’s
XMP packet. Stripping those by appending an incremental
update would be fast, but the original bytes would still sit in the file, trivially
recoverable with strings. OmniViewer instead does a real
rewrite: every kept object is re-emitted into a fresh,
renumbered PDF with a new cross-reference table and a trailer that carries no
Info, the Info dictionary and every XMP stream physically gone. Page content is
copied byte-for-byte, so nothing is re-encoded. (For a file too large to rewrite
in the browser there is a second, clearly-labelled option that appends an update
unlinking the metadata — every reader stops showing it, but the old bytes
stay in the file, and the tool says so rather than pretending otherwise.)
A PDF’s images are image XObjects: an object whose stream
holds the pixels and whose dictionary says how to read them. When the filter is
DCTDecode the payload already is a JPEG file, so OmniViewer
hands it over untouched — byte-for-byte the picture the author embedded, with
no re-encode and no quality loss. When it is FlateDecode or
LZWDecode the stream holds raw component samples instead, so
OmniViewer unpacks them (1, 2, 4, 8 or 16 bits per component), converts from
whatever colour space the dictionary names — grey, RGB, CMYK, an indexed
palette, ICC-based, Separation — composites the soft mask if there is one,
and encodes a PNG.
.zip.For a byte-level walk through the format — objects, the cross-reference table and streams — see our deep dive into how a PDF works on the inside. Two companion write-ups cover the toolkit itself: why copying text out of a PDF breaks, and how the text is reconstructed, and pulling the figures, tables and metadata out of a PDF. Both open with a drop area, so you can run your own file through as you read.
OmniViewer opens every file format, powered by the same viewing engine as fastjsonviewer.com and hugecsv.com.
No. OmniViewer is a static page with no server-side processing: your .pdf is read directly by your browser, and every tab — text, outline, metadata, images, objects and stats — runs locally in a Web Worker. The file never leaves your computer, including when you download a cleaned copy, and a password you type to open an encrypted PDF is used in the page and never sent anywhere.
Yes — that is the Text tab. OmniViewer decodes each page’s content stream (the Tj and TJ text-showing operators) back into readable text, reconstructs the line breaks, and lets you read, copy or download it as plain text. It uses the font’s ToUnicode map when there is one and, when there is not, falls back to the font’s base encoding plus its Differences glyph names, a predefined CMap name (including the UCS-2 and legacy Shift_JIS, GBK, Big5 and EUC-KR families) or an embedded CMap stream. Text drawn as vector outlines, stored only as scanned images, or set in a subset font whose codes are bare glyph indices has no character identity to recover — that is a property of the file, not a limit of the tool, and OmniViewer says which case you are in rather than emitting garbage.
A scanned PDF has no text in it at all: each page is a photograph of a page, and the words are pixels. Nothing can extract text from that without OCR (optical character recognition), which OmniViewer does not do. What it does do is tell you that is the situation instead of showing you an empty pane: it counts the drawing operators on every page and classifies the document — text-based, scanned, image-based, mixed, or words drawn as vector outlines — and reports how many pages would need OCR. If only some pages are scans, the Text tab shows the text it did find and says which pages are missing. The Images tab will hand you the page scans themselves, which you can then run through an OCR tool.
Because the PDF’s fonts carry no usable encoding. A PDF stores character codes that only mean something through the font that draws them; when the producer omits the ToUnicode map and uses a subset font whose codes are bare glyph indices, the codes have no character identity at all. OmniViewer checks the extracted text for the signatures of this — replacement characters, private-use glyphs, control codes, an implausibly low proportion of letters — and warns you above the text rather than letting mojibake pass for a successful extraction. When nothing at all can be recovered it says so outright instead of showing an empty pane.
Yes, physically. Rather than appending a change that leaves the old data in the file, OmniViewer rewrites the PDF from scratch: every object is re-emitted into a fresh, renumbered document with a new cross-reference table and a trailer that has no Info dictionary, and every XMP metadata stream is dropped. The author, producer, dates and editing software are gone from the actual bytes — a search of the cleaned file will not find them. The page content is copied verbatim, so the document itself is unchanged.
A PDF records the byte offset of every object in a cross-reference table at the end of the file, so OmniViewer seeks straight to the objects it needs instead of reading the whole document. For a huge file it loads only a bounded window at the head and the tail, and reports when a tab (like full-document text) is working on a bounded prefix. The raw, hex and strings views stay windowed over every byte at any size.
A PDF is a set of numbered indirect objects — dictionaries, arrays, strings and streams — and the cross-reference table (a classic table or, since PDF 1.5, a compressed cross-reference stream) maps each object number to where it lives in the file. The Objects tab lists them with their type, byte offset (or the object stream they are packed into) and size, so you can see the document’s real structure. If the cross-reference is damaged, OmniViewer recovers the objects by scanning the file.
Yes. OmniViewer implements the standard security handler — RC4 at 40 and 128 bits, AES-128 and AES-256, revisions 2 through 6 — so an encrypted PDF prompts for its password and then behaves like any other file: text, outline, metadata, images and objects all work. Either the user or the owner password will open it. Many PDFs are encrypted with an *empty* user password purely to switch on restrictions like “no printing”; those open automatically with no prompt at all. The decryption runs entirely in your browser and the password is never sent anywhere. A clean copy you download afterwards is decrypted as well as stripped, so it opens without a password.
Yes — that is the Images tab. It finds every image XObject in the document (including the ones nested inside reusable form XObjects, which is where a logo repeated on every page usually lives) and gives you each one to preview and download, or all of them at once as a .zip. JPEGs come out byte-for-byte as they were embedded, with no re-encode and no quality loss; images stored as raw samples are converted to PNG, with indexed palettes, CMYK, and soft-mask transparency handled. JPEG 2000 images are handed over as the original .jp2 file even though most browsers cannot display them.
No. OmniViewer parses the PDF in pure JavaScript — the tokenizer, cross-reference reader, object-stream and Flate/LZW decoders, and the MD5, RC4 and AES needed to decrypt an encrypted file are all hand-written — so it works in any modern browser on Windows, Linux, macOS or a phone. No Acrobat, no Ghostscript, no command-line tools.