InvoicePress – EN16931 E-Invoice Viewer Wordpress Plugin - Rating, Reviews, Demo & Download
Plugin Description
invoicePress – e-Invoice Viewer — Upload & visualize e-invoices (ZUGFeRD, Factur-X, XRechnung) on your WordPress site
Let your visitors drop an electronic invoice onto your page and see it as a clear, structured
view instantly — without any external service and without storing the file. A standalone
WordPress plugin that reproduces the core function of the ZUGFeRD Quba viewer, right inside a simple
shortcode.
Whether you offer an e-invoice demo, a validation helper, or a customer-facing viewer, this plugin
reads ZUGFeRD / Factur-X PDFs and CII / UBL / XRechnung XML files and renders
every invoice field — optionally with the matching EN 16931 business-term numbers (BT-…). The
result is displayed inline via AJAX, inside a Shadow DOM, so it looks identical in every theme.
Why you’ll love it
- Reads all common e-invoice formats. ZUGFeRD / Factur-X (PDF), CII (UN/CEFACT)
XML and UBL / XRechnung XML — the embedded XML is extracted from PDFs automatically. - ️ Drag & drop uploader. Vanilla JavaScript, no framework, no page reload —
the structured view appears inline. - Complete field coverage. Invoice header, parties, order and delivery data,
payment, line items, VAT breakdown, totals, notes and attachments — empty fields shown as
placeholders, just like the Quba viewer. - EN 16931 business terms. Show or hide the BT numbers live, per setting or via
the shortcode attribute bt=”1” / bt=”0”. - Theme-independent. Rendered inside a Shadow DOM with a full style reset, so no
theme styles leak through — identical look everywhere. - No storage. The file is read from the temporary upload only and is never saved.
- ️ Secure by design. XXE protection, upload validation (extension + MIME + size),
nonce-based CSRF protection with a live nonce, and a per-visitor daily rate limit. - Translatable. Text domain sp-einvoice-viewer; German translation
included.
Key features
Supported invoice formats
ZUGFeRD / Factur-X (PDF) — the embedded XML is extracted and read automatically.
CII (UN/CEFACT) XML — read directly. UBL / XRechnung (XML) — converted
to CII internally and then read.
Modern, Quba-inspired layout
A single-scroll layout with coloured section tabs (filled = data present, light = empty section): a
hero header with the highlighted amount due, followed by invoice data, buyer, seller, order/contract data,
delivery information, payment, line items, VAT breakdown, totals, notes and attachments. All fields are
always shown — even empty ones — exactly like the original viewer.
EN 16931 business terms (BT numbers)
Each field can be labelled with its EN 16931 business-term number. Visitors toggle the numbers live via
a switch in the viewer, and you set the default per embed via the shortcode attribute
bt=”1” / bt=”0” or globally in the settings. The field mapping was verified against the
official EN 16931 specification.
Theme independence via Shadow DOM
The viewer is rendered inside a Shadow DOM with a full :host style reset and px units
throughout, so no inheritable theme styles (font, size, colour, line-height) cross the boundary. The
result looks identical in every WordPress theme.
Security & privacy
XXE protection (DOCTYPE rejection, no external entity loader, no network access while parsing), upload
validation (extension + finfo MIME check + size limit), nonce-based CSRF protection with a live nonce
against page caching, and a per-visitor daily upload rate limit. The file is processed in memory only and
is never stored; every invoice value is escaped on output.
Extensible template engine
The data extraction is separated from the HTML rendering, so additional layouts can be added as a
template subclass without touching the extraction logic.
Why not pixel-perfect to Quba? The Quba viewer transforms with the KoSIT XRechnung XSLT 3.0 via
Saxon-JS; PHP only supports XSLT 1.0. An own, Quba-inspired PHP template is used instead — functionally
equivalent, but not the identical KoSIT markup.
How it works
- Add the [einvoice_viewer] shortcode to any page or post.
- The visitor drops an invoice (PDF or XML) into the viewer.
- The file is validated, rate-limited and read on the server; the invoice is rendered to HTML and
returned via AJAX. - The structured view is inserted inline — the file is never stored.
Settings
- Daily uploads per visitor — limit per calendar day (0 = unlimited).
- Maximum file size — capped by the WordPress upload limit.
- Trust proxy header — use X-Forwarded-For for the client IP (only behind a trusted
reverse proxy). - Show BT numbers by default — visitors can still toggle.
- Layout template — the active view (more can be added).
What’s included
- The plugin (shortcode, uploader, renderer, settings and the bundled horstoeko libraries).
- English and German translations (text domain sp-einvoice-viewer).
- Full documentation in English and German (README + feature overview).
Requirements & compatibility
- WordPress 5.8+ (tested up to 6.9)
- PHP 7.4+
- The bundled vendor/ directory (horstoeko libraries) inside the plugin folder
Changelog
2.0.1
- Business-term corrections, verified against the official EN 16931 specification (BT-115, BT-28/BT-33,
BT-56/BT-41, BT-10, BT-47/BT-30 and the added scheme fields BT-47-1 / BT-30-1). - Updated and recompiled translations.
- Renamed the plugin to “invoicePress – e-Invoice Viewer”; switched the text domain to
sp-einvoice-viewer and hardened input handling for the WordPress coding standards.
2.0.0
- New rectangular Quba-style layout with coloured section tabs and a dedicated card group per line
item. - Introduced the template engine (data model separated from HTML rendering).
- Many more fields (BT-127 to BT-160, payment cards, delivery details and more).
- Colours matched to the invoicePress logo.
