Formats and profiles
One calculated InvoiceData can be written in several outputs. The format decides what is produced (PDF, XML, HTML, JSON) and in which XML syntax (CII or UBL); the profile decides which rules and fields the XML follows (EN 16931, XRechnung, Peppol, a Factur-X level …). Both are chosen per render run, explicitly or automatically. This page describes the core; the Laravel API (facade, storage, downloads, queue, events) is in Laravel integration, the configuration keys in Configuration.
Output formats
| Format | Aliases | Syntax | Output | Profiles | Default profile |
|---|---|---|---|---|---|
zugferd |
factur-x, facturx |
CII | PDF/A-3b with embedded XML (and the XML) | every CII profile that can be embedded: minimum, basic-wl, basic, en16931, extended, xrechnung, xrechnung-extension |
en16931 |
xrechnung-cii |
xrechnung |
CII | XML | xrechnung, xrechnung-extension |
xrechnung |
xrechnung-ubl |
– | UBL | XML | xrechnung, xrechnung-extension |
xrechnung |
cii |
– | CII | XML | every CII profile | en16931 |
ubl |
– | UBL | XML | every UBL profile: en16931, peppol, xrechnung, xrechnung-extension |
en16931 |
peppol |
– | UBL | XML according to Peppol BIS Billing 3.0 | peppol |
peppol |
pdf |
– | – | PDF without XML (PDF/A-3b by default; optionally with embedded XML, see PDF, HTML and JSON) | – | – |
html |
– | – | the rendered template | – | – |
json |
– | – | the calculated data model | – | – |
Format and profile keys are case-insensitive. The profiles xrechnung and xrechnung-extension come with the German country pack. MINIMUM and BASIC WL carry no invoice lines and are not compliant with EN 16931 (the validation warns with QUITTIO-PROFILE-NOT-EINVOICE); use them only when a recipient asks for them.
Rendering in the core
use Quittio\Core\Quittio;
use Quittio\Country\DE\CountryDE;
$quittio = Quittio::create([], [new CountryDE]);
$result = $quittio->make($invoice)->render(); // automatic choice
$result = $quittio->make($invoice)->format('zugferd')->profile('extended')->render();
$result = $quittio->make($invoice)->formats(['zugferd', 'xrechnung-cii', 'json'])->render();
$result->as('xrechnung-cii')->xml();
make(InvoiceData|ProvidesInvoiceData|InvoiceBuilder $data) returns a Quittio\Core\Rendering\PendingInvoice (a builder is built, a ProvidesInvoiceData model converted). In Laravel, Quittio::make() returns the Laravel variant with the same methods plus queue(), and its result can be saved to a disk, downloaded and mailed (Rendering invoices).
PendingInvoice method |
Description |
|---|---|
format(string $format) |
One output format; without it the configured format (format, Laravel defaults.format) or, if none is configured, the automatic choice. |
formats(array $formats) |
Several formats from one calculation and validation run, e.g. ['zugferd', 'xrechnung-cii']; duplicates are removed. The first is the main result. |
profile(Profile\|string $profile) |
Profile for all formats of the run (by key, alias or as object). |
locale(string $locale) |
Language of PDF, HTML and generated XML texts. |
country(string $country) |
Country pack that leads the run, instead of the seller’s country (BT-40). |
template(string $template) |
Template of PDF and HTML (Templates and design). |
presentation(Presentation $presentation) |
Design defaults for this run; the invoice’s own values win. |
option(string $key, mixed $value) |
Option for templates and validation rules, e.g. watermark, paper, markdown. |
validate(bool $throwOnError = true) |
Validation mode of this run: errors throw, or (false) warnings only. |
withoutValidation() |
Switches the validation off for this render run (not for check() and prepare()). |
render(): RenderedInvoice |
Calculates, chooses format and profile, validates, writes the XML, renders template and PDF. |
check(): ValidationResult |
Validates like a render run (also the XML levels, including the XML that pdf embeds with pdf.b2c_embed_xml), without template and PDF, whatever the validation mode; returns the result and does not throw for invalid data. |
prepare(): PreparedInvoice |
Calculates and validates like check() without rendering; returns the calculated data, the chosen formats with their profiles (formats, format(), profile(); null for formats that write or embed no XML), the leading and buyer country packs, the locale and the validation result. |
data(): InvoiceData, options(): RenderOptions |
The data and the collected options. |
The profile of a format is, in this order: profile() of the call; the configured profile (profile, Laravel defaults.profile) if the format allows it (allowed profile, syntax, embeddable into the PDF); the profile of the automatic choice; the default profile of the format; en16931 (Quittio::DEFAULT_PROFILE). A configured profile therefore applies to ->format('zugferd') and to formats chosen by a country rule as well, and is skipped where it does not fit (e.g. basic for xrechnung-cii or peppol). Without a configured profile (null, the default) the format or the automatic choice decides. A run fails with a ConfigurationException for an unknown format, a profile the format does not allow, a profile that is not available in the syntax of the format (e.g. peppol in zugferd) and a profile that cannot be embedded into a PDF; an unknown profile throws an InvalidArgumentException.
Result
render() returns a Quittio\Core\Rendering\RenderedInvoice:
| Method | Description |
|---|---|
data(): InvoiceData |
The calculated data (totals, VAT breakdown, line amounts, due date). |
format(): string, profile(): ?Profile |
Format key (aliases resolved, e.g. zugferd for factur-x) and profile; null for outputs without XML. |
validation(): ValidationResult |
Validation result including warnings (Validation). |
as(string $format): RenderedInvoice |
The result of another format of the same run, by format key (not alias); LogicException for a format that was not rendered. |
formats(): array |
Keys of all formats of the run. |
pdf(), xml(), html() |
The outputs; LogicException if the format produced none. hasPdf(), hasXml() check first. |
json(): string |
The calculated data as pretty-printed JSON (for every format). |
contents(): string, extension(): string, mimeType(): string |
The main output (PDF, otherwise XML, HTML, JSON), its extension and MIME type. |
filename(?string $extension = null): string |
File name of the main output, or with another extension. |
hashes(): array |
SHA-256 hashes of PDF, XML and HTML (['pdf' => …, 'xml' => …]), e.g. for archiving. |
save(string $path): string |
Writes the main output to a file, or into a directory with filename(); creates missing directories and returns the path. |
File names
File names follow the pattern filename (Laravel pdf.filename), default {title}_{number}.{ext}:
| Placeholder | Value |
|---|---|
{title} |
Document title in the run locale, e.g. “Rechnung”, “Stornorechnung”, “Credit note” (Presentation::$title overrides it) |
{number} |
Invoice number |
{date} |
Issue date, YYYY-MM-DD |
{format} |
Format key, e.g. zugferd |
{ext} |
Extension of the output: pdf, xml, html or json |
Characters other than letters, digits, ., _ and - in title and number become _. Example: Rechnung_RE-2026-0042.pdf, for the XRechnung of the same run Rechnung_RE-2026-0042.xml.
Automatic choice
Without a format, Quittio\Core\Formats\DefaultFormatResolver decides. Domestic means that seller and buyer lie in the same VAT territory (VatTerritory::sameVatTerritory(): Monaco counts as France, excluded territories such as Büsingen or Heligoland as not domestic) or that the buyer has no country code.
- Domestic invoices: the format rules of the leading country pack, which decide only what the country prescribes (German format choice). Germany: a valid Leitweg-ID in BT-10 or a buyer electronic address with scheme
0204→xrechnung-ciiwithxrechnung; small amount invoices (smallAmount()) between parties in the German Inland (without Büsingen and Heligoland) →pdf; everything else goes on to the next steps. - A buyer that is not a consumer and is reachable via Peppol (only with a lookup, see below) →
peppol. - Consumers →
pdf. - Other domestic invoices →
zugferdwith the configured profile (defaulten16931). - Cross-border: the format rules of the buyer’s country pack (a buyer in an excluded territory of the seller’s country uses the seller’s pack; Germany: Leitweg-ID → XRechnung, whatever the seller’s country); without a choice, within the EU VAT territory →
zugferdwith the configured profile. - Seller or buyer outside the EU VAT territory →
pdf(e.g. a US seller invoicing a German business).
The chosen format is then upgraded: when the invoice uses features of profile EXTENDED (sub lines, extended() data or line references) and the choice is zugferd or cii with another profile, the profile becomes extended. The same upgrade applies to an explicitly requested CII format without ->profile(), e.g. ->format('zugferd'), and to a configured profile, but only for formats that allow extended. With auto_upgrade_profile = false (Laravel format_resolver.auto_upgrade_profile) such an invoice fails with a ConfigurationException instead. XRechnung has no EXTENDED profile: ->format('xrechnung-cii') keeps the profile xrechnung and the validation reports the sub lines; render XRechnung with sub lines as ->format('xrechnung-ubl')->profile('xrechnung-extension').
prepare() shows the choice without rendering:
$prepared = $quittio->make($invoice)->prepare();
$prepared->format(); // "xrechnung-cii"
$prepared->profile()?->key(); // "xrechnung"
Peppol lookup
The default resolver chooses peppol only with a lookup, a closure that receives the BuyerParty and returns whether the buyer is reachable in the Peppol network. Quittio ships no lookup; pass your own resolver:
use Quittio\Core\Data\Party\BuyerParty;
use Quittio\Core\Formats\DefaultFormatResolver;
$quittio = Quittio::create($config, [new CountryDE], formatResolver: new DefaultFormatResolver(
defaultProfile: 'en16931',
autoUpgradeProfile: true,
peppolLookup: fn (BuyerParty $buyer): bool => $directory->isRegistered($buyer->electronicAddress),
));
In Laravel name an invokable class in format_resolver.peppol_lookup (resolved from the container; it receives the BuyerParty and returns a bool), or set a callable at runtime; see Peppol lookup in the Laravel integration.
Country rules come first, but decide only what the country prescribes (Germany: public buyers and small amount invoices); domestic business invoices and cross-border invoices reach the lookup.
Own resolver and country rules
A resolver implements Quittio\Core\Formats\FormatResolver (resolve(InvoiceData $invoice, ResolvedCountries $countries): FormatChoice) and returns a FormatChoice(string $format, ?string $profile = null, ?string $reason = null); a null profile uses the default profile of the format. Register it with Quittio::create(formatResolver: …) or $quittio->withFormatResolver(…), in Laravel with Quittio::extend('format_resolver', 'mine', fn ($app, array $config) => new MyResolver) and format_resolver.driver = 'mine'. A country pack contributes its domestic and buyer rules through formatRules(), a list of Quittio\Core\Formats\FormatRule (resolve(InvoiceData $invoice): ?FormatChoice, null if the rule does not apply); the first rule that returns a choice wins (Country packs).
Profiles
| Key | Name | Level | Syntax | Specification identifier (BT-24) | Business process (BT-23) default | Additionally required |
|---|---|---|---|---|---|---|
minimum |
Factur-X/ZUGFeRD MINIMUM | MINIMUM | CII | urn:factur-x.eu:1p0:minimum |
– | – |
basic-wl |
Factur-X/ZUGFeRD BASIC WL | BASIC WL | CII | urn:factur-x.eu:1p0:basicwl |
– | – |
basic |
Factur-X/ZUGFeRD BASIC | BASIC | CII | urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic |
– | – |
en16931 |
EN 16931 | EN 16931 | CII, UBL | urn:cen.eu:en16931:2017 (…:2026 with standard(StandardVersion::En16931_2026)) |
– | – |
extended |
Factur-X/ZUGFeRD EXTENDED | EXTENDED | CII | urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended |
– | – |
peppol |
Peppol BIS Billing 3.0 | EN 16931 | UBL | urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 |
urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 |
BT-34, BT-49; Peppol rules |
xrechnung |
XRechnung 3.0 | EN 16931 | CII, UBL | urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0 |
urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 |
BT-10, BT-34, BT-49, BG-6, BG-16; BR-DE rules |
xrechnung-extension |
XRechnung 3.0 Extension | EN 16931 | CII, UBL | urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0#conformant#urn:xeinkauf.de:kosit:extension:xrechnung_3.0 |
as XRechnung | as XRechnung |
Aliases: basicwl (basic-wl), en-16931 and comfort (en16931), peppol-bis-3 (peppol). The default business process is written only when the invoice sets none (businessProcess()). The registry is available as $quittio->profiles() (get(), has(), all(), register(), alias(), bySpecificationId()).
What each profile carries
The writers leave out every field that the profile does not contain; the validation (level L2) reports such fields as warning QUITTIO-PROFILE-NOT-ALLOWED, mandatory fields of a profile as error QUITTIO-PROFILE-REQUIRED, and data of profile EXTENDED or the XRechnung extension in another profile as error. The “Level” column of the field reference names the lowest level of every field.
| Level | Contains | Drops |
|---|---|---|
| MINIMUM | Number, issue date, type code, currency, buyer reference, purchase order reference, business process, seller name, legal registration, VAT identifier, tax number and country, buyer name and legal registration, total without VAT, VAT total, total with VAT, amount due | lines, addresses, VAT breakdown, payment data and everything else |
| BASIC WL | MINIMUM plus postal addresses, identifiers and electronic addresses of seller and buyer, seller trading name, buyer VAT identifier, tax currency, tax point date, due date, contract, despatch advice and accounting references, payment terms text, notes, preceding invoice, payee, tax representative, delivery, invoicing period, payment means with IBAN and direct debit, document allowances and charges, VAT breakdown, all totals | invoice lines |
| BASIC | BASIC WL plus lines: identifier, note, quantity and unit, prices (net, list price, discount, base quantity), VAT, item name and standard identifier, line period, line allowances and charges, line amount | item description, seller and buyer item numbers, classification, origin country, attributes, line object identifier, order line and accounting references, contacts, seller additional legal information, buyer trading name, supporting documents, project, sales order, receiving advice, tender and invoiced object references, payment means text, card, account name and BIC |
| EN 16931 | everything of EN 16931 | data of profile EXTENDED |
| EXTENDED | EN 16931 plus sub lines (with parent line identifier and line status), ExtendedData and LineExtendedData, the exchange rate, cash discounts and late fees as structured elements, several cash discount tiers, instalments, further payment instructions, line references, exemption reasons repeated on line and allowance level |
– |
The UBL profiles (en16931, peppol, xrechnung, xrechnung-extension) are on level EN 16931; UBL ignores extended() data and writes sub lines only for the XRechnung extension.
Capabilities
Profiles can implement marker interfaces in Quittio\Core\Profiles\Capabilities that change how the writers work:
| Interface | Effect | Implemented by |
|---|---|---|
RequiresVatBreakdownRate |
The VAT breakdown always carries a rate, 0 for category O (BR-DE-14). | xrechnung, xrechnung-extension |
StructuredCashDiscountText |
Cash discounts are written to BT-20 in the notation #SKONTO#TAGE=…#PROZENT=…# (Payment terms). |
xrechnung, xrechnung-extension |
ExtendsCodeLists |
additionalCodes(string $codeList) adds codes to an official code list for the validation. |
xrechnung-extension (identifier schemes XR01 to XR03 for ICD and EAS) |
Own profiles and formats
A profile implements Quittio\Core\Profiles\Profile; AbstractProfile provides the defaults (syntax CII, EN 16931:2017 only, embedded as factur-x.xml with AFRelationship Alternative, EN 16931 compliant, no additional rules). Register it in a country pack (profiles()) or with $quittio->profiles()->register(new MyProfile). Formats are registered with $quittio->formats()->register(new OutputFormat(string $key, ?Syntax $syntax = null, bool $pdf = false, bool $embedsXml = false, ?string $defaultProfile = null, array $profiles = [], bool $html = false, bool $json = false)) and alias(string $alias, string $key); an empty $profiles allows every profile of the syntax. XML is written by one XmlSerializer per syntax (syntax(): Syntax, serialize(InvoiceData $invoice, Profile $profile, SerializationOptions $options = new SerializationOptions): string); $quittio->withSerializer(…) replaces the CII or UBL writer, in Laravel Quittio::extend('serializer', …).
ZUGFeRD and Factur-X
The format zugferd produces a PDF/A-3b (written by mPDF, PDFAversion 3-B) with the CII XML as associated file. The XML is the same as xml() of the run, byte for byte. The PDF metadata carry the title “{title} {number}” (e.g. “Rechnung RE-2026-0042”), the seller as author and “Quittio” as creator; the paper size comes from the presentation, then the option paper (Laravel pdf.paper), then the country pack (Germany: A4).
Embedded files
| Profile | File name in the PDF | AFRelationship | XMP fx:ConformanceLevel |
XMP fx:Version |
|---|---|---|---|---|
| BASIC, EN 16931, EXTENDED | factur-x.xml |
Alternative |
BASIC, EN 16931, EXTENDED |
1.0 |
| MINIMUM, BASIC WL | factur-x.xml |
Data |
MINIMUM, BASIC WL |
1.0 |
| XRechnung, XRechnung extension | xrechnung.xml |
Alternative |
XRECHNUNG |
the XRechnung version, 3.0 |
The embedded file has the MIME type text/xml and the description “Factur-X/ZUGFeRD Invoice” or “XRechnung Invoice”. The XMP metadata contain the Factur-X extension schema (namespace urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#, prefix fx) with DocumentType INVOICE (also for credit notes), DocumentFileName, Version and ConformanceLevel, and its PDF/A extension schema description. Peppol cannot be embedded.
XRechnung can be embedded as well: ->format('zugferd')->profile('xrechnung') gives a PDF with xrechnung.xml (ZUGFeRD profile XRECHNUNG).
Supporting documents (attachment(), BG-24) are part of the XML (base64 encoded), not separate files in the PDF; the PDF carries exactly one associated file.
Drafts and watermarks
Drafts and previews carry a watermark (Presentation::$watermark, or the option watermark) and never produce e-invoice XML: a run with a watermark and any format with XML (ZUGFeRD/Factur-X, XRechnung, CII, UBL, Peppol, also next to pdf in formats([...])) throws a ConfigurationException. Watermarked PDFs are plain PDF without PDF/A (PDF/A forbids the transparency) and without embedded XML (Watermark).
$quittio->make($draft)->format('pdf')->option('watermark', 'ENTWURF')->render();
PDF/A and logos
PDF/A is produced for every PDF with embedded XML, and for pdf output when pdf.pdfa is true. Logos in PDF/A documents are re-encoded as RGB PNG on white, because PDF/A forbids the alpha channel that mPDF writes; SVG logos are rasterised with the PHP extension imagick (without it, rendering fails with a ConfigurationException) and must be self-contained (Logos).
PDF renderers
The PDF comes from a Quittio\Core\Pdf\PdfRenderer (render(RenderRequest $request): string): MpdfRenderer (default), CallbackRenderer for another HTML-to-PDF engine (Browsershot, Gotenberg …) or PassthroughRenderer for a finished PDF; how to configure and register them is described in PDF renderers. For the e-invoice the request is decisive: RenderRequest::$pdfa asks for PDF/A-3b and RenderRequest::$embedded carries the XML as EmbeddedXml (content, filename, relationship, conformanceLevel, description, documentType, version). A renderer whose supportsEmbedding() returns true honours both itself; for one that returns false, the core passes the result to MpdfPostProcessor whenever PDF/A or an embedded XML is requested. CallbackRenderer and PassthroughRenderer return true and use their own post processor (default MpdfPostProcessor): it imports every page into a new PDF/A-3b and adds output intent, metadata, the XML as associated file and the Factur-X XMP metadata, so foreign PDFs become ZUGFeRD. A result that does not start with %PDF throws a PdfException.
XRechnung
XRechnung 3.0, the German CIUS of EN 16931, is provided by the German country pack (XRechnung profiles) in both syntaxes: xrechnung-cii (alias xrechnung) and xrechnung-ubl, as plain XML, or embedded in ZUGFeRD as shown above. The automatic choice uses xrechnung-cii for domestic German invoices whose buyer reference (BT-10) is a Leitweg-ID with valid check digits or whose buyer electronic address has the scheme 0204.
- Required on top of EN 16931: buyer reference BT-10 (for public buyers the Leitweg-ID), electronic addresses of seller and buyer (BT-34, BT-49), seller contact with name, phone and email (BG-6), payment instructions (BG-16), seller and buyer city and postcode; further BR-DE rules (XRechnung rules).
- The business process BT-23 defaults to
urn:fdc:peppol.eu:2017:poacc:billing:01:1.0. - Cash discounts in BT-20 use the notation
#SKONTO#TAGE=7#PROZENT=2.00#(Payment terms); the VAT breakdown always carries a rate.
The XRechnung extension (->profile('xrechnung-extension'), specification identifier …#conformant#urn:xeinkauf.de:kosit:extension:xrechnung_3.0) adds:
- sub lines, in UBL only (
xrechnung-ubl; CII fails with BR-DEX-15), - third party payments (
xrechnungExtension(), BG-DEX-09), written ascac:PrepaidPaymentand added to the amount due; only in UBL invoices, - the identifier schemes
XR01toXR03.
The profile is never chosen automatically; request it explicitly. The extension has no credit note in UBL (DE-XRECHNUNG-EXT-01): cancel such invoices with the strategy negative_invoice.
Peppol BIS Billing 3.0
The format peppol writes UBL 2.1 according to Peppol BIS Billing 3.0 (profile peppol, CustomizationID urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0, ProfileID urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 unless the invoice sets BT-23). Seller and buyer need an electronic address (BT-34, BT-49), and the Peppol rules apply (Validation). Credit note type codes produce a CreditNote document. Quittio produces the document; transmission through an access point is not part of the core.
CII and UBL
The formats cii and ubl write plain XML in any profile of the syntax. Both writers require calculated data (the render run calculates) and write in the element order of the XSD:
- CII (UN/CEFACT Cross Industry Invoice D16B, CEN/TS 16931-3-3, root
rsm:CrossIndustryInvoice) is the syntax of ZUGFeRD/Factur-X and supports all Factur-X levels. It carries only one preceding invoice reference (BG-3) on header level, so further references are dropped. Party identifiers without scheme are written asram:ID, with scheme asram:GlobalID; an account identifier that is no IBAN asProprietaryID. The tax point date is written with the first VAT breakdown. - UBL (OASIS UBL 2.1, CEN/TS 16931-3-2) writes an
Invoicedocument, or aCreditNotedocument for credit note type codes (InvoiceTypeCode::isCreditNote()) withCreditedQuantity, the due date (BT-9) in the first payment means (without payment instructions it is not written) and the project reference (BT-11) as additional document reference with type code 50, followed by the tender or lot reference (BT-17) asOriginatorDocumentReference(the element order ofCreditNotediffers fromInvoice). A note with subject code is written as#CODE#text; the creditor identifier of a direct debit (BT-90) as seller party identifier with schemeSEPA; a sales order reference without purchase order reference with the order IDNA; the payment card network asNA.
Common rules: amounts with exactly two decimals, prices and percentages with at least two decimals, quantities without trailing zeros, dot as decimal separator; BT-6 only when it differs from BT-5; texts generated for BT-20 in the run locale. SerializationOptions(string $locale = 'en', bool $indent = true) controls locale and indentation when a writer (CiiWriter, UblWriter) is used directly.
PDF, HTML and JSON
pdfrenders the template as PDF without e-invoice XML. It is PDF/A-3b unlesspdf.pdfaisfalseor the run has a watermark. Withpdf.b2c_embed_xml = true(Laravelformat_resolver.b2c_embed_xml) the CII XML in the profile of the call or the configured profile (default EN 16931) is embedded as in ZUGFeRD, also for consumers, and the result hasxml()andprofile(); watermarked runs never embed XML.htmlreturns the rendered template as HTML (html()), e.g. for previews or mails.jsonreturns the calculated data model (json(), the same asInvoiceData::toJson(JSON_PRETTY_PRINT)of the calculated data, see Building invoices).
These formats are not e-invoices: the validation skips the profile field matrix (level L2) for them, the other levels run as usual.
Output configuration
Quittio::create() key |
Laravel key | Default | Effect |
|---|---|---|---|
format |
defaults.format |
null |
Format of runs without format(); null = automatic choice (Quittio::create() also accepts auto). |
profile |
defaults.profile |
null |
Default profile for every format that allows it; null = the profile of the format or of the automatic choice. |
auto_upgrade_profile |
format_resolver.auto_upgrade_profile |
true |
Upgrade to EXTENDED when EXTENDED features are used. |
pdf.b2c_embed_xml |
format_resolver.b2c_embed_xml |
false |
Embed the CII XML into pdf output. |
pdf.pdfa |
pdf.pdfa |
true |
pdf output as PDF/A-3b (ZUGFeRD is always PDF/A). |
filename |
pdf.filename |
{title}_{number}.{ext} |
File names. |
locale, country |
defaults.locale, defaults.country |
null |
Locale of the run; country pack used when the seller has no country code. |
options.paper |
pdf.paper |
null |
Paper size that wins over the country pack default. |
temp_dir |
pdf.cache_path |
system temp directory | Temporary files of mPDF and the logo cache. |
| – | format_resolver.driver |
default |
Resolver registered with Quittio::extend('format_resolver', …). |
peppolLookup of DefaultFormatResolver |
format_resolver.peppol_lookup |
null |
Peppol lookup: invokable class (Laravel: resolved from the container) or callable that receives the BuyerParty and returns whether the buyer is reachable via Peppol. |
| – | pdf.renderer |
mpdf |
Renderer registered with Quittio::extend('renderer', …). |
All keys of config/quittio.php are described in Configuration.