[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs:templates":3},{"versions":4,"version":26,"nav":28,"path":52,"kind":106,"page":107},[5,10,13,16,18,20,22,24],{"name":6,"label":7,"prefix":8,"channel":9},"0.7","0.7 (latest)","","latest",{"name":11,"label":12,"prefix":11,"channel":11},"next","next (unreleased)",{"name":14,"label":14,"prefix":14,"channel":15},"0.6","old",{"name":17,"label":17,"prefix":17,"channel":15},"0.5",{"name":19,"label":19,"prefix":19,"channel":15},"0.4",{"name":21,"label":21,"prefix":21,"channel":15},"0.3",{"name":23,"label":23,"prefix":23,"channel":15},"0.2",{"name":25,"label":25,"prefix":25,"channel":15},"0.1",{"name":6,"label":7,"prefix":8,"channel":9,"base":27},"\u002Fdocs",[29,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,91,94,97,100,103],{"slug":30,"title":31,"preview":32},"index","Home",false,{"slug":34,"title":35,"preview":32},"getting-started","Getting started",{"slug":37,"title":38,"preview":32},"concepts","E-invoicing basics",{"slug":40,"title":41,"preview":32},"examples","Examples",{"slug":43,"title":44,"preview":32},"building-invoices","Building invoices",{"slug":46,"title":47,"preview":32},"formats","Formats and profiles",{"slug":49,"title":50,"preview":32},"validation","Validation",{"slug":52,"title":53,"preview":32},"templates","Templates and design",{"slug":55,"title":56,"preview":32},"documents","Quotes and other documents",{"slug":58,"title":59,"preview":32},"reading","Reading incoming invoices",{"slug":61,"title":62,"preview":32},"laravel","Laravel integration",{"slug":64,"title":65,"preview":32},"configuration","Configuration",{"slug":67,"title":68,"preview":32},"commands","Artisan commands",{"slug":70,"title":71,"preview":32},"testing","Testing",{"slug":73,"title":74,"preview":32},"country-packs","Country packs",{"slug":76,"title":77,"parent":74,"preview":32},"country-at","Austria",{"slug":79,"title":80,"parent":74,"preview":32},"country-be","Belgium",{"slug":82,"title":83,"parent":74,"preview":32},"country-ch","Switzerland",{"slug":85,"title":86,"parent":74,"preview":32},"country-fr","France",{"slug":88,"title":89,"preview":90},"managed","Managed layer (preview)",true,{"slug":92,"title":93,"preview":32},"troubleshooting","Troubleshooting",{"slug":95,"title":96,"preview":32},"faq","FAQ",{"slug":98,"title":99,"preview":32},"compatibility","Versioning and compatibility",{"slug":101,"title":102,"preview":32},"field-reference","Field reference",{"slug":104,"title":105,"preview":32},"ai","AI assistants","page",{"title":53,"description":108,"html":109,"headings":110,"editUrl":226,"markdownUrl":227,"prev":228,"next":229},"This page explains how Quittio prints an invoice or a document (quote, reminder …) as PDF or HTML, and how you change its look. Read it when you want your own logo, colours, texts or layout.","\u003Ch1 id=\"templates-and-design\">Templates and design\u003C\u002Fh1>\n\u003Cp>This page explains how Quittio prints an invoice or a \u003Ca href=\"\u002Fdocs\u002Fdocuments\">document\u003C\u002Fa> (quote, reminder …) as PDF or HTML, and how you change its look. Read it when you want your own logo, colours, texts or layout. The first sections need no template knowledge; the \u003Ca href=\"#view-model\">view model\u003C\u002Fa> reference at the end is for writing own templates. The design only affects the PDF and HTML, never the e-invoice XML (\u003Ca href=\"\u002Fdocs\u002Fconcepts#what-an-e-invoice-is\">What an e-invoice is\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch2 id=\"design-levels\">Design levels\u003Ca class=\"q-doc-anchor\" href=\"#design-levels\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>You can change the design on four levels. Start with level 1 and go further only when it is not enough.\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Level\u003C\u002Fth>\n\u003Cth>Use it when you want to\u003C\u002Fth>\n\u003Cth>What you do\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>1 – Configuration\u003C\u002Ftd>\n\u003Ctd data-label=\"Use it when you want to\">Set logo, colours, font, texts, footer, sender line, letter layout, paper or QR code\u003C\u002Ftd>\n\u003Ctd data-label=\"What you do\">Set \u003Ccode>pdf.*\u003C\u002Fcode> in \u003Ccode>config\u002Fquittio.php\u003C\u002Fcode>, or pass a \u003Ca href=\"#presentation\">\u003Ccode>Presentation\u003C\u002Fcode>\u003C\u002Fa> per invoice or per call (\u003Ca href=\"#logo-colours-and-texts-level-1\">Logo, colours and texts\u003C\u002Fa>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>2 – Partials\u003C\u002Ftd>\n\u003Ctd data-label=\"Use it when you want to\">Change one part of the default template, e.g. the payment block\u003C\u002Ftd>\n\u003Ctd data-label=\"What you do\">\u003Ccode>php artisan vendor:publish --tag=quittio-views\u003C\u002Fcode> and change single partials (\u003Ca href=\"#changing-single-partials-level-2\">Changing single partials\u003C\u002Fa>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>3 – Own template\u003C\u002Ftd>\n\u003Ctd data-label=\"Use it when you want to\">Use a layout of your own\u003C\u002Ftd>\n\u003Ctd data-label=\"What you do\">\u003Ccode>php artisan make:quittio-template my-design\u003C\u002Fcode>, then \u003Ccode>-&gt;template('invoices.my-design.layout')\u003C\u002Fcode> or \u003Ccode>pdf.template\u003C\u002Fcode> (\u003Ca href=\"#own-templates-level-3\">Own templates\u003C\u002Fa>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>4 – Own renderer\u003C\u002Ftd>\n\u003Ctd data-label=\"Use it when you want to\">Create the PDF with another engine, e.g. Browsershot or Gotenberg\u003C\u002Ftd>\n\u003Ctd data-label=\"What you do\">\u003Ccode>Quittio::extend('renderer', …)\u003C\u002Fcode> (\u003Ca href=\"#pdf-renderers\">PDF renderers\u003C\u002Fa>); PDF\u002FA and the embedded XML stay with the package\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>PDF\u002FA is the PDF variant for long-term archiving. A ZUGFeRD\u002FFactur-X invoice is a PDF\u002FA-3 file with the XML embedded (\u003Ca href=\"\u002Fdocs\u002Fconcepts#formats\">Formats\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>Templates only display data. Quittio prepares totals, VAT, the texts of the payment terms, QR codes and labels in the \u003Ca href=\"#view-model\">view model\u003C\u002Fa> before the template runs. The same data also produces the XML. After rendering, the \u003Ca href=\"#mandatory-field-guard\">mandatory field guard\u003C\u002Fa> checks that the template printed every value an invoice must show.\u003C\u002Fp>\n\u003Ch2 id=\"default-templates\">Default templates\u003Ca class=\"q-doc-anchor\" href=\"#default-templates\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Quittio ships one default design in two template engines. Both print the same document.\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Engine\u003C\u002Fth>\n\u003Cth>Template\u003C\u002Fth>\n\u003Cth>Used by\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Blade\u003C\u002Ftd>\n\u003Ctd data-label=\"Template\">\u003Ccode>quittio::templates.default.layout\u003C\u002Fcode> with partials in \u003Ccode>quittio::templates.default.partials\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Used by\">Laravel (\u003Ccode>pdf.template\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Plain PHP\u003C\u002Ftd>\n\u003Ctd data-label=\"Template\">\u003Ccode>packages\u002Fcore\u002Fresources\u002Ftemplates\u002Fdefault.php\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Used by\">\u003Ccode>Quittio::create()\u003C\u002Fcode> without Laravel (template \u003Ccode>default\u003C\u002Fcode>); Laravel falls back to it for names that are no Blade view\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The PDF is created by mPDF, a PHP library that converts the HTML of the template into a PDF (\u003Ca href=\"#pdf-renderers\">PDF renderers\u003C\u002Fa>). To see the result with your configuration, render the sample invoices with \u003Ccode>php artisan quittio:preview\u003C\u002Fcode> or open the preview route (\u003Ca href=\"#html-output-and-preview\">HTML output and preview\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch3 id=\"page-layout\">Page layout\u003Ca class=\"q-doc-anchor\" href=\"#page-layout\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The default templates print A4 pages (\u003Ca href=\"#paper-size\">Paper size\u003C\u002Fa>) with a left margin of 20 mm and a right margin of 19 mm, in the font Geist (\u003Ca href=\"#fonts\">Fonts\u003C\u002Fa>). The issuer is the party that sends the document: the seller, or the buyer on a self-billed invoice (German &quot;Gutschrift&quot;, see \u003Ca href=\"\u002Fdocs\u002Fconcepts#german-terms\">German terms\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>First page:\u003C\u002Fstrong> the logo (at most 14 mm high) or the issuer's name in the primary colour at the top left, 15 mm from the top edge. Below it is the address field at the position of the \u003Ca href=\"#letter-layouts\">letter layout\u003C\u002Fa>: the sender line at its top and the recipient directly below. The invoice details (number, dates, references …) are on the right at the same height. Then follow the title, the line table, the totals with the gross total (or the amount due) in the primary colour, and the payment block.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Following pages:\u003C\u002Fstrong> a header with the logo or name on the left, and the title with number, the recipient with customer number and the invoice date on the right. The line table continues below the header with its column heads.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Every page:\u003C\u002Fstrong> the footer with up to four columns (address; phone and e-mail; register and legal information; VAT identifier and tax number) and the page number.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Which elements use which colour is listed in \u003Ca href=\"#design\">Design\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"carry-over-across-pages\">Carry-over across pages\u003Ca class=\"q-doc-anchor\" href=\"#carry-over-across-pages\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>When the line table continues on the next page, the default templates print a running total at the break:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The last row of the page reads &quot;Continued on page 2&quot;, &quot;Carried forward&quot; and the sum of the line amounts so far. The German output is &quot;Fortsetzung auf Seite 2&quot; (continued on page 2) and &quot;Übertrag&quot; (carried forward).\u003C\u002Fli>\n\u003Cli>The first row of the next page reads &quot;Brought forward from page 1&quot; (German &quot;Übertrag von Seite 1&quot;) with the same amount.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The mPDF renderer does this. It lays the document out once. Only if the line rows land on more than one page, it lays the document out again with space reserved for the carry rows, finds the page breaks, splits the table there and inserts the rows. Single-page documents are rendered once. Documents without prices (delivery notes) get no carry-over.\u003C\u002Fp>\n\u003Cp>Own templates can use the same mechanism (\u003Ca href=\"#carry-over-in-own-templates\">Carry-over in own templates\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch2 id=\"logo-colours-and-texts-level-1\">Logo, colours and texts (level 1)\u003Ca class=\"q-doc-anchor\" href=\"#logo-colours-and-texts-level-1\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Most designs need only configuration. Set the defaults for all invoices in \u003Ccode>config\u002Fquittio.php\u003C\u002Fcode> (\u003Ca href=\"\u002Fdocs\u002Fconfiguration\">Configuration\u003C\u002Fa>):\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">\u002F\u002F config\u002Fquittio.php\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#A5D6FF\">'pdf'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'logo'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\"> storage_path\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'app\u002Flogo.png'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">),                 \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F PNG, JPEG or SVG\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'colors'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'primary'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '#0f766e'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'text'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '#15171c'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'muted'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '#5f6470'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'secondary'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> null\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'font'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'geist'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,                                       \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F or 'inter', or a registered font\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'texts'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'salutation'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> null\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'intro'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Thank you for your order.'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'closing'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Kind regards'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'sender_line'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> null\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,                                   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F null: generated from the seller\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#A5D6FF\">    'footer_columns'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [],                                  \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F []: generated from the seller\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">],\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>To change the design of one invoice, call \u003Ccode>-&gt;presentation()\u003C\u002Fcode> on the builder. The design is stored with the invoice data, so the invoice looks the same when it is rendered again. To change it for one render call only, e.g. for a second brand, call \u003Ccode>-&gt;presentation()\u003C\u002Fcode> on \u003Ccode>Quittio::make()\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Data\\Presentation\\Colors\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Data\\Presentation\\Presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Laravel\\Facades\\Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$invoice \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">invoice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#8B949E\">    \u002F\u002F ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">([\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'introText'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Thank you for your order.'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'letterLayout'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'din5008a'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">])   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F this invoice\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">build\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$result \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">($invoice)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">logo\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">storage_path\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'app\u002Fbrand-b.png'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">colors\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Colors\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">primary\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'#7c3aed'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)))  \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F this call\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">render\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The invoice's own presentation wins over the presentation of the call, which wins over the configuration. The rules are in \u003Ca href=\"#presentation\">Presentation\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>You want to change\u003C\u002Fth>\n\u003Cth>Setting\u003C\u002Fth>\n\u003Cth>Details\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Logo\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.logo\u003C\u002Fcode>, \u003Ccode>Presentation::$logo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#logos\">Logos\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Colours\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.colors\u003C\u002Fcode>, \u003Ccode>Presentation::$colors\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#presentation\">Presentation\u003C\u002Fa>, \u003Ca href=\"#design\">Design\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Font\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.font\u003C\u002Fcode>, \u003Ccode>pdf.fonts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#fonts\">Fonts\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Salutation, intro and closing text\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.texts.*\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#texts-and-markdown\">Texts and Markdown\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Footer columns and sender line\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.footer_columns\u003C\u002Fcode>, \u003Ccode>pdf.sender_line\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#presentation\">Presentation\u003C\u002Fa>, \u003Ca href=\"#design\">Design\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Position of the address field, fold marks\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.layout\u003C\u002Fcode>, \u003Ccode>pdf.fold_marks\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#letter-layouts\">Letter layouts\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Paper size\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.paper\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#paper-size\">Paper size\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Payment QR code\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>pdf.payment_qr.*\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#payment-qr-codes\">Payment QR codes\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Single printed texts, e.g. &quot;Amount due&quot;\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>Presentation::$labels\u003C\u002Fcode>, language files\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#translations-and-locales\">Translations and locales\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Title of the document\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">\u003Ccode>Presentation::$title\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#presentation\">Presentation\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Draft marker\u003C\u002Ftd>\n\u003Ctd data-label=\"Setting\">option \u003Ccode>watermark\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Details\">\u003Ca href=\"#watermark\">Watermark\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"presentation\">Presentation\u003Ca class=\"q-doc-anchor\" href=\"#presentation\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ccode>Quittio\\Core\\Data\\Presentation\\Presentation\u003C\u002Fcode> holds everything that only affects the PDF and HTML. It is never written to the XML.\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Property\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003Cth>Effect\u003C\u002Fth>\n\u003Cth>Laravel configuration\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>template\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Template of this invoice (\u003Ca href=\"#selecting-a-template\">Selecting a template\u003C\u002Fa>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.template\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>logo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Logo (\u003Ca href=\"#logos\">Logos\u003C\u002Fa>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.logo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>colors\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>Colors(primary: '#2741d9', text: '#15171c', muted: '#5f6470', secondary: null)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.colors.primary\u003C\u002Fcode>, \u003Ccode>text\u003C\u002Fcode>, \u003Ccode>muted\u003C\u002Fcode>, \u003Ccode>secondary\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>font\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode> (\u003Ccode>geist\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Font family (\u003Ca href=\"#fonts\">Fonts\u003C\u002Fa>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.font\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>senderLine\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode> (generated)\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Sender line above the address\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.sender_line\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>letterLayout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode> (country default)\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ca href=\"#letter-layouts\">Letter layout\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.layout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>salutation\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Plain text before the intro\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.texts.salutation\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>introText\u003C\u002Fcode>, \u003Ccode>closingText\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Markdown texts before the lines and at the end\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.texts.intro\u003C\u002Fcode>, \u003Ccode>pdf.texts.closing\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>footerColumns\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode> (generated)\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>list&lt;list&lt;string&gt;&gt;\u003C\u002Fcode>, one list of lines per column\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.footer_columns\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lineGroups\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ccode>list&lt;LineGroup&gt;\u003C\u002Fcode> (\u003Ccode>id\u003C\u002Fcode>, \u003Ccode>title\u003C\u002Fcode>, \u003Ccode>showSubtotal = true\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">– (\u003Ccode>InvoiceBuilder::group()\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>showGrossPrices\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Print the price including VAT below the net unit price\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>showItemNumbers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>false\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Print the seller's item number (BT-155) after the item name\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.show_item_numbers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>paymentQr\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>auto\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ca href=\"#payment-qr-codes\">Payment QR code\u003C\u002Fa>: \u003Ccode>auto\u003C\u002Fcode>, \u003Ccode>girocode\u003C\u002Fcode>, \u003Ccode>swiss-qr-bill\u003C\u002Fcode>, \u003Ccode>none\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.payment_qr.type\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>watermark\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ca href=\"#watermark\">Watermark\u003C\u002Fa> text\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">– (option \u003Ccode>watermark\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>paper\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>A4\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">\u003Ca href=\"#paper-size\">Paper size\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">\u003Ccode>pdf.paper\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>labels\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Label overrides, e.g. \u003Ccode>['amount_due' =&gt; 'Total to pay']\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Title instead of the type code label; also used in the file name and the PDF title\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>explicit\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Default\">\u003Ccode>[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Effect\">Properties whose value wins even when it equals the default\u003C\u002Ftd>\n\u003Ctd data-label=\"Laravel configuration\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>BT-155 and the other BT numbers name the fields of the European standard EN 16931 (\u003Ca href=\"\u002Fdocs\u002Fconcepts#en-16931-and-business-terms\">Business terms\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>Hints for single lines are \u003Ccode>LinePresentation\u003C\u002Fcode> objects (\u003Ccode>groupId\u003C\u002Fcode>, \u003Ccode>highlight\u003C\u002Fcode>, \u003Ccode>showGrossPrice\u003C\u002Fcode>). The line builder sets them:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>LineBuilder::group($groupId)\u003C\u002Fcode> puts the line into a line group.\u003C\u002Fli>\n\u003Cli>\u003Ccode>highlight()\u003C\u002Fcode> shades the line.\u003C\u002Fli>\n\u003Cli>\u003Ccode>showGrossPrice(?bool $show = true)\u003C\u002Fcode> prints the price including VAT of this line, or with \u003Ccode>false\u003C\u002Fcode> not, whatever \u003Ccode>showGrossPrices\u003C\u002Fcode> says. \u003Ccode>null\u003C\u002Fcode> follows the presentation.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Builder\\Line\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Data\\Presentation\\Colors\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Data\\Presentation\\Presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Laravel\\Facades\\Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$invoice \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">invoice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#8B949E\">    \u002F\u002F ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">([\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'logo'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\"> storage_path\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'app\u002Flogo.png'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'introText'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Thank you for your order.'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">group\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'hardware'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Hardware'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)                                     \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F line group with subtotal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">line\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Line\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'Router'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">netPrice\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'89.00'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">quantity\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">2\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">group\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'hardware'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))   \u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">\u002F\u002F group(): Line::make()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">build\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">make\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">($invoice)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Presentation\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">colors\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Colors\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">primary\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'#0f766e'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">), \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">labels\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'amount_due'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Total to pay'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    ->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">render\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">();\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>\u003Cstrong>How presentations are merged.\u003C\u002Fstrong> The design of a run is built property by property from three layers: the invoice presentation over the presentation of the call (\u003Ccode>-&gt;presentation(...)\u003C\u002Fcode>) over the configured design.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A value that equals the default of an empty \u003Ccode>Presentation\u003C\u002Fcode> (\u003Ccode>false\u003C\u002Fcode>, \u003Ccode>[]\u003C\u002Fcode>, \u003Ccode>'auto'\u003C\u002Fcode>, \u003Ccode>'A4'\u003C\u002Fcode>, \u003Ccode>null\u003C\u002Fcode>) counts as not set and keeps the value of the layer below.\u003C\u002Fli>\n\u003Cli>Objects such as \u003Ccode>colors\u003C\u002Fcode> replace the value below as a whole.\u003C\u002Fli>\n\u003Cli>Labels are merged key by key.\u003C\u002Fli>\n\u003Cli>To reset a configured value for one invoice, name the property in \u003Ccode>explicit\u003C\u002Fcode>. Example: \u003Ccode>new Presentation(showGrossPrices: false, paper: 'A4', footerColumns: [], explicit: ['showGrossPrices', 'paper', 'footerColumns'])\u003C\u002Fcode> switches gross prices off, prints on A4 although \u003Ccode>pdf.paper\u003C\u002Fcode> is Letter, and prints no footer columns.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Checks.\u003C\u002Fstrong> Values are checked when rendering; invalid values throw a \u003Ccode>ConfigurationException\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>colours must be hex values (\u003Ccode>#2741d9\u003C\u002Fcode> or \u003Ccode>#fff\u003C\u002Fcode>);\u003C\u002Fli>\n\u003Cli>fonts must be plain family names (letters, digits, space, \u003Ccode>_\u003C\u002Fcode> and \u003Ccode>-\u003C\u002Fcode>, at most 64 characters);\u003C\u002Fli>\n\u003Cli>letter layouts and payment QR code types must be known.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>An unknown \u003Ccode>pdf.payment_qr.type\u003C\u002Fcode> already fails when the Laravel configuration is mapped (first use of the facade).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Render options.\u003C\u002Fstrong> Some design settings are render options: per call with \u003Ccode>-&gt;option()\u003C\u002Fcode>, without Laravel also in the \u003Ccode>options\u003C\u002Fcode> key of \u003Ccode>Quittio::create()\u003C\u002Fcode>. They are \u003Ccode>fold_marks\u003C\u002Fcode> (bool, default \u003Ccode>true\u003C\u002Fcode>), \u003Ccode>markdown\u003C\u002Fcode> (bool), \u003Ccode>paper\u003C\u002Fcode> (string), \u003Ccode>watermark\u003C\u002Fcode> (string), \u003Ccode>girocode_amount\u003C\u002Fcode> (\u003Ccode>due\u003C\u002Fcode>, \u003Ccode>discounted\u003C\u002Fcode>) and \u003Ccode>logo_cache\u003C\u002Fcode> (directory).\u003C\u002Fp>\n\u003Ch3 id=\"logos\">Logos\u003Ca class=\"q-doc-anchor\" href=\"#logos\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Set the logo with \u003Ccode>pdf.logo\u003C\u002Fcode> or \u003Ccode>Presentation::$logo\u003C\u002Fcode>. The default templates print it at the top left of the first page and in the header of the following pages.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Logos are local files, data URIs or \u003Ccode>http\u003C\u002Fcode>\u002F\u003Ccode>https\u003C\u002Fcode> URLs of PNG, JPEG or SVG images, at most 10 MB and 25 megapixels. Other stream wrappers (\u003Ccode>ftp:\u002F\u002F\u003C\u002Fcode>, \u003Ccode>php:\u002F\u002F\u003C\u002Fcode>, \u003Ccode>phar:\u002F\u002F\u003C\u002Fcode> …), a leading \u003Ccode>\u002F\u002F\u003C\u002Fcode>, backslashes and surrounding whitespace fail with a \u003Ccode>ConfigurationException\u003C\u002Fcode>, as does a local file that does not exist.\u003C\u002Fli>\n\u003Cli>A data URI is decoded strictly, checked and re-encoded, so only validated bytes reach the renderer.\u003C\u002Fli>\n\u003Cli>Remote logos are downloaded by Quittio on every render (no cache), with a 10 s timeout and at most 3 redirects, each checked again. Quittio downloads only from hosts whose every IPv4 and IPv6 address is public: no loopback, private, link-local, shared, reserved, documentation or multicast range, also not inside NAT64 addresses. The connection is pinned to the checked address, and TLS is verified for the host name. A refused address fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>; an unreachable logo is left out. The downloaded copy is embedded as data URI (also in HTML output).\u003C\u002Fli>\n\u003Cli>Raster logos larger than 600 × 200 px are scaled down with GD (transparency is kept). Scaled copies of local files are cached in the logo cache: \u003Ccode>pdf.cache_path\u003C\u002Fcode>\u002F\u003Ccode>logos\u003C\u002Fcode>, without Laravel \u003Ccode>temp_dir\u003C\u002Fcode>\u002F\u003Ccode>logos\u003C\u002Fcode>, default \u003Ccode>sys_get_temp_dir()\u002Fquittio-mpdf\u002Flogos\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>For PDF\u002FA (ZUGFeRD\u002FFactur-X, XRechnung in PDF, or \u003Ccode>pdf.pdfa = true\u003C\u002Fcode>), every logo is re-encoded as RGB PNG on white, because PDF\u002FA forbids the alpha channel mPDF writes. SVG is rasterised with the PHP extension \u003Ccode>imagick\u003C\u002Fcode> (SVG coder only, 300 dpi but at most twice the logo size). Without \u003Ccode>imagick\u003C\u002Fcode>, an SVG logo fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode> in PDF\u002FA documents.\u003C\u002Fli>\n\u003Cli>SVG logos must be self-contained: no \u003Ccode>href\u003C\u002Fcode> or \u003Ccode>url()\u003C\u002Fcode> to files, URLs or nested SVG (embedded PNG, JPEG, GIF or WebP data URIs are allowed) and no entity declarations.\u003C\u002Fli>\n\u003Cli>mPDF never fetches anything itself (\u003Ca href=\"#pdf-renderers\">PDF renderers\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>In HTML output, a local logo is referenced by its file path, which browsers cannot load. Use a URL or data URI for logos in HTML that is shown in a browser.\u003C\u002Fli>\n\u003Cli>Local logo paths and URLs are trusted configuration. Do not take \u003Ccode>Presentation::$logo\u003C\u002Fcode> or issuer branding from end users unless your application validates them (e.g. an uploaded file stored by the application).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"fonts\">Fonts\u003Ca class=\"q-doc-anchor\" href=\"#fonts\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Three fonts are bundled (SIL Open Font License):\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Family\u003C\u002Fth>\n\u003Cth>Files\u003C\u002Fth>\n\u003Cth>Script\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>geist\u003C\u002Fcode> (default, \u003Ccode>pdf.font = 'geist'\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003Ctd data-label=\"Files\">Regular, Bold, Italic, Bold Italic; \u003Ccode>geistmedium\u003C\u002Fcode> with Medium and SemiBold\u003C\u002Ftd>\n\u003Ctd data-label=\"Script\">Latin and Cyrillic\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>inter\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Files\">Regular, Bold, Italic, Bold Italic\u003C\u002Ftd>\n\u003Ctd data-label=\"Script\">Latin, Cyrillic and Greek\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>liberationsans\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Files\">Regular, Bold; used for the \u003Ca href=\"#payment-slips\">payment slip\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd data-label=\"Script\">Latin, Cyrillic and Greek\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Set \u003Ccode>pdf.font = 'inter'\u003C\u002Fcode> for Greek names or texts: mPDF prints no characters the font does not have. The font name is used as CSS \u003Ccode>font-family\u003C\u002Fcode> in the templates and as default font of mPDF.\u003C\u002Fp>\n\u003Cp>Register more fonts in the \u003Ccode>pdf\u003C\u002Fcode> section of \u003Ccode>config\u002Fquittio.php\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#A5D6FF\">'font'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'corporate'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#A5D6FF\">'fonts'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'corporate'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'R'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Corporate-Regular.ttf'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'B'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Corporate-Bold.ttf'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'I'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Corporate-Italic.ttf'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'BI'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> 'Corporate-BoldItalic.ttf'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#A5D6FF\">'font_directories'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> =>\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> [\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">resource_path\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'fonts'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">)],\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cul>\n\u003Cli>Use lower case family names, as mPDF looks fonts up in lower case.\u003C\u002Fli>\n\u003Cli>Fonts must be embeddable TrueType fonts (PDF\u002FA embeds all fonts).\u003C\u002Fli>\n\u003Cli>\u003Ccode>php artisan vendor:publish --tag=quittio-fonts\u003C\u002Fcode> copies Geist, Inter and Liberation Sans to \u003Ccode>resources\u002Ffonts\u002Fquittio\u002Fgeist\u003C\u002Fcode>, \u003Ccode>…\u002Finter\u003C\u002Fcode> and \u003Ccode>…\u002Fliberation\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>The Laravel renderer searches \u003Ccode>pdf.font_directories\u003C\u002Fcode>, then \u003Ccode>resources\u002Ffonts\u002Fquittio\u003C\u002Fcode> and its subdirectories automatically. Fonts placed there only need an entry in \u003Ccode>pdf.fonts\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Font files are taken from the first directory that has them. The configured directories come before the bundled fonts and those of mPDF, so a published and edited font replaces the bundled one.\u003C\u002Fli>\n\u003Cli>Without Laravel, pass the fonts to the renderer: \u003Ccode>new MpdfRenderer(tempDir: …, fonts: [...], fontDirectories: [...], defaultFont: 'corporate')\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"letter-layouts\">Letter layouts\u003Ca class=\"q-doc-anchor\" href=\"#letter-layouts\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>A letter layout fixes the address field on the first page, so that the recipient appears in the window of a window envelope. It is a \u003Ccode>Quittio\\Core\\View\\LetterLayout\u003C\u002Fcode> with these values in mm (defaults in parentheses): \u003Ccode>name\u003C\u002Fcode>, \u003Ccode>addressTop\u003C\u002Fcode> (45), \u003Ccode>addressLeft\u003C\u002Fcode> (20), \u003Ccode>addressWidth\u003C\u002Fcode> (85), \u003Ccode>addressHeight\u003C\u002Fcode> (45), \u003Ccode>senderLineHeight\u003C\u002Fcode> (5), \u003Ccode>foldMarks\u003C\u002Fcode> (\u003Ccode>[]\u003C\u002Fcode>), \u003Ccode>punchMark\u003C\u002Fcode> (\u003Ccode>null\u003C\u002Fcode>) and \u003Ccode>addressZoneTop\u003C\u002Fcode> (17.7). \u003Ccode>LetterLayout::free()\u003C\u002Fcode> is the layout without norm.\u003C\u002Fp>\n\u003Cp>The layout is \u003Ccode>Presentation::$letterLayout\u003C\u002Fcode> (\u003Ccode>pdf.layout\u003C\u002Fcode>), otherwise the country pack default, otherwise \u003Ccode>free\u003C\u002Fcode>. Country packs provide layouts with \u003Ccode>letterLayouts()\u003C\u002Fcode>; an unknown name fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode> listing the known layouts.\u003C\u002Fp>\n\u003Cp>The German pack provides layouts after DIN 5008, the German standard for business letters:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Layout\u003C\u002Fth>\n\u003Cth>Address field from the top\u003C\u002Fth>\n\u003Cth>Fold marks\u003C\u002Fth>\n\u003Cth>Punch mark\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>din5008a\u003C\u002Fcode> (form A)\u003C\u002Ftd>\n\u003Ctd data-label=\"Address field from the top\">27 mm\u003C\u002Ftd>\n\u003Ctd data-label=\"Fold marks\">87 and 192 mm\u003C\u002Ftd>\n\u003Ctd data-label=\"Punch mark\">148.5 mm\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>din5008b\u003C\u002Fcode> (form B, default)\u003C\u002Ftd>\n\u003Ctd data-label=\"Address field from the top\">45 mm\u003C\u002Ftd>\n\u003Ctd data-label=\"Fold marks\">105 and 210 mm\u003C\u002Ftd>\n\u003Ctd data-label=\"Punch mark\">148.5 mm\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>free\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Address field from the top\">45 mm (layout default)\u003C\u002Ftd>\n\u003Ctd data-label=\"Fold marks\">none\u003C\u002Ftd>\n\u003Ctd data-label=\"Punch mark\">none\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The default templates print the sender line at the top of the address field and the recipient directly below it, both inside the window of a window envelope. DIN 5008 divides the address field into zones; own templates can use them (\u003Ccode>design.addressZoneTop\u003C\u002Fcode>, \u003Ccode>design.noticeZoneHeight\u003C\u002Fcode>, see \u003Ca href=\"#design\">Design\u003C\u002Fa>). Fold and punch marks are printed at the left edge unless \u003Ccode>pdf.fold_marks\u003C\u002Fcode> (option \u003Ccode>fold_marks\u003C\u002Fcode>) is \u003Ccode>false\u003C\u002Fcode>. See \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#din-5008-letter-layouts\">Country packs\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"paper-size\">Paper size\u003Ca class=\"q-doc-anchor\" href=\"#paper-size\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The paper is the first of:\u003C\u002Fp>\n\u003Col>\n\u003Cli>the invoice presentation's \u003Ccode>paper\u003C\u002Fcode>, the presentation of the call and the configured presentation, each only when it is not \u003Ccode>A4\u003C\u002Fcode> or names \u003Ccode>paper\u003C\u002Fcode> in \u003Ccode>explicit\u003C\u002Fcode>;\u003C\u002Fli>\n\u003Cli>the option \u003Ccode>paper\u003C\u002Fcode> (\u003Ccode>pdf.paper\u003C\u002Fcode>);\u003C\u002Fli>\n\u003Cli>the country pack default (Germany: A4).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Ccode>pdf.paper = null\u003C\u002Fcode> uses the country default; a configured size wins, also \u003Ccode>A4\u003C\u002Fcode>. The value is a page format of mPDF such as \u003Ccode>A4\u003C\u002Fcode>, \u003Ccode>A5\u003C\u002Fcode> or \u003Ccode>Letter\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"watermark\">Watermark\u003Ca class=\"q-doc-anchor\" href=\"#watermark\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>A watermark marks drafts and previews: \u003Ccode>-&gt;option('watermark', 'DRAFT')\u003C\u002Fcode> or \u003Ccode>Presentation::$watermark\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Watermarked PDFs are rendered without PDF\u002FA, because PDF\u002FA does not allow the transparency of watermarks.\u003C\u002Fli>\n\u003Cli>They never contain e-invoice XML. A watermark together with any format that produces XML (also next to \u003Ccode>pdf\u003C\u002Fcode> in \u003Ccode>formats([...])\u003C\u002Fcode>) throws a \u003Ccode>ConfigurationException\u003C\u002Fcode>, so a draft can never pass as an e-invoice.\u003C\u002Fli>\n\u003Cli>The default templates print it with mPDF's \u003Ccode>&lt;watermarktext&gt;\u003C\u002Fcode> (alpha 0.08) and, for browsers, as rotated CSS overlay (\u003Ccode>design.watermarkCss\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>The labels \u003Ccode>draft\u003C\u002Fcode> and \u003Ccode>preview\u003C\u002Fcode> can be used as text: &quot;DRAFT&quot; and &quot;PREVIEW&quot;, in German &quot;ENTWURF&quot; (draft) and &quot;VORSCHAU&quot; (preview).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"payment-qr-codes\">Payment QR codes\u003Ca class=\"q-doc-anchor\" href=\"#payment-qr-codes\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The default templates print a QR code next to the bank details that banking apps can scan to fill in the transfer. The type is set with \u003Ccode>Presentation::$paymentQr\u003C\u002Fcode> (\u003Ccode>pdf.payment_qr.type\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003Ccode>paymentQr\u003C\u002Fcode>\u003C\u002Fth>\n\u003Cth>Generator\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>auto\u003C\u002Fcode> (default)\u003C\u002Ftd>\n\u003Ctd data-label=\"Generator\">A registered generator (\u003Ccode>setPaymentQrGenerator()\u003C\u002Fcode>, Laravel \u003Ccode>pdf.payment_qr.generator\u003C\u002Fcode>). Otherwise what the country pack names in \u003Ccode>CountryDefaults::$paymentQr\u003C\u002Fcode>: \u003Ccode>none\u003C\u002Fcode> prints no code; for other values the country pack's generator (\u003Ccode>paymentQr()\u003C\u002Fcode>), otherwise the EPC GiroCode for \u003Ccode>girocode\u003C\u002Fcode> (the default, also without country pack) and no code for other types\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>girocode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Generator\">EPC GiroCode, the European QR code for SEPA credit transfers\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>swiss-qr-bill\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Generator\">The generator registered with \u003Ccode>setPaymentQrGenerator()\u003C\u002Fcode> (Laravel: \u003Ccode>pdf.payment_qr.generator\u003C\u002Fcode>), otherwise the QR bill of the country pack Switzerland (\u003Ca href=\"\u002Fdocs\u002Fcountry-ch#qr-bill\">\u003Ccode>quittio\u002Fcountry-ch\u003C\u002Fcode>\u003C\u002Fa>) for its sellers. Without either, the render run fails with a \u003Ccode>ConfigurationException\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>none\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Generator\">No code\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>No code is printed on refunds (credit notes, negative invoices) and on self-billed invoices.\u003C\u002Fp>\n\u003Cp>The EPC GiroCode (\u003Ccode>EpcGiroCodeGenerator\u003C\u002Fcode>, standard EPC069-12 version 002) is created when:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>the currency is EUR,\u003C\u002Fli>\n\u003Cli>the payment means is a (SEPA) credit transfer (code 30 or 58) with a valid IBAN,\u003C\u002Fli>\n\u003Cli>and the amount due is between 0.01 and 999,999,999.99.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Its payload contains the BIC (optional), the IBAN, the amount, the beneficiary (payee name, otherwise account name, otherwise seller name, at most 70 characters) and the remittance information (BT-83, otherwise the invoice number, at most 140 characters); in total at most 331 bytes.\u003C\u002Fp>\n\u003Cp>\u003Ccode>pdf.payment_qr.girocode_amount\u003C\u002Fcode> (option \u003Ccode>girocode_amount\u003C\u002Fcode>) is \u003Ccode>due\u003C\u002Fcode> (the amount due) or \u003Ccode>discounted\u003C\u002Fcode> (the amount after the first cash discount). With \u003Ccode>discounted\u003C\u002Fcode>, \u003Ccode>qrCode.note\u003C\u002Fcode> says until when the code is valid (&quot;QR code with the amount after cash discount (…), valid until …&quot;). Payment reminders get a code over the total of the reminder (\u003Ca href=\"\u002Fdocs\u002Fdocuments#payment-reminders\">Payment reminders\u003C\u002Fa>).\u003C\u002Fp>\n\u003Cp>\u003Ccode>payment.qrCode\u003C\u002Fcode> in the view model holds \u003Ccode>type\u003C\u002Fcode> (e.g. \u003Ccode>girocode\u003C\u002Fcode>), \u003Ccode>payload\u003C\u002Fcode>, \u003Ccode>dataUri\u003C\u002Fcode> (PNG data URI rendered with GD, SVG without GD; PNG because mPDF's SVG output violates PDF\u002FA), \u003Ccode>amount\u003C\u002Fcode> and \u003Ccode>note\u003C\u002Fcode>. \u003Ccode>Quittio\\Core\\Pdf\\Qr\\QrImage::svg()\u003C\u002Fcode>, \u003Ccode>png()\u003C\u002Fcode> and \u003Ccode>dataUri()\u003C\u002Fcode> render any payload; \u003Ccode>border: false\u003C\u002Fcode> leaves out the quiet zone of four modules (the code alone, as on the payment slip). Own generators implement \u003Ccode>PaymentQrGenerator\u003C\u002Fcode> (\u003Ccode>key()\u003C\u002Fcode>, \u003Ccode>supports(InvoiceData)\u003C\u002Fcode>, \u003Ccode>payload(InvoiceData, array $options)\u003C\u002Fcode>) and are returned by a country pack's \u003Ccode>paymentQr()\u003C\u002Fcode>. The default templates caption a GiroCode with the label \u003Ccode>girocode\u003C\u002Fcode> (&quot;GiroCode&quot;) and other codes printed next to the bank details with the label \u003Ccode>payment_qr\u003C\u002Fcode> (&quot;QR-Code zum Bezahlen&quot;, &quot;Scan to pay&quot;).\u003C\u002Fp>\n\u003Ch4 id=\"payment-slips\">Payment slips\u003Ca class=\"q-doc-anchor\" href=\"#payment-slips\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh4>\n\u003Cp>A generator that also implements \u003Ccode>Quittio\\Core\\Pdf\\Qr\\ProvidesPaymentSlip\u003C\u002Fcode> (\u003Ccode>slip(InvoiceData $invoice, string $payload, string $locale): ?PaymentSlip\u003C\u002Fcode>; also called for the code of a payment reminder, whose payload carries the reminder total) prints its code on a payment slip instead of next to the bank details, laid out after the payment part of the Swiss QR bill: a receipt of 62 mm and a payment part of 148 mm, 105 mm high, at the bottom of a page of its own without footer, the code at 46 × 46 mm without quiet zone, separated by dashed lines with a note. \u003Ccode>PaymentSlip\u003C\u002Fcode> holds the titles, the headed sections of payment part and receipt (a section without lines and a missing amount are printed as empty fields to fill in by hand), the currency and amount with their headings, the acceptance point, the separation note and an optional image in the middle of the code (\u003Ccode>mark\u003C\u002Fcode>, e.g. the Swiss cross). The texts are printed in Liberation Sans, which Quittio bundles for it.\u003C\u002Fp>\n\u003Cp>\u003Ccode>payment.qrCode.slip\u003C\u002Fcode> in the view model holds these values (\u003Ccode>title\u003C\u002Fcode>, \u003Ccode>receiptTitle\u003C\u002Fcode>, \u003Ccode>sections[].heading\u003C\u002Fcode>, \u003Ccode>sections[].lines\u003C\u002Fcode>, \u003Ccode>receiptSections\u003C\u002Fcode>, \u003Ccode>currencyHeading\u003C\u002Fcode>, \u003Ccode>amountHeading\u003C\u002Fcode>, \u003Ccode>currency\u003C\u002Fcode>, \u003Ccode>amount\u003C\u002Fcode>, \u003Ccode>acceptancePoint\u003C\u002Fcode>, \u003Ccode>separationNote\u003C\u002Fcode>, \u003Ccode>mark\u003C\u002Fcode>) and \u003Ccode>dataUri\u003C\u002Fcode>, the code without quiet zone; codes without slip have no \u003Ccode>slip\u003C\u002Fcode>. Own templates print the slip with the partial \u003Ccode>payment-slip\u003C\u002Fcode> (Blade) or the end of \u003Ccode>default.php\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"texts-and-markdown\">Texts and Markdown\u003Ca class=\"q-doc-anchor\" href=\"#texts-and-markdown\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Line descriptions and notes are also part of the e-invoice XML. The templates therefore print them as plain text (\u003Ccode>lines[].description.html\u003C\u002Fcode>, \u003Ccode>notes[].html\u003C\u002Fcode>: escaped, line breaks kept).\u003C\u002Fp>\n\u003Cp>With \u003Ccode>pdf.markdown = true\u003C\u002Fcode> (option \u003Ccode>markdown\u003C\u002Fcode>) they are rendered as Markdown: paragraphs, lists, bold and italic. HTML is shown as text, and links keep only their text. Formatting changes the displayed text compared with the XML. For example, \u003Ccode>20*30*40 cm\u003C\u002Fcode> is shown as &quot;20\u003Cem>30\u003C\u002Fem>40 cm&quot; with &quot;30&quot; in italics and without the asterisks. Keep the option off for texts that must match the XML.\u003C\u002Fp>\n\u003Cp>Intro and closing texts (\u003Ccode>texts.intro\u003C\u002Fcode>, \u003Ccode>texts.closing\u003C\u002Fcode>) are PDF-only and always Markdown. The salutation is plain text.\u003C\u002Fp>\n\u003Ch3 id=\"translations-and-locales\">Translations and locales\u003Ca class=\"q-doc-anchor\" href=\"#translations-and-locales\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The locale (language) of a run is the first of:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Ccode>-&gt;locale()\u003C\u002Fcode> of the call,\u003C\u002Fli>\n\u003Cli>the invoice's locale (\u003Ccode>InvoiceBuilder::locale()\u003C\u002Fcode>),\u003C\u002Fli>\n\u003Cli>\u003Ccode>defaults.locale\u003C\u002Fcode> (\u003Ccode>locale\u003C\u002Fcode> in \u003Ccode>Quittio::create()\u003C\u002Fcode>),\u003C\u002Fli>\n\u003Cli>the country pack default (Germany: \u003Ccode>de\u003C\u002Fcode>).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>A regional locale such as \u003Ccode>de_CH\u003C\u002Fcode> or \u003Ccode>de-AT\u003C\u002Fcode> takes the texts of its language (\u003Ccode>de\u003C\u002Fcode>) where it has none of its own, and English after that; numbers and dates follow the regional locale (with \u003Ccode>intl\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Cp>Labels and code names (units, VAT categories, payment means, type codes …) exist in German, English, French and Dutch; other locales fall back to English. The XML texts generated for the run (e.g. payment terms) use the same locale.\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Source\u003C\u002Fth>\n\u003Cth>Where\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Shipped labels\u003C\u002Ftd>\n\u003Ctd data-label=\"Where\">\u003Ccode>packages\u002Fcore\u002Fresources\u002Flang\u002F{de,en,fr}\u002Flabels.php\u003C\u002Fcode> (namespace \u003Ccode>quittio\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Code names\u003C\u002Ftd>\n\u003Ctd data-label=\"Where\">\u003Ccode>codes.php\u003C\u002Fcode>, payment terms texts \u003Ccode>terms.php\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Laravel overrides\u003C\u002Ftd>\n\u003Ctd data-label=\"Where\">\u003Ccode>lang\u002Fvendor\u002Fquittio\u002F{locale}\u002Flabels.php\u003C\u002Fcode> (\u003Ccode>php artisan vendor:publish --tag=quittio-lang\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Country pack overrides\u003C\u002Ftd>\n\u003Ctd data-label=\"Where\">\u003Ccode>quittio-{code}::labels.{key}\u003C\u002Fcode> in the pack's \u003Ccode>translationPath()\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Per invoice or call\u003C\u002Ftd>\n\u003Ctd data-label=\"Where\">\u003Ccode>Presentation::$labels\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Without Laravel, the translator is \u003Ccode>Quittio\\Core\\I18n\\ArrayTranslator\u003C\u002Fcode> (files \u003Ccode>{path}\u002F{locale}\u002F{group}.php\u003C\u002Fcode>, later paths override earlier ones, fallback \u003Ccode>en\u003C\u002Fcode>). Add a directory with \u003Ccode>Translations::translator()-&gt;addPath($path, 'quittio')\u003C\u002Fcode>, or replace the translator with \u003Ccode>Translations::use(new MyTranslator)\u003C\u002Fcode> (\u003Ccode>Quittio\\Core\\I18n\\Translator\u003C\u002Fcode>: \u003Ccode>get()\u003C\u002Fcode>, \u003Ccode>has()\u003C\u002Fcode>, \u003Ccode>locale()\u003C\u002Fcode>, \u003Ccode>addPath()\u003C\u002Fcode>). The Laravel integration bridges to Laravel's translator.\u003C\u002Fp>\n\u003Cp>Values are formatted by \u003Ccode>IntlFormatter\u003C\u002Fcode> from their exact decimal value:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>amounts with two decimals and the currency symbol (\u003Ccode>€\u003C\u002Fcode>, \u003Ccode>$\u003C\u002Fcode>, \u003Ccode>£\u003C\u002Fcode>, \u003Ccode>CHF\u003C\u002Fcode>, otherwise the code; English puts \u003Ccode>$\u003C\u002Fcode> and \u003Ccode>£\u003C\u002Fcode> in front);\u003C\u002Fli>\n\u003Cli>prices with at least two decimals;\u003C\u002Fli>\n\u003Cli>quantities and rates without trailing zeros;\u003C\u002Fli>\n\u003Cli>separators from \u003Ccode>ext-intl\u003C\u002Fcode> (fallback: German and English conventions);\u003C\u002Fli>\n\u003Cli>dates as \u003Ccode>dd.MM.yyyy\u003C\u002Fcode> (de), \u003Ccode>dd\u002FMM\u002Fyyyy\u003C\u002Fcode> (fr, it, es, pt, nl, en), \u003Ccode>MM\u002Fdd\u002Fyyyy\u003C\u002Fcode> (\u003Ccode>en_US\u003C\u002Fcode>) and the medium date format of \u003Ccode>ext-intl\u003C\u002Fcode> for other locales.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Country names come from \u003Ccode>ext-intl\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"html-output-and-preview\">HTML output and preview\u003Ca class=\"q-doc-anchor\" href=\"#html-output-and-preview\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Ccode>-&gt;format('html')\u003C\u002Fcode> returns the rendered template without PDF (\u003Ccode>$result-&gt;html()\u003C\u002Fcode>); documents use \u003Ccode>-&gt;htmlOnly()\u003C\u002Fcode>. The HTML is the same markup mPDF receives; the watermark is shown with CSS.\u003C\u002Fp>\n\u003Cp>The preview route \u003Ccode>\u002F_quittio\u002Fpreview\u003C\u002Fcode> lists the sample scenarios (\u003Ccode>simple\u003C\u002Fcode>, \u003Ccode>many-lines\u003C\u002Fcode>, \u003Ccode>long-texts\u003C\u002Fcode>, \u003Ccode>mixed-vat\u003C\u002Fcode>, \u003Ccode>reverse-charge\u003C\u002Fcode>, \u003Ccode>intra-eu\u003C\u002Fcode>, \u003Ccode>export\u003C\u002Fcode>, \u003Ccode>cancellation\u003C\u002Fcode>, \u003Ccode>sub-lines\u003C\u002Fcode>, \u003Ccode>foreign-currency\u003C\u002Fcode>, \u003Ccode>b2c-gross\u003C\u002Fcode>, \u003Ccode>allowances\u003C\u002Fcode>, \u003Ccode>attachments\u003C\u002Fcode>, \u003Ccode>peppol\u003C\u002Fcode>). It shows them as HTML or, with \u003Ccode>?format=pdf\u003C\u002Fcode>, as PDF, with a &quot;PREVIEW&quot; watermark, the configured design and validation in mode \u003Ccode>warn\u003C\u002Fcode> (errors are reported, not thrown).\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The route exists in the local environment, or with \u003Ccode>quittio.preview.enabled = true\u003C\u002Fcode>; outside \u003Ccode>local\u003C\u002Fcode> the gate \u003Ccode>viewQuittioPreview\u003C\u002Fcode> must allow the request (\u003Ca href=\"\u002Fdocs\u002Flaravel#preview-route\">Preview route\u003C\u002Fa>). Its path is \u003Ccode>quittio.preview.path\u003C\u002Fcode>, its middleware \u003Ccode>quittio.preview.middleware\u003C\u002Fcode>. It is not registered while routes are cached.\u003C\u002Fli>\n\u003Cli>\u003Ccode>?template=\u003C\u002Fcode> accepts the views that rendering accepts (\u003Ca href=\"#selecting-a-template\">Selecting a template\u003C\u002Fa>): \u003Ccode>default\u003C\u002Fcode>, the configured \u003Ccode>pdf.template\u003C\u002Fcode>, the views under \u003Ccode>quittio::templates.\u003C\u002Fcode> and the views of \u003Ccode>pdf.templates\u003C\u002Fcode>, never partials; the view must exist.\u003C\u002Fli>\n\u003Cli>\u003Ccode>?locale=\u003C\u002Fcode> accepts a locale code.\u003C\u002Fli>\n\u003Cli>Other values return 404.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>More in \u003Ca href=\"\u002Fdocs\u002Flaravel#preview-route\">Preview route\u003C\u002Fa>. On the command line:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>bash\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FFA657\">php\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> artisan\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> quittio:preview\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --scenario=many-lines\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --format=pdf\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --locale=en\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --output=\u002Ftmp\u002Fpreview.pdf\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The command writes to \u003Ccode>storage\u002Fapp\u002Fquittio\u002Fpreview\u002F{scenario}.{format}\u003C\u002Fcode> by default; \u003Ccode>--template\u003C\u002Fcode> accepts the same templates as the route.\u003C\u002Fp>\n\u003Ch2 id=\"changing-single-partials-level-2\">Changing single partials (level 2)\u003Ca class=\"q-doc-anchor\" href=\"#changing-single-partials-level-2\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The Blade layout is split into partials, one per part of the page. To change one part, publish the views and edit the copy of that partial:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>bash\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FFA657\">php\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> artisan\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> vendor:publish\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --tag=quittio-views\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">          # copies the views to resources\u002Fviews\u002Fvendor\u002Fquittio\u002Ftemplates\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>Laravel then uses your copy of a partial instead of the shipped one. You can delete the copies you did not change; for those, Laravel uses the shipped partials, which follow package updates. The layout takes the partial prefix from the variable \u003Ccode>$partials\u003C\u002Fcode> (default \u003Ccode>quittio::templates.default.partials\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Partial\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>styles\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">CSS: page margins (first and following pages), font, colours, address field position, watermark for browsers\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>header\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>&lt;htmlpageheader&gt;\u003C\u002Fcode> of the following pages: logo or issuer name, title with number, recipient with customer number, invoice date; and an empty header for the first page\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>footer\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>&lt;htmlpagefooter&gt;\u003C\u002Fcode> with the footer columns and &quot;Page {PAGENO} of {nbpg}&quot;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>marks\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Fold and punch marks at the left edge of the first page (option \u003Ccode>fold_marks\u003C\u002Fcode>, on by default)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>sender-line\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Sender line at the top of the address field\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>recipient\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Address lines of the recipient\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>letterhead\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Logo or name of the issuer at the top left; the issuer's address when the footer does not start with it\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>meta\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Number, date, valid until, reference document, delivery date, service period, customer number, references, VAT identifier and tax number of the issuer (only when the footer does not show them), VAT identifier of the recipient (&quot;Your VAT ID&quot;; on a self-billed invoice also the seller's tax number, &quot;Your tax number&quot;), tax representative, deliver-to address\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Title (\u003Ccode>&lt;h1&gt;\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>references\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Preceding invoices (&quot;Reference: invoice … of …&quot;)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>intro\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Salutation and intro text\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lines\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line table: groups with subtotals, optional and alternative markers, item numbers, descriptions, line periods, attributes, line allowances and charges, line notes, serial numbers, sub lines, price base quantity, gross unit price; a VAT column only with several VAT rates; the rows for the \u003Ca href=\"#carry-over-across-pages\">carry-over\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>allowances\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Sum of lines, document allowances and charges (inside \u003Ccode>totals\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>totals\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Net total, VAT rows, gross total, paid amount, rounding, third party payments, amount due, VAT in accounting currency. When the amount due is the gross total, it is printed once, as gross total\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>documents\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Packages, open items, fees, interest, totals and balance of \u003Ca href=\"\u002Fdocs\u002Fdocuments\">documents\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>tax-notes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Exemption reasons and regulatory notes (\u003Ccode>legalNotes\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>payment\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Payment terms and direct debit notice; next to them the bank details (payee, IBAN; BIC and reference; the account holder only when it is not the issuer) or the payout account, and the payment QR code\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>notes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Other notes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>attachments\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Attached documents (identifier and description)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>closing\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Closing text, acceptance field of quotes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Partials read the \u003Ca href=\"#view-model\">view model\u003C\u002Fa>. Keep printing every value a partial prints today unless you print it elsewhere: the \u003Ca href=\"#mandatory-field-guard\">mandatory field guard\u003C\u002Fa> reports missing mandatory values.\u003C\u002Fp>\n\u003Ch2 id=\"own-templates-level-3\">Own templates (level 3)\u003Ca class=\"q-doc-anchor\" href=\"#own-templates-level-3\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>For a layout of your own, create a copy of the default template under your own name:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>bash\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FFA657\">php\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> artisan\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> make:quittio-template\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> my-design\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">          # resources\u002Fviews\u002Finvoices\u002Fmy-design (--force overwrites)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The name may contain lower case letters, digits, \u003Ccode>-\u003C\u002Fcode> and \u003Ccode>_\u003C\u002Fcode>. The command copies the default layout and partials and points the layout at \u003Ccode>invoices.my-design.partials\u003C\u002Fcode>. Use the template per call with \u003Ccode>-&gt;template('invoices.my-design.layout')\u003C\u002Fcode> (allowed by the default \u003Ccode>pdf.templates\u003C\u002Fcode> entry \u003Ccode>invoices.*\u003C\u002Fcode>) or for every invoice with \u003Ccode>pdf.template\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>A template must follow some rules of mPDF (\u003Ca href=\"#mpdf-rules-for-templates\">mPDF rules for templates\u003C\u002Fa>) and must print every mandatory value (\u003Ca href=\"#mandatory-field-guard\">Mandatory field guard\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch3 id=\"selecting-a-template\">Selecting a template\u003Ca class=\"q-doc-anchor\" href=\"#selecting-a-template\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The template of a run is the first of:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Ccode>-&gt;template('…')\u003C\u002Fcode> of the call;\u003C\u002Fli>\n\u003Cli>\u003Ccode>Presentation::$template\u003C\u002Fcode> of the invoice's own presentation;\u003C\u002Fli>\n\u003Cli>the \u003Ccode>template\u003C\u002Fcode> of the presentation passed to \u003Ccode>-&gt;presentation()\u003C\u002Fcode> of the call;\u003C\u002Fli>\n\u003Cli>the \u003Ccode>template\u003C\u002Fcode> of the configured presentation;\u003C\u002Fli>\n\u003Cli>the configured template. In Laravel this is the name \u003Ccode>default\u003C\u002Fcode>, which the Blade engine maps to \u003Ccode>pdf.template\u003C\u002Fcode> (default \u003Ccode>quittio::templates.default.layout\u003C\u002Fcode>). Without Laravel it is the \u003Ccode>template\u003C\u002Fcode> key of \u003Ccode>Quittio::create()\u003C\u002Fcode> (default \u003Ccode>default\u003C\u002Fcode>).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The same order applies to documents (quotes, reminders …).\u003C\u002Fp>\n\u003Cp>Template names may come from invoice data (\u003Ccode>Presentation::$template\u003C\u002Fcode>, issuer branding of the \u003Ca href=\"\u002Fdocs\u002Fmanaged\">Managed layer\u003C\u002Fa>), so they are restricted:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Blade engine:\u003C\u002Fstrong> it renders \u003Ccode>default\u003C\u002Fcode>, the configured \u003Ccode>pdf.template\u003C\u002Fcode>, the shipped views under \u003Ccode>quittio::templates.\u003C\u002Fcode> (not their partials) and the views listed in \u003Ccode>pdf.templates\u003C\u002Fcode> (default \u003Ccode>['invoices.*']\u003C\u002Fcode>; an entry ending in \u003Ccode>*\u003C\u002Fcode> allows every view below that prefix, e.g. \u003Ccode>mytheme::*\u003C\u002Fcode>). A view whose name contains \u003Ccode>.partials.\u003C\u002Fcode> is never rendered as a template. Another existing view fails with an \u003Ccode>InvalidArgumentException\u003C\u002Fcode>. Names that are no Blade view are passed to the plain PHP engine.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Plain PHP engine:\u003C\u002Fstrong> it accepts names only, no paths: segments of letters, digits, \u003Ccode>_\u003C\u002Fcode> and \u003Ccode>-\u003C\u002Fcode> separated by \u003Ccode>\u002F\u003C\u002Fcode> (segments after the first may also contain \u003Ccode>.\u003C\u002Fcode>), no \u003Ccode>..\u003C\u002Fcode>, no absolute paths or stream wrappers. It resolves \u003Ccode>{name}.php\u003C\u002Fcode> inside its template directories (\u003Ccode>template_paths\u003C\u002Fcode> of \u003Ccode>Quittio::create()\u003C\u002Fcode>, then the shipped templates). An unknown or invalid name fails with an \u003Ccode>InvalidArgumentException\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"what-a-template-receives\">What a template receives\u003Ca class=\"q-doc-anchor\" href=\"#what-a-template-receives\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>A Blade template receives \u003Ccode>$invoice\u003C\u002Fcode>, the \u003Ca href=\"#view-model\">view model\u003C\u002Fa>. A plain PHP template receives \u003Ccode>$invoice\u003C\u002Fcode> and \u003Ccode>$e\u003C\u002Fcode>, an escape function that returns HTML-safe text. Its nodes are \u003Ca href=\"#typed-nodes\">typed\u003C\u002Fa>; object and array syntax read the same values.\u003C\u002Fp>\n\u003Cp>Print values escaped: with \u003Ccode>{{ }}\u003C\u002Fcode> in Blade, with \u003Ccode>$e(…)\u003C\u002Fcode> in plain PHP. Only these prepared HTML values may be printed unescaped (\u003Ccode>{!! !!}\u003C\u002Fcode>): \u003Ccode>lines[].description.html\u003C\u002Fcode>, \u003Ccode>notes[].html\u003C\u002Fcode>, \u003Ccode>texts.intro\u003C\u002Fcode>, \u003Ccode>texts.closing\u003C\u002Fcode> and \u003Ccode>design.watermarkCss\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"carry-over-in-own-templates\">Carry-over in own templates\u003Ca class=\"q-doc-anchor\" href=\"#carry-over-in-own-templates\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Own templates get the \u003Ca href=\"#carry-over-across-pages\">carry-over\u003C\u002Fa> with these markers (other renderers and browsers ignore them):\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>html\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">table\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> class\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"lines\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">thead\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>…&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">thead\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">tbody\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#8B949E\">    &#x3C;!--quittio:rows-->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    &#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">tr\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> data-carry-over\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"{{ $line->carryOver }}\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>…&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">tr\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>   {{-- every line row; sub lines and group rows without --}}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#8B949E\">    &#x3C;!--\u002Fquittio:rows-->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#E6EDF3\">    &#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">tbody\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#7EE787\">table\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">&#x3C;!--quittio:carry-out &#x3C;tr class=\"carry-out\">&#x3C;td>Continued on page {page}&#x3C;\u002Ftd>&#x3C;td>{amount}&#x3C;\u002Ftd>&#x3C;\u002Ftr> -->\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">&#x3C;!--quittio:carry-in &#x3C;tr class=\"carry-in\">&#x3C;td>Brought forward from page {page}&#x3C;\u002Ftd>&#x3C;td>{amount}&#x3C;\u002Ftd>&#x3C;\u002Ftr> -->\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cul>\n\u003Cli>\u003Ccode>&lt;!--quittio:rows--&gt;\u003C\u002Fcode> and \u003Ccode>&lt;!--\u002Fquittio:rows--&gt;\u003C\u002Fcode> enclose the rows of the line table.\u003C\u002Fli>\n\u003Cli>Every line row carries its running total in \u003Ccode>data-carry-over\u003C\u002Fcode> (\u003Ccode>lines[].carryOver\u003C\u002Fcode> of \u003Ccode>lineGroups\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>The \u003Ccode>carry-out\u003C\u002Fcode> comment holds the row printed at the end of a page, the \u003Ccode>carry-in\u003C\u002Fcode> comment the row at the start of the next page.\u003C\u002Fli>\n\u003Cli>\u003Ccode>{page}\u003C\u002Fcode> is the next page in the carry-out row and the previous page in the carry-in row. \u003Ccode>{amount}\u003C\u002Fcode> is the \u003Ccode>carryOver\u003C\u002Fcode> of the last line row before the break.\u003C\u002Fli>\n\u003Cli>The table needs a \u003Ccode>&lt;thead&gt;\u003C\u002Fcode> and fixed column widths, because each page gets a table of its own.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"page-numbers-headers-and-footers\">Page numbers, headers and footers\u003Ca class=\"q-doc-anchor\" href=\"#page-numbers-headers-and-footers\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The default templates put the footer columns and &quot;Page {PAGENO} of {nbpg}&quot; into an \u003Ccode>&lt;htmlpagefooter&gt;\u003C\u002Fcode> that every page uses (\u003Ccode>@page { footer: html_quittioFooter; }\u003C\u002Fcode>). mPDF replaces \u003Ccode>{PAGENO}\u003C\u002Fcode> and \u003Ccode>{nbpg}\u003C\u002Fcode> with the page number and the number of pages. Headers work the same way with \u003Ccode>&lt;htmlpageheader&gt;\u003C\u002Fcode>: the first page uses an empty header (\u003Ccode>@page :first { header: html_quittioFirstHeader; }\u003C\u002Fcode>), the following pages the header with logo, title and recipient.\u003C\u002Fp>\n\u003Cp>Up to four footer columns get a fixed width (43.8 mm each, the last 39.6 mm); more columns share the width. The page margins come from the view model: \u003Ccode>design.pageMarginTop\u003C\u002Fcode> for the first page and \u003Ccode>design.continuationMarginTop\u003C\u002Fcode> for the following pages (\u003Ca href=\"#design\">Design\u003C\u002Fa>).\u003C\u002Fp>\n\u003Ch3 id=\"mpdf-rules-for-templates\">mPDF rules for templates\u003Ca class=\"q-doc-anchor\" href=\"#mpdf-rules-for-templates\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>mPDF supports only part of CSS. Follow these rules:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Layout with tables, not flexbox or grid.\u003C\u002Fli>\n\u003Cli>Inside table cells, mPDF ignores \u003Ccode>margin\u003C\u002Fcode> and \u003Ccode>padding\u003C\u002Fcode> of blocks (\u003Ccode>div\u003C\u002Fcode>, \u003Ccode>p\u003C\u002Fcode>). Create spacing there with the padding of a table cell, e.g. a nested table with one row per block.\u003C\u002Fli>\n\u003Cli>Position elements on the page with \u003Ccode>position: absolute\u003C\u002Fcode> (measured from the page edge); \u003Ccode>position: fixed\u003C\u002Fcode> is measured from the page margins. The address field must be a direct child of \u003Ccode>&lt;body&gt;\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Repeat table headers on every page via \u003Ccode>&lt;thead&gt;\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Headers and footers via \u003Ccode>&lt;htmlpageheader&gt;\u003C\u002Fcode> \u002F \u003Ccode>&lt;htmlpagefooter&gt;\u003C\u002Fcode>, page numbers with \u003Ccode>{PAGENO}\u003C\u002Fcode> and \u003Ccode>{nbpg}\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Use \u003Ccode>page-break-inside: avoid\u003C\u002Fcode> for the totals block.\u003C\u002Fli>\n\u003Cli>Images as PNG or JPEG; fonts must be embeddable.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"other-template-engines\">Other template engines\u003Ca class=\"q-doc-anchor\" href=\"#other-template-engines\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Other engines (Twig …) implement \u003Ccode>Quittio\\Core\\Templates\\TemplateEngine::render(string $template, InvoiceViewModel $invoice, array $data = []): string\u003C\u002Fcode>. Pass them to \u003Ccode>Quittio::create(templates: …)\u003C\u002Fcode> or \u003Ccode>$quittio-&gt;setTemplateEngine(…)\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"pdf-renderers\">PDF renderers\u003Ca class=\"q-doc-anchor\" href=\"#pdf-renderers\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A renderer turns the HTML of the template into the PDF (design level 4).\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Renderer\u003C\u002Fth>\n\u003Cth>Use\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>MpdfRenderer\u003C\u002Fcode> (default)\u003C\u002Ftd>\n\u003Ctd data-label=\"Use\">HTML to PDF\u002FA-3b with mPDF in pure PHP; embeds the XML and writes the XMP metadata (the document description PDF\u002FA requires) in one pass\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>CallbackRenderer(Closure $callback)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Use\">Own rendering (Browsershot, Gotenberg …): \u003Ccode>fn (string $html, RenderRequest $request): string\u003C\u002Fcode> returns the PDF; PDF\u002FA, metadata and the XML are added by \u003Ccode>MpdfPostProcessor\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PassthroughRenderer(string $pdf)\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Use\">A finished PDF of the application; only PDF\u002FA and the XML are added\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Pdf\\Renderers\\CallbackRenderer\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\Pdf\\RenderRequest\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Laravel\\Facades\\Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Spatie\\Browsershot\\Browsershot\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#79C0FF\">Quittio\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">extend\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'renderer'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'browsershot'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($app, \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">array\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $config) => \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">new\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> CallbackRenderer\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#FF7B72\">    fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">string\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $html, \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">RenderRequest\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $request) => \u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">Browsershot\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">::\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">html\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">($html)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">format\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">($request\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">paper)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#D2A8FF\">pdf\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(),\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">));\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">\u002F\u002F config\u002Fquittio.php: 'pdf' => ['renderer' => 'browsershot', 'renderers' => ['browsershot' => [...]]]\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>The factory receives the container and \u003Ccode>pdf.renderers.{name}\u003C\u002Fcode>. Without Laravel, pass the renderer to \u003Ccode>Quittio::create(renderer: …)\u003C\u002Fcode> or \u003Ccode>$quittio-&gt;setRenderer(…)\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>A renderer implements \u003Ccode>PdfRenderer\u003C\u002Fcode> with \u003Ccode>render(RenderRequest $request): string\u003C\u002Fcode> and \u003Ccode>supportsEmbedding(): bool\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>supportsEmbedding()\u003C\u002Fcode> returns \u003Ccode>true\u003C\u002Fcode> when the renderer creates the PDF\u002FA and embeds the XML itself (\u003Ccode>MpdfRenderer\u003C\u002Fcode>, and \u003Ccode>CallbackRenderer\u003C\u002Fcode>\u002F\u003Ccode>PassthroughRenderer\u003C\u002Fcode> through their post processor).\u003C\u002Fli>\n\u003Cli>For \u003Ccode>false\u003C\u002Fcode>, Quittio passes the PDF to \u003Ccode>MpdfPostProcessor\u003C\u002Fcode> whenever the request asks for PDF\u002FA or an embedded XML, so a plain HTML-to-PDF renderer is enough.\u003C\u002Fli>\n\u003Cli>\u003Ccode>RenderRequest\u003C\u002Fcode> holds \u003Ccode>html\u003C\u002Fcode>, \u003Ccode>title\u003C\u002Fcode>, \u003Ccode>author\u003C\u002Fcode>, \u003Ccode>subject\u003C\u002Fcode>, \u003Ccode>paper\u003C\u002Fcode>, \u003Ccode>pdfa\u003C\u002Fcode>, \u003Ccode>embedded\u003C\u002Fcode> (\u003Ccode>EmbeddedXml\u003C\u002Fcode>: \u003Ccode>content\u003C\u002Fcode>, \u003Ccode>filename\u003C\u002Fcode>, \u003Ccode>relationship\u003C\u002Fcode>, \u003Ccode>conformanceLevel\u003C\u002Fcode>, \u003Ccode>description\u003C\u002Fcode>, \u003Ccode>documentType\u003C\u002Fcode>, \u003Ccode>version\u003C\u002Fcode>) and \u003Ccode>font\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>The post processor imports the pages with FPDI (a PHP library that reads existing PDFs). The result is PDF\u002FA only if the source PDF allows it (embedded fonts, no encryption, no JavaScript), so check it with \u003Ca href=\"\u002Fdocs\u002Fvalidation#verapdf-l6\">veraPDF\u003C\u002Fa>, a validator for PDF\u002FA.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>A PDF is PDF\u002FA-3b when it embeds XML, otherwise when \u003Ccode>pdf.pdfa\u003C\u002Fcode> is \u003Ccode>true\u003C\u002Fcode> (default) and it has no watermark. Its metadata: title &quot;{title} {number}&quot;, author the seller, creator &quot;Quittio&quot;.\u003C\u002Fp>\n\u003Cp>mPDF settings of \u003Ccode>MpdfRenderer\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>margins 20 (left), 15 (right), 20 (top), 25 (bottom), header and footer 8 mm; the default templates set their own page margins;\u003C\u002Fli>\n\u003Cli>\u003Ccode>pdf.renderers.mpdf.simple_tables\u003C\u002Fcode> (default \u003Ccode>false\u003C\u002Fcode>; \u003Ccode>true\u003C\u002Fcode> drops the borders of table cells and is not faster);\u003C\u002Fli>\n\u003Cli>\u003Ccode>pdf.renderers.mpdf.pdfa_auto\u003C\u002Fcode> (default \u003Ccode>false\u003C\u002Fcode>; lets mPDF fix PDF\u002FA issues itself);\u003C\u002Fli>\n\u003Cli>\u003Ccode>pdf.cache_path\u003C\u002Fcode> as temporary directory (without Laravel \u003Ccode>temp_dir\u003C\u002Fcode>, default \u003Ccode>sys_get_temp_dir()\u002Fquittio-mpdf\u003C\u002Fcode>).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>mPDF cannot load anything over HTTP (a denying HTTP client is installed), has no remote base path and does not follow redirects. Remote resources of a template are rendered as missing.\u003C\u002Fp>\n\u003Ch2 id=\"view-model\">View model\u003Ca class=\"q-doc-anchor\" href=\"#view-model\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Templates receive \u003Ccode>$invoice\u003C\u002Fcode> (\u003Ccode>Quittio\\Core\\View\\InvoiceViewModel\u003C\u002Fcode>) and nothing else. It holds every value of the invoice, already calculated and formatted for printing.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Nodes are read-only \u003Ccode>ViewNode\u003C\u002Fcode> objects. Use object syntax (\u003Ccode>$invoice-&gt;seller-&gt;name\u003C\u002Fcode>) or array syntax (\u003Ccode>$invoice['seller']['name']\u003C\u002Fcode>), loop over lists, and use \u003Ccode>count()\u003C\u002Fcode>, \u003Ccode>isEmpty()\u003C\u002Fcode> and \u003Ccode>toArray()\u003C\u002Fcode> (plain values, formatted).\u003C\u002Fli>\n\u003Cli>Writing throws a \u003Ccode>LogicException\u003C\u002Fcode>; a missing key reads as \u003Ccode>null\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Values that need formatting are \u003Ccode>FormattedValue\u003C\u002Fcode> objects. \u003Ccode>{{ $invoice-&gt;totals-&gt;amountDue }}\u003C\u002Fcode> prints the formatted text (\u003Ccode>-&gt;formatted\u003C\u002Fcode>). \u003Ccode>-&gt;raw\u003C\u002Fcode> holds the original value: \u003Ccode>Brick\\Money\\Money\u003C\u002Fcode> for amounts, \u003Ccode>Quittio\\Core\\Support\\Date\u003C\u002Fcode> for dates, \u003Ccode>Period\u003C\u002Fcode> for periods, \u003Ccode>Brick\\Math\\BigDecimal\u003C\u002Fcode> for quantities, prices and rates.\u003C\u002Fli>\n\u003Cli>Nodes are typed (\u003Ca href=\"#typed-nodes\">Typed nodes\u003C\u002Fa>): \u003Ccode>$invoice-&gt;seller\u003C\u002Fcode> is a \u003Ccode>PartyView\u003C\u002Fcode>, \u003Ccode>$invoice-&gt;lines\u003C\u002Fcode> a list of \u003Ccode>LineView\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Templates contain no calculations.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ccode>$invoice-&gt;label($key, $replace)\u003C\u002Fcode> returns a label with \u003Ccode>:placeholders\u003C\u002Fcode> replaced (unknown keys return the key); \u003Ccode>$invoice-&gt;title()\u003C\u002Fcode> returns the title.\u003C\u002Fp>\n\u003Ch3 id=\"typed-nodes\">Typed nodes\u003Ca class=\"q-doc-anchor\" href=\"#typed-nodes\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Every node of the view model has a class of its own in \u003Ccode>Quittio\\Core\\View\\Model\u003C\u002Fcode>, with its keys documented as typed properties. IDEs complete \u003Ccode>$invoice-&gt;totals-&gt;\u003C\u002Fcode> and know that \u003Ccode>amountDue\u003C\u002Fcode> is a \u003Ccode>?FormattedValue\u003C\u002Fcode>; PHPStan checks templates and own template engines against the same types.\u003C\u002Fp>\n\u003Cp>The typed nodes are \u003Ccode>ViewNode\u003C\u002Fcode> objects with the same data as before. Templates you published keep working unchanged: object syntax, array syntax, loops, \u003Ccode>count()\u003C\u002Fcode>, \u003Ccode>toArray()\u003C\u002Fcode>, \u003Ccode>json_encode()\u003C\u002Fcode> and the \u003Ca href=\"#mandatory-field-guard\">mandatory field guard\u003C\u002Fa> behave exactly as they did, and both syntaxes read the same value. Nothing is copied; the classes only describe the structure.\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Node\u003C\u002Fth>\n\u003Cth>Class\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>$invoice\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>InvoiceViewModel\u003C\u002Fcode> (\u003Ccode>Quittio\\Core\\View\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>document\u003C\u002Fcode>, \u003Ccode>documentInfo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>DocumentView\u003C\u002Fcode>, \u003Ccode>DocumentInfoView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller\u003C\u002Fcode>, \u003Ccode>buyer\u003C\u002Fcode>, \u003Ccode>issuer\u003C\u002Fcode>, \u003Ccode>recipient\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>PartyView\u003C\u002Fcode> (keys of the seller only are \u003Ccode>null\u003C\u002Fcode> for the buyer and the other way round)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>…address\u003C\u002Fcode>, \u003Ccode>…contact\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>AddressView\u003C\u002Fcode>, \u003Ccode>ContactView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>payee\u003C\u002Fcode>, \u003Ccode>taxRepresentative\u003C\u002Fcode>, \u003Ccode>delivery\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>PayeeView\u003C\u002Fcode>, \u003Ccode>TaxRepresentativeView\u003C\u002Fcode>, \u003Ccode>DeliveryView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>references[]\u003C\u002Fcode>, \u003Ccode>precedingInvoices[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>ReferenceView\u003C\u002Fcode>, \u003Ccode>PrecedingInvoiceView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lineGroups[]\u003C\u002Fcode>, \u003Ccode>lines[]\u003C\u002Fcode>, \u003Ccode>…subLines[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>LineGroupView\u003C\u002Fcode>, \u003Ccode>LineView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lines[].description\u003C\u002Fcode>, \u003Ccode>.unit\u003C\u002Fcode>, \u003Ccode>.attributes[]\u003C\u002Fcode>, \u003Ccode>.allowances[]\u003C\u002Fcode>, \u003Ccode>.charges[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>DescriptionView\u003C\u002Fcode>, \u003Ccode>UnitView\u003C\u002Fcode>, \u003Ccode>AttributeView\u003C\u002Fcode>, \u003Ccode>LineAllowanceChargeView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>allowances[]\u003C\u002Fcode>, \u003Ccode>charges[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>AllowanceChargeView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>vatRows[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>VatRowView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>totals\u003C\u002Fcode>, \u003Ccode>totals.thirdPartyPayments[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>TotalsView\u003C\u002Fcode>, \u003Ccode>DescribedAmountView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>payment\u003C\u002Fcode>, \u003Ccode>.accounts[]\u003C\u002Fcode>, \u003Ccode>.card\u003C\u002Fcode>, \u003Ccode>.directDebit\u003C\u002Fcode>, \u003Ccode>.qrCode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>PaymentView\u003C\u002Fcode>, \u003Ccode>AccountView\u003C\u002Fcode>, \u003Ccode>CardView\u003C\u002Fcode>, \u003Ccode>DirectDebitView\u003C\u002Fcode>, \u003Ccode>QrCodeView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>paymentTerms\u003C\u002Fcode>, \u003Ccode>.discounts[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>PaymentTermsView\u003C\u002Fcode>, \u003Ccode>DiscountView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>notes[]\u003C\u002Fcode>, \u003Ccode>attachments[]\u003C\u002Fcode>, \u003Ccode>texts\u003C\u002Fcode>, \u003Ccode>design\u003C\u002Fcode>, \u003Ccode>meta\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>NoteView\u003C\u002Fcode>, \u003Ccode>AttachmentView\u003C\u002Fcode>, \u003Ccode>TextsView\u003C\u002Fcode>, \u003Ccode>DesignView\u003C\u002Fcode>, \u003Ccode>MetaView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>documentInfo.packages[]\u003C\u002Fcode>, \u003Ccode>.lines[]\u003C\u002Fcode>, \u003Ccode>.dunning\u003C\u002Fcode>, \u003Ccode>.statement\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>PackageView\u003C\u002Fcode>, \u003Ccode>LineOptionsView\u003C\u002Fcode>, \u003Ccode>DunningView\u003C\u002Fcode>, \u003Ccode>StatementView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>dunning.openItems[]\u003C\u002Fcode>, \u003Ccode>statement.items[]\u003C\u002Fcode>, \u003Ccode>dunning.fees[]\u003C\u002Fcode>, \u003Ccode>dunning.interest[]\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Class\">\u003Ccode>OpenItemView\u003C\u002Fcode>, \u003Ccode>DescribedAmountView\u003C\u002Fcode>, \u003Ccode>InterestView\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Lists are \u003Ccode>ViewList&lt;T&gt;\u003C\u002Fcode> objects (\u003Ccode>[]\u003C\u002Fcode> in the table): \u003Ccode>lines\u003C\u002Fcode> is a \u003Ccode>ViewList&lt;LineView&gt;\u003C\u002Fcode>, \u003Ccode>legalNotes\u003C\u002Fcode>, \u003Ccode>address.lines\u003C\u002Fcode> and \u003Ccode>labels\u003C\u002Fcode> are \u003Ccode>ViewList&lt;string&gt;\u003C\u002Fcode>, \u003Ccode>design.footerColumns\u003C\u002Fcode> is a \u003Ccode>ViewList&lt;ViewList&lt;string&gt;&gt;\u003C\u002Fcode>. \u003Ccode>meta.custom\u003C\u002Fcode> is a plain \u003Ccode>ViewNode\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>To use the types in a plain PHP template, declare \u003Ccode>$invoice\u003C\u002Fcode> and type your helpers:\u003C\u002Fp>\n\u003Cdiv class=\"q-doc-code\">\u003Cdiv class=\"q-doc-code-bar\">\u003Cspan>php\u003C\u002Fspan>\u003Cbutton type=\"button\" class=\"q-doc-copy\" data-copy aria-label=\"Copy code\">\u003Csvg xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\u003Crect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\"\u002F>\u003Cpath d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"\u002F>\u003C\u002Fsvg>\u003Cspan>Copy\u003C\u002Fspan>\u003C\u002Fbutton>\u003C\u002Fdiv>\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">&#x3C;?\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">php\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#8B949E\">\u002F**\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:3ch;text-indent:-3ch\">\u003Cspan style=\"color:#8B949E\"> * \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">@var\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> \\Quittio\\Core\\View\\InvoiceViewModel\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\"> $invoice\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:3ch;text-indent:-3ch\">\u003Cspan style=\"color:#8B949E\"> * \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">@var\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> callable\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">(\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">mixed\u003C\u002Fspan>\u003Cspan style=\"color:#8B949E\">): string $e\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:3ch;text-indent:-3ch\">\u003Cspan style=\"color:#8B949E\"> *\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">use\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> Quittio\\Core\\View\\Model\\LineView\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">$name \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> static\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> fn\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> (\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">LineView\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $line)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">:\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\"> string\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> => $e($line\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">name)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">($line\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">sellerId \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">?\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> ' · '\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">$e($line\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">sellerId) \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">:\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> ''\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#FF7B72\">foreach\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> ($invoice\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">lines \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">as\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> $line) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:6ch;text-indent:-6ch\">\u003Cspan style=\"color:#79C0FF\">    echo\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '&#x3C;tr>&#x3C;td>'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">$name($line)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'&#x3C;\u002Ftd>&#x3C;td>'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">$e($line\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">quantity)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">' '\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">$e($line\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">unit\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">label)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'&#x3C;\u002Ftd>&#x3C;td>'\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">$e($line\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">->\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">total)\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">.\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">'&#x3C;\u002Ftd>&#x3C;\u002Ftr>'\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\" style=\"padding-left:2ch;text-indent:-2ch\">\u003Cspan style=\"color:#E6EDF3\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>In Blade, declare the variable in a \u003Ccode>@php\u003C\u002Fcode> block at the top of the view: \u003Ccode>@php \u002F** @var \\Quittio\\Core\\View\\InvoiceViewModel $invoice *\u002F @endphp\u003C\u002Fcode>. Labels are a map: read them with \u003Ccode>$invoice-&gt;labels['amount_due']\u003C\u002Fcode> or \u003Ccode>$invoice-&gt;label('amount_due')\u003C\u002Fcode> for a typed result; \u003Ccode>$labels-&gt;amount_due\u003C\u002Fcode>, as in the default partials, works as before but is untyped.\u003C\u002Fp>\n\u003Cp>The property types are part of the public API (\u003Ca href=\"\u002Fdocs\u002Fcompatibility\">Versioning and compatibility\u003C\u002Fa>). A release may add keys and node classes; it does not remove or retype a key without listing it in the changelog. The node objects are created by the view model only; their constructors are not meant to be called.\u003C\u002Fp>\n\u003Cp>The tables name the EN 16931 field of a value in parentheses, e.g. invoice number (BT-1) or seller address (BG-5); see \u003Ca href=\"\u002Fdocs\u002Fconcepts#en-16931-and-business-terms\">Business terms\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"top-level\">Top level\u003Ca class=\"q-doc-anchor\" href=\"#top-level\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>number\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Invoice number (BT-1)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>numberLabel\u003C\u002Fcode>, \u003Ccode>dateLabel\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Labels for number and date (&quot;Invoice number&quot;, &quot;Invoice date&quot;; documents: &quot;Number&quot;, &quot;Date&quot;)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Document title (see below)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>issueDate\u003C\u002Fcode>, \u003Ccode>dueDate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Dates (BT-2, BT-9)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>servicePeriod\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Invoicing period (BG-14), otherwise the delivery date (BT-72), otherwise the period from the earliest start to the latest end of the line periods when every line has one; \u003Ccode>null\u003C\u002Fcode> otherwise\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>servicePeriodLabel\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">&quot;Delivery date&quot; for a single date or a one-day period, otherwise &quot;Service period&quot;. German output: &quot;Leistungsdatum&quot; (date of supply) and &quot;Leistungszeitraum&quot; (period of supply)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>deliveryDate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">BT-72 when an invoicing period is also set (otherwise \u003Ccode>servicePeriod\u003C\u002Fcode> shows it)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>currency\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Invoice currency (BT-5)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>document\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#document\">document\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>documentInfo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>null\u003C\u002Fcode> for invoices, \u003Ca href=\"#documentinfo\">documentInfo\u003C\u002Fa> for documents\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>seller\u003C\u002Fcode>, \u003Ccode>buyer\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#parties\">Parties\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>issuer\u003C\u002Fcode>, \u003Ccode>recipient\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">The party in letterhead, sender line and footer, and the party in the address field: seller and buyer; on a self-billed invoice buyer and seller\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>payee\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Payee (BG-10): \u003Ccode>name\u003C\u002Fcode>, \u003Ccode>identifier\u003C\u002Fcode>, \u003Ccode>legalRegistration\u003C\u002Fcode>; \u003Ccode>null\u003C\u002Fcode> without\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>taxRepresentative\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Seller tax representative (BG-11): \u003Ccode>name\u003C\u002Fcode>, \u003Ccode>vatId\u003C\u002Fcode>, \u003Ccode>address\u003C\u002Fcode>; \u003Ccode>null\u003C\u002Fcode> without\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>delivery\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>recipientName\u003C\u002Fcode>, \u003Ccode>date\u003C\u002Fcode> (BT-72), \u003Ccode>address\u003C\u002Fcode> (with the recipient name as first line); \u003Ccode>null\u003C\u002Fcode> without delivery data\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>references\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of \u003Ccode>key\u003C\u002Fcode>, \u003Ccode>label\u003C\u002Fcode>, \u003Ccode>value\u003C\u002Fcode> for the filled references: \u003Ccode>buyer_reference\u003C\u002Fcode>, \u003Ccode>purchase_order\u003C\u002Fcode>, \u003Ccode>sales_order\u003C\u002Fcode>, \u003Ccode>contract\u003C\u002Fcode>, \u003Ccode>project\u003C\u002Fcode> (identifier and name), \u003Ccode>despatch_advice\u003C\u002Fcode>, \u003Ccode>tender\u003C\u002Fcode>, \u003Ccode>invoiced_object\u003C\u002Fcode>, \u003Ccode>accounting_reference\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>precedingInvoices\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of \u003Ccode>number\u003C\u002Fcode>, \u003Ccode>issueDate\u003C\u002Fcode> (BG-3)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lineGroups\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#lines\">Line groups\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lines\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">All top-level \u003Ca href=\"#lines\">lines\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>allowances\u003C\u002Fcode>, \u003Ccode>charges\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#allowances-and-charges\">Document allowances and charges\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>vatRows\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#vat-rows\">VAT breakdown\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>totals\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#totals\">Totals\u003C\u002Fa>; \u003Ccode>null\u003C\u002Fcode> when not calculated\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>payment\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#payment\">Payment\u003C\u002Fa>; \u003Ccode>null\u003C\u002Fcode> without payment instructions\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>paymentTerms\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#payment-terms\">Payment terms\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>legalNotes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of texts: exemption reasons (BT-120, except category S) and notes with subject \u003Ccode>REG\u003C\u002Fcode>, \u003Ccode>ABL\u003C\u002Fcode> or \u003Ccode>TXD\u003C\u002Fcode> (BT-22), without duplicates\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>notes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Other notes: \u003Ccode>subject\u003C\u002Fcode> (BT-21), \u003Ccode>content\u003C\u002Fcode>, \u003Ccode>html\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>attachments\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of \u003Ccode>id\u003C\u002Fcode>, \u003Ccode>description\u003C\u002Fcode>, \u003Ccode>filename\u003C\u002Fcode>, \u003Ccode>uri\u003C\u002Fcode> (BG-24)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>texts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>salutation\u003C\u002Fcode> (plain text), \u003Ccode>intro\u003C\u002Fcode>, \u003Ccode>closing\u003C\u002Fcode> (HTML from Markdown)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>labels\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">All labels of the locale, with the overrides of \u003Ccode>Presentation::$labels\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>design\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#design\">Design values\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>meta\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>locale\u003C\u002Fcode>, \u003Ccode>custom\u003C\u002Fcode> (values of \u003Ccode>-&gt;custom()\u003C\u002Fcode>), \u003Ccode>source\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The \u003Ccode>title\u003C\u002Fcode> is the first of:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Ccode>Presentation::$title\u003C\u002Fcode>;\u003C\u002Fli>\n\u003Cli>for self-billed type codes: the title \u003Ccode>self_billed\u003C\u002Fcode> of the country pack's correction policy, which also holds the titles of cancellations and corrections. Germany: &quot;Gutschrift&quot;; in English &quot;Self-billed invoice (Gutschrift)&quot;;\u003C\u002Fli>\n\u003Cli>the label of the type code (BT-3).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Label\u003C\u002Fth>\n\u003Cth>English text\u003C\u002Fth>\n\u003Cth>Used for\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_380\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type code 380\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_381\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Credit note\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type code 381 and other credit note codes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_384\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Corrected invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type code 384\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_389\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Self-billed invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type code 389 and other self-billed codes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_325\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Proforma invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type code 325\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_326\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Partial invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type code 326\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_386\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Prepayment invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type code 386\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_875\u003C\u002Fcode>, \u003Ccode>title_876\u003C\u002Fcode>, \u003Ccode>title_877\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Partial construction invoice, Partial final construction invoice, Final construction invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Type codes 875, 876, 877\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>title_default\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"English text\">Invoice\u003C\u002Ftd>\n\u003Ctd data-label=\"Used for\">Every other type code\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"document\">document\u003Ca class=\"q-doc-anchor\" href=\"#document\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>typeCode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Type code (BT-3) as string, e.g. \u003Ccode>380\u003C\u002Fcode>; \u003Ccode>null\u003C\u002Fcode> for documents\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>type\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Name of the type code in the locale; for documents the name of the document type, e.g. &quot;Quote&quot;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>isCreditNote\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Credit note type code\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>isSelfBilled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Self-billed invoice (&quot;Gutschrift&quot;)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>profile\u003C\u002Fcode>, \u003Ccode>profileKey\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Name and key of the \u003Ca href=\"\u002Fdocs\u002Fconcepts#profiles\">profile\u003C\u002Fa> of the run, e.g. \u003Ccode>EN 16931\u003C\u002Fcode>, \u003Ccode>en16931\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>kind\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>invoice\u003C\u002Fcode>, or the document type (\u003Ccode>quote\u003C\u002Fcode>, \u003Ccode>order_confirmation\u003C\u002Fcode>, \u003Ccode>delivery_note\u003C\u002Fcode>, \u003Ccode>proforma\u003C\u002Fcode>, \u003Ccode>payment_reminder\u003C\u002Fcode>, \u003Ccode>account_statement\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>isInvoice\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>true\u003C\u002Fcode> for invoices, \u003Ccode>false\u003C\u002Fcode> for documents\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>showPrices\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>false\u003C\u002Fcode> for delivery notes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>showTotals\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>false\u003C\u002Fcode> for delivery notes, reminders and statements\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"parties\">Parties\u003Ca class=\"q-doc-anchor\" href=\"#parties\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ccode>seller\u003C\u002Fcode> and \u003Ccode>buyer\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Seller\u003C\u002Fth>\n\u003Cth>Buyer\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">BT-27\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">BT-44\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>tradingName\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">BT-28\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">BT-45\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>displayName\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">trading name, otherwise name\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">trading name, otherwise name\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>address\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">see below\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">see below\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>vatId\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">BT-31\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">BT-48\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>taxNumber\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">BT-32\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>legalRegistration\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">BT-30 value\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">BT-47 value\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>additionalLegalInfo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">BT-33\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>customerNumber\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">buyer identifier (BT-46)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>contact\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">\u003Ccode>name\u003C\u002Fcode>, \u003Ccode>phone\u003C\u002Fcode>, \u003Ccode>email\u003C\u002Fcode> or \u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">\u003Ccode>name\u003C\u002Fcode>, \u003Ccode>phone\u003C\u002Fcode>, \u003Ccode>email\u003C\u002Fcode> or \u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>electronicAddress\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">BT-34 value\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>identifiers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">list of BT-29 values\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">–\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>isConsumer\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Seller\">–\u003C\u002Ftd>\n\u003Ctd data-label=\"Buyer\">consumer flag\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Ccode>issuer\u003C\u002Fcode> and \u003Ccode>recipient\u003C\u002Fcode> are the same nodes.\u003C\u002Fp>\n\u003Cp>Every \u003Ccode>address\u003C\u002Fcode> has \u003Ccode>lines\u003C\u002Fcode>, \u003Ccode>street\u003C\u002Fcode>, \u003Ccode>additional\u003C\u002Fcode>, \u003Ccode>line3\u003C\u002Fcode>, \u003Ccode>postcode\u003C\u002Fcode>, \u003Ccode>city\u003C\u002Fcode>, \u003Ccode>subdivision\u003C\u002Fcode>, \u003Ccode>countryCode\u003C\u002Fcode> and \u003Ccode>country\u003C\u002Fcode> (name in the locale). \u003Ccode>lines\u003C\u002Fcode> is formatted by the country pack's address formatter and starts with the name. The country is added in upper case when it differs from the issuer's country. The fallback formatter writes &quot;postcode city&quot;, for GB, IE, US, CA, AU, LV and UA &quot;city subdivision postcode&quot;.\u003C\u002Fp>\n\u003Ch3 id=\"lines\">Lines\u003Ca class=\"q-doc-anchor\" href=\"#lines\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ccode>lines\u003C\u002Fcode> and \u003Ccode>lineGroups[].lines\u003C\u002Fcode> contain:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>position\u003C\u002Fcode>, \u003Ccode>id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line identifier (BT-126)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Item name (BT-153)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>description\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>text\u003C\u002Fcode> (BT-154) and \u003Ccode>html\u003C\u002Fcode> (escaped plain text with line breaks, or Markdown with the option \u003Ccode>markdown\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>note\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line note (BT-127)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>sellerId\u003C\u002Fcode>, \u003Ccode>buyerId\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Item identifiers (BT-155, BT-156)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>quantity\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Quantity (BT-129), formatted without trailing zeros\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>unit\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>code\u003C\u002Fcode> (BT-130) and \u003Ccode>label\u003C\u002Fcode> in the locale\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>unitPrice\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Net price (BT-146), at least two decimals\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>grossUnitPrice\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Price including VAT (gross price mode)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>listPrice\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Gross price before the price discount (BT-148)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>baseQuantity\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Price base quantity (BT-149)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>unitPriceBase\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Base quantity with unit, e.g. &quot;100 pcs&quot;, for printing with the unit price; \u003Ccode>null\u003C\u002Fcode> for 1\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>showGrossPrice\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Print \u003Ccode>grossUnitPrice\u003C\u002Fcode>: the line's \u003Ccode>showGrossPrice\u003C\u002Fcode> (\u003Ccode>LineBuilder::showGrossPrice()\u003C\u002Fcode>), otherwise the presentation's \u003Ccode>showGrossPrices\u003C\u002Fcode>, and only if a price including VAT exists\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>total\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line net amount (BT-131)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>carryOver\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Sum of the line net amounts up to this line in display order, only in \u003Ccode>lineGroups[].lines\u003C\u002Fcode>: the \u003Ca href=\"#carry-over-across-pages\">carry-over\u003C\u002Fa> when a page ends after the line\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>vatRate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Rate (BT-152); \u003Ccode>null\u003C\u002Fcode> without rate and for margin schemes and travel agents (special VAT schemes without separate VAT)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>vatCategory\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Category code (BT-151)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>period\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line period (BG-26)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>attributes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of \u003Ccode>name\u003C\u002Fcode>, \u003Ccode>value\u003C\u002Fcode> (BG-32)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>allowances\u003C\u002Fcode>, \u003Ccode>charges\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line allowances and charges: \u003Ccode>reason\u003C\u002Fcode>, \u003Ccode>amount\u003C\u002Fcode>, \u003Ccode>percent\u003C\u002Fcode>, \u003Ccode>label\u003C\u002Fcode> (&quot;Allowance reason 10 %&quot;)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>subLines\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Sub lines with the same keys\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>highlight\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>LineBuilder::highlight()\u003C\u002Fcode>; the default templates shade the line and mark it in the secondary colour\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>groupId\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line group\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>optional\u003C\u002Fcode>, \u003Ccode>alternativeTo\u003C\u002Fcode>, \u003Ccode>serialNumbers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Document line options (quotes, delivery notes)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Ccode>lineGroups\u003C\u002Fcode> lists the groups defined with \u003Ccode>InvoiceBuilder::group()\u003C\u002Fcode> in their order, then one group with \u003Ccode>id\u003C\u002Fcode> and \u003Ccode>title\u003C\u002Fcode> \u003Ccode>null\u003C\u002Fcode> for the lines without a group (or with an unknown group). Empty groups are left out. Each group has \u003Ccode>id\u003C\u002Fcode>, \u003Ccode>title\u003C\u002Fcode>, \u003Ccode>lines\u003C\u002Fcode> and \u003Ccode>subtotal\u003C\u002Fcode> (sum of the line net amounts when \u003Ccode>showSubtotal\u003C\u002Fcode> is set, otherwise \u003Ccode>null\u003C\u002Fcode>). Print either \u003Ccode>lineGroups\u003C\u002Fcode> or \u003Ccode>lines\u003C\u002Fcode>, not both.\u003C\u002Fp>\n\u003Ch3 id=\"allowances-and-charges\">Allowances and charges\u003Ca class=\"q-doc-anchor\" href=\"#allowances-and-charges\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ccode>allowances\u003C\u002Fcode> and \u003Ccode>charges\u003C\u002Fcode> (BG-20, BG-21) are discounts and surcharges on the whole document. They contain \u003Ccode>reason\u003C\u002Fcode> (text or code), \u003Ccode>amount\u003C\u002Fcode>, \u003Ccode>percent\u003C\u002Fcode>, \u003Ccode>base\u003C\u002Fcode>, \u003Ccode>vatRate\u003C\u002Fcode>, \u003Ccode>vatCategory\u003C\u002Fcode> and \u003Ccode>label\u003C\u002Fcode> (&quot;Allowance reason 3 %&quot;; with several VAT groups followed by the VAT rate or category, e.g. &quot;(19 % VAT)&quot;).\u003C\u002Fp>\n\u003Ch3 id=\"vat-rows\">VAT rows\u003Ca class=\"q-doc-anchor\" href=\"#vat-rows\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>label\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Ready text: &quot;VAT 19%&quot; when it is the only VAT row (its base is the net total printed above), otherwise &quot;19% VAT on 1,000.00 €&quot;; &quot;VAT exempt (…) on …&quot;, &quot;No VAT (reverse charge) on …&quot;, &quot;0% VAT (zero rate) on …&quot;, &quot;Not subject to VAT: …&quot;, &quot;Special scheme, no separate VAT statement: …&quot;\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>category\u003C\u002Fcode>, \u003Ccode>categoryLabel\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Category code and name\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>rate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Rate (BT-119)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>base\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Taxable amount (BT-116)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>amount\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">VAT amount (BT-117); \u003Ccode>null\u003C\u002Fcode> for margin schemes and travel agents (exemption reason codes \u003Ccode>VATEX-EU-D\u003C\u002Fcode>, \u003Ccode>-F\u003C\u002Fcode>, \u003Ccode>-I\u003C\u002Fcode>, \u003Ccode>-J\u003C\u002Fcode> on the group or on all its lines)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>isSpecialScheme\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Margin scheme or travel agents\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>exemptionReason\u003C\u002Fcode>, \u003Ccode>exemptionReasonCode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">BT-120, BT-121\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Reverse charge means that the buyer owes the VAT (\u003Ca href=\"\u002Fdocs\u002Fconcepts#german-terms\">German terms\u003C\u002Fa>). Margin schemes and travel agents are special VAT schemes (sections 25 and 25a of the German VAT Act, UStG) that state no separate VAT.\u003C\u002Fp>\n\u003Cp>Usually there is one row per VAT breakdown row (BG-23). An exempt group (category \u003Ccode>E\u003C\u002Fcode>) that mixes a special scheme with other exemptions takes two rows, the special scheme part (\u003Ccode>isSpecialScheme\u003C\u002Fcode>, \u003Ccode>base\u003C\u002Fcode> its share) and the exempt part, or one row &quot;Exempt or special scheme, no separate VAT statement: …&quot; without \u003Ccode>amount\u003C\u002Fcode> when the parts cannot be told apart. \u003Ccode>ViewModelFactory::vatRowIndexes($invoice)\u003C\u002Fcode> maps the index of a breakdown row to its first row in \u003Ccode>vatRows\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"totals\">Totals\u003Ca class=\"q-doc-anchor\" href=\"#totals\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lineNetSum\u003C\u002Fcode>, \u003Ccode>allowanceSum\u003C\u002Fcode>, \u003Ccode>chargeSum\u003C\u002Fcode>, \u003Ccode>netTotal\u003C\u002Fcode>, \u003Ccode>vatTotal\u003C\u002Fcode>, \u003Ccode>grossTotal\u003C\u002Fcode>, \u003Ccode>prepaid\u003C\u002Fcode>, \u003Ccode>rounding\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Document totals\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>vatTotalInTaxCurrency\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">VAT in accounting currency (BT-111)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>taxCurrencyNote\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">&quot;VAT in USD: … (rate … of …)&quot; when an exchange rate is set\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>thirdPartyPayments\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of \u003Ccode>description\u003C\u002Fcode>, \u003Ccode>amount\u003C\u002Fcode> (XRechnung extension)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>amountDue\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Amount due\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>amountDueLabel\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">&quot;Amount due&quot;; &quot;Amount to be refunded&quot; on credit notes and negative invoices; &quot;Amount paid out&quot; on self-billed invoices\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>dueEqualsGross\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">The amount due is the gross total: nothing prepaid, rounded or paid by third parties, no refund and no payout\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>When \u003Ccode>dueEqualsGross\u003C\u002Fcode> is \u003Ccode>true\u003C\u002Fcode>, the default templates print the amount once, with the label \u003Ccode>gross_total\u003C\u002Fcode> (&quot;Total incl. VAT&quot;; German &quot;Gesamtbetrag&quot;, total amount).\u003C\u002Fp>\n\u003Cp>On a negative invoice (e.g. a cancellation with the strategy \u003Ccode>negative_invoice\u003C\u002Fcode>), \u003Ccode>amountDue\u003C\u002Fcode> is printed as a positive refund amount; \u003Ccode>amountDue-&gt;raw\u003C\u002Fcode> and the XML keep the negative amount due (BT-115).\u003C\u002Fp>\n\u003Ch3 id=\"payment\">Payment\u003Ca class=\"q-doc-anchor\" href=\"#payment\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>meansCode\u003C\u002Fcode>, \u003Ccode>means\u003C\u002Fcode>, \u003Ccode>meansText\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Payment means code (BT-81), its name, BT-82\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>remittance\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Remittance information (BT-83), otherwise the invoice number\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>accounts\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of \u003Ccode>iban\u003C\u002Fcode> (grouped in blocks of four), \u003Ccode>bic\u003C\u002Fcode>, \u003Ccode>name\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>card\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>number\u003C\u002Fcode> (&quot;•••• 1234&quot;), \u003Ccode>holder\u003C\u002Fcode>; or \u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>directDebit\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>mandate\u003C\u002Fcode>, \u003Ccode>creditorId\u003C\u002Fcode>, \u003Ccode>account\u003C\u002Fcode>; or \u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>qrCode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ca href=\"#payment-qr-codes\">Payment QR code\u003C\u002Fa> or \u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>isRefund\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Credit note or negative amount due: show no bank details for a transfer by the buyer and no direct debit notice\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>isPayout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Self-billed invoice: the accounts receive the payout\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"payment-terms\">Payment terms\u003Ca class=\"q-doc-anchor\" href=\"#payment-terms\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ccode>paymentTerms\u003C\u002Fcode> is \u003Ccode>null\u003C\u002Fcode> without payment terms (BT-20) and due date. Otherwise it has:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>lines\u003C\u002Fcode>: ready texts. These are the terms text; &quot;Please transfer the amount by …&quot; when the buyer pays by credit transfer, otherwise &quot;Please pay the amount by …&quot;, on self-billed invoices &quot;We will transfer the amount to your account by …&quot;; one text per cash discount, such as &quot;2% discount until 10\u002F10\u002F2026: 2,692.76 €&quot;; and the late fee terms.\u003C\u002Fli>\n\u003Cli>\u003Ccode>discounts\u003C\u002Fcode>: list of \u003Ccode>days\u003C\u002Fcode>, \u003Ccode>percent\u003C\u002Fcode>, \u003Ccode>until\u003C\u002Fcode>, \u003Ccode>amount\u003C\u002Fcode>, \u003Ccode>text\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ccode>dueDate\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>On credit notes, quotes, order confirmations and invoices without a positive amount due, discounts are shown as agreement (&quot;For payment within 7 days …&quot;) without date or amount, and no due date text is added.\u003C\u002Fp>\n\u003Ch3 id=\"design\">Design\u003Ca class=\"q-doc-anchor\" href=\"#design\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>primaryColor\u003C\u002Fcode>, \u003Ccode>secondaryColor\u003C\u002Fcode>, \u003Ccode>textColor\u003C\u002Fcode>, \u003Ccode>mutedColor\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Hex colours (\u003Ccode>secondaryColor\u003C\u002Fcode> falls back to the primary colour). The default templates print the issuer's name, the title, the header of the following pages and the gross total or amount due in the primary colour; section titles and the mark of highlighted lines in the secondary colour; the lines below the column heads and above the gross total or amount due in the text colour; secondary texts and labels in the muted colour\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>font\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Font family\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>fontMedium\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Family for the medium and semibold weights (item names, column heads, title, headings): \u003Ccode>geistmedium\u003C\u002Fcode> for Geist (normal = medium, bold = semibold); \u003Ccode>null\u003C\u002Fcode> for other fonts, then the templates use bold\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>logo\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Prepared logo (\u003Ca href=\"#logos\">Logos\u003C\u002Fa>) or \u003Ccode>null\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>letterLayout\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Name of the \u003Ca href=\"#letter-layouts\">letter layout\u003C\u002Fa>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>addressTop\u003C\u002Fcode>, \u003Ccode>addressLeft\u003C\u002Fcode>, \u003Ccode>addressWidth\u003C\u002Fcode>, \u003Ccode>addressHeight\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Address field in mm from the top left page corner\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pageMarginTop\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Top page margin of the first page in the default templates (15 mm): the letterhead starts here\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>continuationMarginTop\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Top page margin of the following pages (40 mm), below their header\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>letterheadHeight\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Space above the address field: \u003Ccode>addressTop\u003C\u002Fcode> − \u003Ccode>pageMarginTop\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>logoMaxHeight\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Height of the logo: 14 mm, less when the letterhead is lower (the logo ends 2 mm above the address field), at least 6 mm\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>addressZoneTop\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Start of the recipient zone (DIN 5008 &quot;Anschriftzone&quot;) within the address field (17.7 mm), for own templates; the default templates print the recipient directly below the sender line\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>senderLineHeight\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Height of the sender line (5 mm)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>noticeZoneHeight\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>addressZoneTop\u003C\u002Fcode> − \u003Ccode>senderLineHeight\u003C\u002Fcode>: the DIN 5008 zone for additions and postal notes (&quot;Zusatz- und Vermerkzone&quot;) above the sender line, for own templates\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>foldMarks\u003C\u002Fcode>, \u003Ccode>punchMark\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Mark positions in mm from the top; empty when the option \u003Ccode>fold_marks\u003C\u002Fcode> is \u003Ccode>false\u003C\u002Fcode> (default \u003Ccode>true\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>paper\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Paper of the presentation\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>watermark\u003C\u002Fcode>, \u003Ccode>watermarkCss\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Watermark text, and the same as escaped CSS string for the HTML overlay\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>senderLine\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Configured sender line, otherwise &quot;Name · Street · Postcode City&quot; of the issuer\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>footerColumns\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Configured columns, otherwise generated: the issuer's address lines; phone and e-mail; legal registration and the parts of the additional legal information (split at &quot; · &quot; and line breaks); &quot;VAT ID …&quot; and &quot;Tax no. …&quot; of the issuer. The bank details are in the payment block\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>footerHasAddress\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">The generated footer starts with the issuer's address\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>footerHasTaxIds\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">The generated footer shows the issuer's VAT identifier or tax number (they count as printed for the \u003Ca href=\"#mandatory-field-guard\">mandatory field guard\u003C\u002Fa>); otherwise the default templates print them with the invoice details\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>showItemNumbers\u003C\u002Fcode>, \u003Ccode>showGrossPrices\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Presentation switches\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch3 id=\"documentinfo\">documentInfo\u003Ca class=\"q-doc-anchor\" href=\"#documentinfo\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Only for \u003Ca href=\"\u002Fdocs\u002Fdocuments\">documents\u003C\u002Fa>:\u003C\u002Fp>\n\u003Ctable class=\"q-doc-table q-stack-table\">\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Key\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>type\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Document type value\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>validUntil\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Quote validity\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>reference\u003C\u002Fcode>, \u003Ccode>referenceDate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Preceding document (\u003Ccode>reference()\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>deliveryDate\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Delivery date\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>packages\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">List of \u003Ccode>id\u003C\u002Fcode>, \u003Ccode>type\u003C\u002Fcode>, \u003Ccode>weight\u003C\u002Fcode> (&quot;2.5 kg&quot;), \u003Ccode>dimensions\u003C\u002Fcode>, \u003Ccode>trackingNumber\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>lines\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Line options keyed by line identifier: \u003Ccode>optional\u003C\u002Fcode>, \u003Ccode>alternativeTo\u003C\u002Fcode>, \u003Ccode>serialNumbers\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>dunning\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>level\u003C\u002Fcode>, \u003Ccode>deadline\u003C\u002Fcode>, \u003Ccode>deadlineText\u003C\u002Fcode> (&quot;Please pay the total amount by …&quot;), \u003Ccode>openItems\u003C\u002Fcode>, \u003Ccode>fees\u003C\u002Fcode> (\u003Ccode>description\u003C\u002Fcode>, \u003Ccode>amount\u003C\u002Fcode>), \u003Ccode>interest\u003C\u002Fcode> (\u003Ccode>description\u003C\u002Fcode>, \u003Ccode>days\u003C\u002Fcode>, \u003Ccode>amount\u003C\u002Fcode>), \u003Ccode>openTotal\u003C\u002Fcode>, \u003Ccode>feeTotal\u003C\u002Fcode>, \u003Ccode>interestTotal\u003C\u002Fcode>, \u003Ccode>total\u003C\u002Fcode>; \u003Ccode>null\u003C\u002Fcode> for other types\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>statement\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">\u003Ccode>period\u003C\u002Fcode>, \u003Ccode>items\u003C\u002Fcode>, \u003Ccode>openingBalance\u003C\u002Fcode>, \u003Ccode>balance\u003C\u002Fcode>; \u003Ccode>null\u003C\u002Fcode> for other types\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>showAcceptance\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd data-label=\"Content\">Print the acceptance field (quotes)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Open items (\u003Ccode>dunning.openItems[]\u003C\u002Fcode>, \u003Ccode>statement.items[]\u003C\u002Fcode>) have \u003Ccode>invoiceNumber\u003C\u002Fcode>, \u003Ccode>invoiceDate\u003C\u002Fcode>, \u003Ccode>dueDate\u003C\u002Fcode>, \u003Ccode>description\u003C\u002Fcode>, \u003Ccode>amount\u003C\u002Fcode>, \u003Ccode>paid\u003C\u002Fcode> and \u003Ccode>open\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch2 id=\"mandatory-field-guard\">Mandatory field guard\u003Ca class=\"q-doc-anchor\" href=\"#mandatory-field-guard\" aria-label=\"Link to this section\">#\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Some values must appear on every invoice by law. After rendering a PDF or HTML invoice, the guard checks that the template printed them all:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>number and issue date;\u003C\u002Fli>\n\u003Cli>the full name of seller and buyer (\u003Ccode>seller.name\u003C\u002Fcode> or the address lines, which start with it; the trading name \u003Ccode>displayName\u003C\u002Fcode> alone is not enough) and their address (all address lines, or street, postcode and city);\u003C\u002Fli>\n\u003Cli>name, quantity and unit (\u003Ccode>unit.label\u003C\u002Fcode>) of every line (in \u003Ccode>lineGroups\u003C\u002Fcode> or \u003Ccode>lines\u003C\u002Fcode>). Section 14 (4) no. 5 UStG requires &quot;Menge und Art&quot; (quantity and kind) of the goods;\u003C\u002Fli>\n\u003Cli>label, or base and rate, and the VAT amount of every VAT row;\u003C\u002Fli>\n\u003Cli>the cash discount terms (\u003Ccode>paymentTerms.discounts[].text\u003C\u002Fcode> or \u003Ccode>paymentTerms.lines\u003C\u002Fcode>) and the amount due;\u003C\u002Fli>\n\u003Cli>every legal note (exemption reasons and regulatory notes, e.g. &quot;Gutschrift&quot; or the retention notice of section 14b UStG) and every preceding invoice number;\u003C\u002Fli>\n\u003Cli>the tax representative (name, address, VAT identifier);\u003C\u002Fli>\n\u003Cli>what the country pack requires. Germany: tax number or VAT identifier (also of the tax representative); the service date (\u003Ccode>servicePeriod\u003C\u002Fcode>, \u003Ccode>deliveryDate\u003C\u002Fcode> or \u003Ccode>delivery.date\u003C\u002Fcode>, or the period of every line); on self-billed invoices the title and the note &quot;Gutschrift&quot;; the retention notice of property related services; the \u003Ca href=\"\u002Fdocs\u002Fconcepts#german-terms\">reverse charge\u003C\u002Fa> or exemption note per VAT row; the VAT identifiers of buyer and seller for reverse charge and intra-community supplies (tax-exempt supplies of goods to a business in another EU country; see \u003Ca href=\"\u002Fdocs\u002Fcountry-packs#mandatory-pdf-output\">Country packs\u003C\u002Fa>).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>How the guard decides whether a value was printed:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Lists are checked per entry: printing only the first VAT row or note is not enough.\u003C\u002Fli>\n\u003Cli>Values that are null are not required.\u003C\u002Fli>\n\u003Cli>A value counts as printed when the template reads it as a leaf (a single value, not a node), also in a condition such as \u003Ccode>@if ($invoice-&gt;buyer-&gt;vatId)\u003C\u002Fcode>, while a loop reads the entries of a list, or with \u003Ccode>toArray()\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ccode>count()\u003C\u002Fcode>, \u003Ccode>isEmpty()\u003C\u002Fcode>, \u003Ccode>isset()\u003C\u002Fcode> and reading null values do not count.\u003C\u002Fli>\n\u003Cli>Values printed through \u003Ccode>issuer\u003C\u002Fcode> and \u003Ccode>recipient\u003C\u002Fcode> count for the seller and the buyer, and the generated footer counts as the issuer's address. A custom \u003Ccode>senderLine\u003C\u002Fcode> or custom \u003Ccode>footerColumns\u003C\u002Fcode> do not replace the seller's address.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Mandatory fields are \u003Ccode>Quittio\\Core\\Countries\\MandatoryField\u003C\u002Fcode> objects (\u003Ccode>accessKey\u003C\u002Fcode>, \u003Ccode>description\u003C\u002Fcode>, \u003Ccode>legalBasis\u003C\u002Fcode>). The access key is a view model path where \u003Ccode>[*]\u003C\u002Fcode> stands for every index, \u003Ccode>&amp;\u003C\u002Fcode> joins paths that must all be printed and \u003Ccode>|\u003C\u002Fcode> separates alternatives. Country packs return them from \u003Ccode>mandatoryOutput(InvoiceData $invoice)\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>A template that omits a mandatory value fails with \u003Ccode>MandatoryFieldMissing\u003C\u002Fcode> (\u003Ccode>validation.mandatory_field_guard = exception\u003C\u002Fcode>, default outside production) or logs it (\u003Ccode>log\u003C\u002Fcode>, default in production); \u003Ccode>off\u003C\u002Fcode> disables the check. The event \u003Ccode>MandatoryFieldMissing\u003C\u002Fcode> is dispatched in both modes. Details in \u003Ca href=\"\u002Fdocs\u002Fvalidation#mandatory-field-guard\">Validation\u003C\u002Fa>.\u003C\u002Fp>\n",[111,115,118,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188,191,194,196,199,202,205,208,211,214,217,220,223],{"id":112,"text":113,"level":114},"design-levels","Design levels",2,{"id":116,"text":117,"level":114},"default-templates","Default templates",{"id":119,"text":120,"level":121},"page-layout","Page layout",3,{"id":123,"text":124,"level":121},"carry-over-across-pages","Carry-over across pages",{"id":126,"text":127,"level":114},"logo-colours-and-texts-level-1","Logo, colours and texts (level 1)",{"id":129,"text":130,"level":121},"presentation","Presentation",{"id":132,"text":133,"level":121},"logos","Logos",{"id":135,"text":136,"level":121},"fonts","Fonts",{"id":138,"text":139,"level":121},"letter-layouts","Letter layouts",{"id":141,"text":142,"level":121},"paper-size","Paper size",{"id":144,"text":145,"level":121},"watermark","Watermark",{"id":147,"text":148,"level":121},"payment-qr-codes","Payment QR codes",{"id":150,"text":151,"level":121},"texts-and-markdown","Texts and Markdown",{"id":153,"text":154,"level":121},"translations-and-locales","Translations and locales",{"id":156,"text":157,"level":114},"html-output-and-preview","HTML output and preview",{"id":159,"text":160,"level":114},"changing-single-partials-level-2","Changing single partials (level 2)",{"id":162,"text":163,"level":114},"own-templates-level-3","Own templates (level 3)",{"id":165,"text":166,"level":121},"selecting-a-template","Selecting a template",{"id":168,"text":169,"level":121},"what-a-template-receives","What a template receives",{"id":171,"text":172,"level":121},"carry-over-in-own-templates","Carry-over in own templates",{"id":174,"text":175,"level":121},"page-numbers-headers-and-footers","Page numbers, headers and footers",{"id":177,"text":178,"level":121},"mpdf-rules-for-templates","mPDF rules for templates",{"id":180,"text":181,"level":121},"other-template-engines","Other template engines",{"id":183,"text":184,"level":114},"pdf-renderers","PDF renderers",{"id":186,"text":187,"level":114},"view-model","View model",{"id":189,"text":190,"level":121},"typed-nodes","Typed nodes",{"id":192,"text":193,"level":121},"top-level","Top level",{"id":195,"text":195,"level":121},"document",{"id":197,"text":198,"level":121},"parties","Parties",{"id":200,"text":201,"level":121},"lines","Lines",{"id":203,"text":204,"level":121},"allowances-and-charges","Allowances and charges",{"id":206,"text":207,"level":121},"vat-rows","VAT rows",{"id":209,"text":210,"level":121},"totals","Totals",{"id":212,"text":213,"level":121},"payment","Payment",{"id":215,"text":216,"level":121},"payment-terms","Payment terms",{"id":218,"text":219,"level":121},"design","Design",{"id":221,"text":222,"level":121},"documentinfo","documentInfo",{"id":224,"text":225,"level":114},"mandatory-field-guard","Mandatory field guard","https:\u002F\u002Fgithub.com\u002FQuittio\u002Fquittio\u002Fedit\u002Fmaster\u002Fdocs\u002Ftemplates.md","\u002Fdocs\u002Ftemplates.md",{"slug":49,"title":50},{"slug":55,"title":56}]