Factur-X Viewer
PDF + CIIOpen a Factur-X or ZUGFeRD PDF, extract the invoice XML embedded inside it, and read the document and its structured data side by side. Your PDF never leaves your device.
Your document never leaves your device — the file is read and parsed in this browser tab.
Drop a Factur-X or ZUGFeRD PDF here, or choose a file
Read in your browser. Never uploaded. Up to 25.0 MB.
What Factur-X is
A Factur-X invoice is one file that two different readers can both use. To a person it is an ordinary PDF — the invoice as it would be printed. To software it carries a complete UN/CEFACT Cross Industry Invoice as an embedded XML attachment, normally named factur-x.xml. Neither half is a summary of the other; they are the same invoice expressed twice, and the specification requires them to agree.
The container is a PDF/A-3 file, an archival PDF profile that permits arbitrary attachments and records the relationship between the document and the files inside it. Germany publishes the same specification as ZUGFeRD; the two are technically aligned, and files produced under either name open here.
What this viewer does
It opens the container and reports what it finds:
- The PDF itself — page count, version, size, whether XMP metadata is present, and whether the document declares interactive features such as JavaScript, forms or signatures. Declared, not executed.
- The embedded files — every attachment, with its name, description, size and detected type. Listed only; nothing is opened or offered for download.
- The invoice — the embedded XML, read through the same pipeline as the CII viewer: the same security screen, the same parser, the same structured model.
- The declared profile — MINIMUM, BASIC WL, BASIC, EN 16931 or EXTENDED, read from the PDF metadata and from the invoice’s own guideline identifier.
What it does not do
This is a viewer, not a validator, and the difference matters more here than usual because a hybrid file has so many ways of being subtly wrong. Three things are never checked, and the result page says so every time rather than leaving you to infer it:
- PDF/A-3 conformance is not checked. If the metadata claims PDF/A-3B, that claim is shown as a claim. Establishing it requires a conformance checker such as veraPDF against several hundred structural requirements.
- Factur-X profile rules are not run. A document declaring EN 16931 is not checked against what EN 16931 requires.
- French business rules are not run. Nothing on this page is a statement about compliance with the French e-invoicing reform.
For rule validation, use the France e-invoice validator, which runs the official French rule packages against a Factur-X PDF, or the UBL validator for the EN 16931 rules against UBL 2.1 documents.
Detection is evidence, not a filename
The obvious way to find the invoice is to look for an attachment called factur-x.xml. That test is wrong in both directions, so it is not the test used here. An attachment is accepted as the embedded invoice because its root element is a CrossIndustryInvoice in the UN/CEFACT namespace — nothing else qualifies it.
The filename, the name declared in the XMP metadata and the presence of the Factur-X schema then decide how confident the result is, and every signal used is listed under technical details. A file called factur-x.xml containing something else is reported as exactly that.
Your PDF never leaves your device
The file is read in this browser tab and parsed by PDF.js in a worker served from this site. This tool has no upload step to send it through, no database to store it in, and no analytics event that carries anything about it — the filename included. Opening a document produces no network request derived from its contents: not for a remote image, not for a font, not for a link the document contains.
Because a PDF is an executable-ish format handled by a large parser, the viewer is built so that you do not have to trust the document. Document JavaScript cannot run, because the scripting engine PDF.js would need is not part of what this site deploys. Pages render to a canvas with annotations, links and forms disabled, so no markup derived from the PDF is ever inserted into this page. Embedded files are enumerated but never opened.
The profiles
Factur-X defines five profiles, each a larger subset of the semantic model. The profile a document declares tells you what it is meant to contain, and it appears in two places — the XMP ConformanceLevel field and the invoice’s guideline identifier.
- MINIMUM — header data only; not a complete invoice under EN 16931.
- BASIC WL — as MINIMUM, plus VAT breakdown, but without line items.
- BASIC — line items, sufficient for simple invoices.
- EN 16931 — the full European semantic model. Often called COMFORT.
- EXTENDED — EN 16931 plus additional business data.
When the two declarations disagree, both are shown and neither is chosen. See Factur-X for the format in more depth, and EN 16931 for the semantic model underneath it.
Frequently asked questions
Is my PDF uploaded anywhere?
No. The file is read by your browser with File.arrayBuffer() and parsed by PDF.js running in a worker served from this site. This tool has no upload step, no storage and no analytics event carrying anything about your document — not even its filename. Open your browser’s network panel while you load a file: you will see the application’s own resources and nothing else.
Does this tell me whether my Factur-X file is valid?
No, and it deliberately says so on every result. This tool reports what it observed: that a PDF opened, that an embedded file was found, that the file parsed as a Cross Industry Invoice, and which profile the document declares. It does not check PDF/A-3 conformance, it does not run the Factur-X profile rules, and it does not run the French business rules. Those rows are always shown, always marked as not done.
Why does it not check PDF/A-3?
Because doing it properly means several hundred structural requirements — file structure, colour spaces, font embedding, metadata consistency, associated-file relationships — and a conformance checker such as veraPDF. Reporting "PDF/A metadata found" as if it were PDF/A conformance would be a claim about a file that could be wrong in either direction. What you get instead is the claim the file makes about itself, labelled as such.
The invoice is called something other than factur-x.xml. Will it still open?
Yes, and it will be marked as a possible embedded invoice rather than a Factur-X one. Detection is evidence-based: an attachment is accepted because it parses as a UN/CEFACT CrossIndustryInvoice, not because of its name. The reverse also holds — a file called factur-x.xml that is not a Cross Industry Invoice is refused, and you are told why.
The declared profile is shown as conflicting. What does that mean?
Two places in a hybrid file can state the profile: the XMP metadata in the PDF (ConformanceLevel) and the guideline identifier inside the embedded invoice. When they name different profiles, both are shown and neither is chosen. Silently preferring one would report a profile your document does not unambiguously declare.
Which UN/CEFACT release does the embedded invoice use — D16B or D22B?
This tool will not say, for the same reason the CII viewer will not: every release shares the CrossIndustryInvoice:100 namespace, and a Factur-X profile names a profile, not a release. Successive versions of the Factur-X specification have been built on different UN/CEFACT releases while keeping the same profile names, so reading a release out of "EN 16931" would be a guess wearing a fact’s clothing.
Can I open a password-protected PDF?
Not currently. A protected file is reported as password-protected and nothing else is attempted. Save an unprotected copy from your PDF reader and open that.
Is it safe to open a PDF I do not trust?
This viewer is built on the assumption that you should not have to trust it. Document JavaScript cannot run — the engine that would run it is not part of what this site deploys. Pages render to a canvas with annotations, links and forms disabled, so nothing from the PDF becomes part of this page. Embedded files are listed but never opened. The Content-Security-Policy permits no string evaluation and no third-party origin.
Related
- Factur-X, UBL and CII compared The three accepted formats side by side, and how to choose.
- Validating a Factur-X invoice The checks that catch a broken Factur-X before your customer does.
- CII Viewer Read a UN/CEFACT Cross Industry Invoice as a structured document.
- Factur-X The hybrid PDF/A-3 invoice format used in France and Germany.
- UN/CEFACT CII How a Cross Industry Invoice is structured, and what D22B means.
- France Formats, specifications and local validation for French e-invoicing.