OXPS File Documentation
Summary
An OXPS file is a fixed-layout document in the OpenXPS (Open XML Paper Specification) format, Microsoft’s ECMA-standardised page format and a close relative of PDF. It is a ZIP package holding XML page markup, fonts and images, produced by the “Microsoft XPS Document Writer” virtual printer on Windows 8 and later. Its extension is .oxps and its MIME type is application/oxps. On Windows 10/11 open it by adding the optional XPS Viewer feature.
Technical details
| Feature | Value |
|---|---|
| Full name | OpenXPS Document (Open XML Paper Specification) |
| File extension | .oxps |
| MIME type | application/oxps |
| Format type | Fixed-layout document package (paginated, non-reflowable) |
| Container / base format | ZIP archive following the Open Packaging Conventions (OPC) |
| Page markup | XML — FixedPage elements (.fpage parts) |
| Developer | Microsoft |
| Standardised by | Ecma International |
| Standard / spec | ECMA-388 (1st edition, June 2009) |
| Introduced | 2009; default XPS flavour since Windows 8 (2012) |
| Open standard | Yes — published as ECMA-388 |
| Magic number (hex) | 50 4B 03 04 (ZIP local file header, “PK”) |
| Byte order | Little-endian (ZIP structures) |
| Namespace | http://schemas.openxps.org/oxps/v1.0 |
| Package root | FixedDocumentSequence.fdseq |
| Embedded resources | ObfuscatedType fonts, raster images, colour profiles |
| Editable | No — fixed page layout, like PDF |
| Digital signatures | Supported (OPC digital-signature parts) |
| Predecessor | XPS (Microsoft’s 2006 original, .xps) |
| Related extensions | .xps, .pdf, .zip |
| Specification | ecma-international.org/publications-and-standards/standards/ecma-388 |
What is an OXPS file?
OXPS is short for OpenXPS, the Open XML Paper Specification, a fixed-layout page format published by Ecma International as ECMA-388 in June 2009. Like PDF, it stores a finished, print-ready document: vector graphics, embedded fonts and text placed at exact coordinates, page by page, with no reflow. An .oxps file records how a document looks when printed, not an editable source you can rework into paragraphs.
Structurally an OXPS file is not a single binary blob. It is a ZIP archive that follows the Open Packaging Conventions (OPC), the same packaging model behind DOCX and XLSX. Inside the ZIP are XML parts describing each page, plus the fonts and images those pages reference. OpenXPS is the Ecma-standardised successor to Microsoft’s original 2006 XPS format; Windows 8 and later produce .oxps where Windows 7 produced .xps. Its MIME type is application/oxps. Everything below is about how that OPC package is laid out, part by part.
The OPC ZIP package and [Content_Types].xml
Because OpenXPS is built on the Open Packaging Conventions, the outer file is an ordinary ZIP archive: it opens byte-for-byte with any ZIP tool, and its first four bytes are the ZIP local file header 50 4B 03 04. Rename an .oxps to .zip, extract it, and you get a folder tree of XML and resource files rather than one opaque document.
Every OPC package must contain a part called [Content_Types].xml at the root of the archive. It maps file name extensions and specific part names to MIME content types, so a reader knows that .fpage parts are page markup, .fdoc parts are documents, .odttf parts are obfuscated fonts, and so on. Relationships between parts are declared in _rels/.rels and per-part .rels files, exactly as in a DOCX. The package is therefore self-describing: a parser reads [Content_Types].xml first, then follows relationships to find the document root.
example.oxps (a ZIP / OPC package)
├─ [Content_Types].xml content-type map for every part
├─ _rels/.rels package-level relationships → the .fdseq root
├─ FixedDocumentSequence.fdseq root: lists the documents in the package
├─ Documents/
│ └─ 1/
│ ├─ FixedDocument.fdoc ordered list of this document's pages
│ ├─ Pages/
│ │ ├─ 1.fpage XML markup of page 1 (Glyphs, Path, ...)
│ │ └─ 2.fpage XML markup of page 2
│ └─ _rels/ page → font/image relationships
└─ Resources/
├─ Fonts/ embedded (often obfuscated) fonts
└─ Images/ embedded raster images (PNG/JPEG/TIFF)
FixedDocumentSequence: the .fdseq root part
The entry point of the content is a part called FixedDocumentSequence.fdseq. ECMA-388 recommends but does not strictly mandate that extension for the root; the reader locates it through the package relationship of type .../fixedrepresentation rather than by guessing the file name. The .fdseq is a short XML file listing one or more documents in reading order, each pointed at by a source reference.
<FixedDocumentSequence xmlns="http://schemas.openxps.org/oxps/v1.0">
<DocumentReference Source="/Documents/1/FixedDocument.fdoc" />
</FixedDocumentSequence>
This two-level design, a sequence of documents each containing a sequence of pages, is why a single OXPS package can bundle several logical documents (for example a cover letter and an invoice) that a viewer presents as one continuous file. The sequence file holds no visual content of its own; it is pure navigation.
FixedDocument and FixedPage: the page tree
Each DocumentReference points at a FixedDocument part (conventionally .fdoc), whose only job is to list the pages of that document in order through PageContent elements. Every PageContent references one FixedPage part (.fpage), and it is the FixedPage that actually paints ink on the page.
<FixedDocument xmlns="http://schemas.openxps.org/oxps/v1.0">
<PageContent Source="Pages/1.fpage" />
<PageContent Source="Pages/2.fpage" />
</FixedDocument>
A FixedPage declares its Width and Height in units of 1/96 inch (the XPS device-independent pixel), then lists drawing elements. The two workhorse elements are Glyphs, which places a run of text at an exact origin with a named font and per-glyph advance widths, and Path, which draws filled or stroked vector geometry. Because text is emitted as positioned glyph runs with explicit indices and offsets, layout is pixel-exact and independent of the reader’s installed fonts, but the reading order and word boundaries are not guaranteed, which is why text extraction from OpenXPS can be imperfect.
<FixedPage Width="816" Height="1056" xml:lang="en-US"
xmlns="http://schemas.openxps.org/oxps/v1.0">
<Glyphs Fill="#ff000000"
FontUri="/Resources/Fonts/A1B2C3D4-....odttf"
FontRenderingEmSize="16"
OriginX="96" OriginY="120"
UnicodeString="Invoice 2026-0473"
Indices="..." />
<Path Fill="#ffe0e0e0" Data="M 96,140 L 720,140 L 720,142 L 96,142 Z" />
</FixedPage>
Embedded fonts and ODTTF obfuscation
To render exactly the same on any machine, an OXPS package embeds the fonts its pages use, stored under Resources/Fonts/ and referenced by the FontUri attribute of each Glyphs element. Many of these fonts are stored as obfuscated font parts, given the content type application/vnd.ms-package.obfuscated-opentype and usually the .odttf extension.
Obfuscation here is not encryption and not a security feature; it is a licensing convention shared with DOCX. The first 32 bytes of the OpenType font file are XORed with the 16 bytes of the GUID that forms the part’s file name (applied twice across the 32 bytes). A reader reverses the XOR using that GUID to recover a normal OpenType font before handing it to the rasteriser. The intent is only to stop a casual user from double-clicking the extracted font and installing it system-wide, since the font may be licensed for embedding but not for general use.
OXPS versus XPS: the namespace difference
OpenXPS and the older XPS are almost the same design, but they are not byte-compatible, and the difference is mostly in the XML namespace and a few part conventions. Microsoft’s 2006 XPS used the namespace http://schemas.microsoft.com/xps/2005/06; ECMA-388 OpenXPS uses http://schemas.openxps.org/oxps/v1.0. A reader keyed to one namespace will reject the other, which is exactly why Windows 7’s XPS Viewer cannot open an .oxps even though the internal model is nearly identical.
The XPS Viewer that shipped with Windows 8 and later reads both. On Windows 10 (since version 1803, April 2018) and Windows 11 that viewer is no longer preinstalled and must be added under Settings → Apps → Optional features → XPS Viewer, which is the single most common reason a freshly received .oxps appears to open nothing. Microsoft’s command-line XpsConverter tool translates between the two namespaces for legacy applications that accept only .xps.
How OpenXPS files are created on Windows
Users almost never create an OXPS file deliberately. The file appears when someone prints to the “Microsoft XPS Document Writer”, a virtual printer Windows 8, 10 and 11 install by default. Choosing it in the print dialog produces an .oxps instead of paper output, which is why a stray OXPS often means a physical printer or “Microsoft Print to PDF” was intended but the XPS writer was selected. The format is otherwise a print-pipeline artefact: Windows’ print spooler uses the XPS document model internally, so writing the spool stream to a file yields OpenXPS naturally.
Deep questions about the OpenXPS format
Why does an OXPS file start with the same bytes as a ZIP or DOCX?
Because all three are OPC packages, and OPC is defined on top of ZIP. The first four bytes are always the ZIP local file header 50 4B 03 04. The format is distinguished not by a magic number but by what is inside: the [Content_Types].xml content types and the FixedDocumentSequence.fdseq root in the OpenXPS namespace.
Can text be pulled cleanly out of an OXPS file?
Only approximately. OpenXPS stores each line as Glyphs runs positioned by coordinate, with a UnicodeString and glyph indices, but it does not record paragraph structure or reliable reading order. An extractor recovers the characters, yet spaces, column order and line breaks have to be inferred from geometry, so multi-column pages often come out jumbled.
References
- Ecma International — ECMA-388 Open XML Paper Specification
- Microsoft Learn — XpsConverter tool (OXPS ↔ XPS)
- Library of Congress — OpenXPS (ECMA-388) format description
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.