Example 30
Description
A more complex sample report.
Please notice that this is a dummy invoice as it would be used in Switzerland. Therefore, it contains German texts.
The report contains a lot of hard coded text, normally this information would come from a database.
Output
<?php include_once "../src/Report.php"; use Adi\ReportLib as ReportLib; $pageFormat = new ReportLib\PageFormat("A4", 'P', 25.0, 10.0, 25.0, 10.0); $report = new ReportLib\Report($pageFormat); $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsNormal->setSize(11.0); addHeader($report); addFooter($report); printAddress($report); printProjectObject($report); printInvoiceData($report); printTitle($report); printInvoiceText($report); printValues($report); printPayable($report); printTextEnd($report); printGreetings($report); printQRSlip($report); try { $report->output(__DIR__ . "/example_030.pdf"); } catch (Exception $e) { echo($e); } /** * Adds the header which is printed on every page * @param ReportLib\Report $report * @return void */ function addHeader(ReportLib\Report $report): void { $header = $report->getHeader(); $vc = $header->AddVContainer(); $vc->setMarginBottom(5.0); $box = $vc->AddBox(); $box->setUseFullWidth(true); $box->setHeight(15.0); $if = $box->AddImage("logo2.png", true, 0.0, 10.0); $if->setVAlignment('M'); $if->setHAlignment('R'); } /** * Adds the footer to the report - printed only on the first page * @param ReportLib\Report $report * @return void */ function addFooter(ReportLib\Report $report): void { $footer = $report->getFooter(); $tsBold = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::BOLD); $pf = $footer->AddPageFrame(1); $pf->setMarginTop(5.0); $vc = $pf->AddVContainer(); $box = $vc->AddBox(); $box->setUseFullWidth(true); $tf = $box->AddText("Adiuvaris - At the lake 901a - 00100 Lakeside - 100 000 00 01", $tsBold); $tf->setHAlignment('C'); $tf->setVAlignment('B'); } /** * Prints the address with a FixposFrame for window envelope * @param ReportLib\Report $report * @return void */ function printAddress(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $b = new ReportLib\FixposFrame(120.0, 50.0); $adr = "Jane Doe\nSamplestreet 11b\n009900 Somewhere"; $frame = $b->AddVContainer(); $text = $frame->AddText($adr, $tsNormal); $text->setMarginBottom(20.0); $report->getBody()->addFrame($b); } /** * @param ReportLib\Report $report * @return void */ function printProjectObject(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsBold = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::BOLD); $body = $report->getBody(); $vFrame = $body->AddVContainer(); $hFrame = $vFrame->AddHContainer(); $hFrame->AddTextInBox(35.0, "Project", $tsNormal); $hFrame->AddText("Test Building", $tsBold); $hFrame = $vFrame->AddHContainer(); $hFrame->AddTextInBox(35.0, "", $tsNormal); $title = "Example structure near the woods\n"; $desc = "Apartment 45"; $hFrame->AddText($title, $tsNormal); $hFrame = $vFrame->AddHContainer(); $hFrame->AddTextInBox(35.0, "", $tsNormal); $hFrame->AddText($desc, $tsNormal); $object = "Apartment\nGarage"; $vFrame->AddVDistance(2.0); $hFrame = $vFrame->AddHContainer(); $hFrame->AddTextInBox(35.0, "Object", $tsNormal); $hFrame->AddText($object, $tsBold); $body->AddVDistance(5.0); } /** * @param ReportLib\Report $report * @return void */ function printInvoiceData(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsItalic = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::ITALIC); $tsItalic->setBold(true); $body = $report->getBody(); $vFrame = $body->AddVContainer(); $hFrame = $vFrame->AddHContainer(); $hFrame->AddTextInBox(35.0, "Invoice number", $tsNormal); $hFrame->AddText("2022-12-123456", $tsItalic); $body->AddVDistance(2.0); $vFrame = $body->AddVContainer(); $hFrame = $vFrame->AddHContainer(); $hFrame->AddTextInBox(35.0, "Tax number", $tsNormal); $hFrame->AddText("YYY-000-111-222", $tsItalic); $body->AddVDistance(5.0); } /** * @param ReportLib\Report $report * @return void */ function printTitle(ReportLib\Report $report): void { $tsHeading1 = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::HEADING1); $body = $report->getBody(); $f = $body->AddHContainer(); $f->AddText("Final Certificate", $tsHeading1); $body->AddVDistance(5.0); } /** * @param ReportLib\Report $report * @return void */ function printInvoiceText(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $body = $report->getBody(); $f = $body->AddHContainer(); $f->AddText("According to the contract we allow ourselves to invoice as follows", $tsNormal); $body->AddVDistance(5.0); } /** * @param ReportLib\Report $report * @return void */ function printValues(ReportLib\Report $report): void { // Names for the columns $COL_DESC = "desc"; $COL_BASE = "base"; $COL_FACTOR = "factor"; $COL_CURR = "curr"; $COL_VALUE = "value"; $body = $report->getBody(); $tab = $body->AddTable(); $tab->setMargin(0.5); $tab->setInterRowSpace(0.5); $tab->setInnerPenTotalTop(new ReportLib\Pen(0.0)); $tab->setSuppressHeaderRow(true); $tab->setMarginBottomSubtotal(1.2); $tab->setUseFullWidth(true); $tab->AddColumn($COL_DESC, "Description", 70.0); $tab->AddColumn($COL_BASE, "Base", 28, 'R', 2.0); $tab->AddColumn($COL_FACTOR, "Factor", 20.0); $tab->AddColumn($COL_CURR, "Currency", 10.0); $tab->AddColumn($COL_VALUE, "Amount", 30.0, 'R'); $row = new ReportLib\TableRow('T'); $row->setText($COL_DESC, "Apartment 45 & Garage"); $row->setText($COL_CURR, "CHF"); $row->setText($COL_VALUE, "350'000.00"); $tab->addDataRow($row); $row = new ReportLib\TableRow('D'); $row->setText($COL_DESC, " ./. On Account"); $row->setText($COL_CURR, "CHF"); $row->setText($COL_VALUE, "-100'000.00"); $tab->addDataRow($row); $row = new ReportLib\TableRow('T'); $row->setText($COL_DESC, "Pre-tax"); $row->setText($COL_CURR, "CHF"); $row->setText($COL_VALUE, "250'000.00"); $tab->addDataRow($row); $row = new ReportLib\TableRow('D'); $row->setText($COL_DESC, "Tax"); $row->setText($COL_FACTOR, "10.0%"); $row->setText($COL_CURR, "CHF"); $row->setText($COL_VALUE, "25'000.00"); $tab->addDataRow($row); $row = new ReportLib\TableRow('T'); $row->setText($COL_DESC, "Total"); $row->setText($COL_CURR, "CHF"); $row->setText($COL_VALUE, "275'000.00"); $tab->addDataRow($row); $body->AddVDistance(8.0); } /** * @param ReportLib\Report $report * @return void */ function printPayable(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsBold = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::BOLD); $body = $report->getBody(); $f = $body->AddHContainer(); $f->AddTextInBox(35.0, "payable until", $tsNormal); $f->AddText("01.01.2024", $tsBold); $body->AddVDistance(1.0); } /** * @param ReportLib\Report $report * @return void */ function printTextEnd(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $body = $report->getBody(); $f = $body->AddHContainer(); $f->AddText("We thank you in advance for the transfer to our account.", $tsNormal); } /** * @param ReportLib\Report $report * @return void */ function printGreetings(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsItalic = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::ITALIC); $body = $report->getBody(); $f = $body->AddVContainer(); $f->setMarginLeft(95.0); $f->AddVDistance(30.0); $f->AddText("Kind regards", $tsNormal); $f->AddVDistance(10.0); $f->AddText("Michael Hodel", $tsItalic); $f->AddText("Vice President", $tsNormal); } /** * @param ReportLib\Report $report * @return void */ function printQRSlip(ReportLib\Report $report): void { $body = $report->getBody(); $body->AddPageBreak(); addQrCodeZ($report); addQRTitleE($report); addQRDataE($report); addQRValueE($report); addQRE($report); addQRTitleZ($report); addQRDataZ($report); addQRValueZ($report); addQrLines($report); } /** * @param ReportLib\Report $report * @return void */ function addQrCodeZ(ReportLib\Report $report): void { $qrTopOffset = 297.0 - 105.0; $f = new ReportLib\FixposFrame(67.0, $qrTopOffset + 17.0, true); $f->AddBarcode("CH0011112222333344448\nApartment 45\n275000\n01.01.2024\nJane Doe", "QRCODE", 46.0, 46.0); $report->getBody()->AddFrame($f); } /** * @param ReportLib\Report $report * @return void */ function addQRTitleE(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $ts = ReportLib\TextStyles::addTextStyle("TitleE", $tsNormal); $ts->setBold(true); $ts->setSize(11.0); addQrText($report, "Empfangsschein", 5.0, 5.0, 52.0, $ts, 0.0); } /** * @param ReportLib\Report $report * @return void */ function addQRTitleZ(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $ts = ReportLib\TextStyles::addTextStyle("TitleE", $tsNormal); $ts->setBold(true); $ts->setSize(11.0); addQrText($report, "Zahlteil", 67.0, 5.0, 51.0, $ts, 0.0); } /** * @param ReportLib\Report $report * @return void */ function addQRDataE(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsC = ReportLib\TextStyles::addTextStyle("CaptionE", $tsNormal); $tsC->setBold(true); $tsC->setSize(6.0); $tsV = ReportLib\TextStyles::addTextStyle("ValueE", $tsNormal); $tsV->setSize(8.0); $nextY = addQrText($report, "Konto / Zahlbar an", 5.0, 12.0, 52.0, $tsC, 9.0); $nextY = addQrText($report, "CH00 1111 2222 3333 4444 8", 5.0, $nextY, 52.0, $tsV, 9.0); $nextY = addQrText($report, "Adiuvaris", 5.0, $nextY, 52.0, $tsV, 9.0); $nextY = addQrText($report, "At the lake 901a", 5.0, $nextY, 52.0, $tsV, 9.0); $nextY = addQrText($report, "00100 Lakeside", 5.0, $nextY, 52.0, $tsV, 9.0); $nextY = addQrText($report, "", 5.0, $nextY, 52.0, $tsV, 9.0); $nextY = addQrText($report, "Zahlbar durch", 5.0, $nextY, 52.0, $tsC, 9.0); $nextY = addQrText($report, "Jane Doe", 5.0, $nextY, 52.0, $tsV, 9.0); $nextY = addQrText($report, "Samplestreet 11b", 5.0, $nextY, 52.0, $tsV, 9.0); $nextY = addQrText($report, "009900 Somewhere", 5.0, $nextY, 52.0, $tsV, 9.0); } /** * @param ReportLib\Report $report * @return void */ function addQRDataZ(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsC = ReportLib\TextStyles::addTextStyle("CaptionE", $tsNormal); $tsC->setBold(true); $tsC->setSize(8.0); $tsV = ReportLib\TextStyles::addTextStyle("ValueE", $tsNormal); $tsV->setSize(10.0); $nextY = addQrText($report, "Konto / Zahlbar an", 118.0, 5.0, 92.0, $tsC, 11.0); $nextY = addQrText($report, "CH00 1111 2222 3333 4444 8", 118.0, $nextY, 92.0, $tsV, 11.0); $nextY = addQrText($report, "Adiuvaris", 118.0, $nextY, 92.0, $tsV, 11.0); $nextY = addQrText($report, "At the lake 901a", 118.0, $nextY, 92.0, $tsV, 11.0); $nextY = addQrText($report, "00100 Lakeside", 118.0, $nextY, 92.0, $tsV, 11.0); $nextY = addQrText($report, "", 118.0, $nextY, 92.0, $tsV, 11.0); $nextY = addQrText($report, "Zusätzliche Informationen", 118.0, $nextY, 92.0, $tsC, 11.0); $nextY = addQrText($report, "Apartment 45/275000/01.01.2024", 118.0, $nextY, 92.0, $tsV, 11.0); $nextY = addQrText($report, "", 118.0, $nextY, 92.0, $tsV, 11.0); $nextY = addQrText($report, "Zahlbar durch", 118.0, $nextY, 92.0, $tsC, 9.0); $nextY = addQrText($report, "Jane Doe", 118.0, $nextY, 92.0, $tsV, 9.0); $nextY = addQrText($report, "Samplestreet 11b", 118.0, $nextY, 92.0, $tsV, 9.0); $nextY = addQrText($report, "009900 Somewhere", 118.0, $nextY, 92.0, $tsV, 9.0); } /** * @param ReportLib\Report $report * @return void */ function addQRValueE(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsC = ReportLib\TextStyles::addTextStyle("CaptionE", $tsNormal); $tsC->setBold(true); $tsC->setSize(6.0); $tsV = ReportLib\TextStyles::addTextStyle("ValueE", $tsNormal); $tsV->setSize(8.0); $nextY = addQrText($report, "Währung", 5.0, 68.0, 15.0, $tsC, 9.0); addQrText($report, "Betrag", 20.0, 68.0, 35.0, $tsC, 9.0); addQrText($report, "CHF", 5.0, $nextY, 35.0, $tsV, 11.0); addQrText($report, "275 000.00", 20.0, $nextY, 35.0, $tsV, 11.0); } /** * @param ReportLib\Report $report * @return void */ function addQRValueZ(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsC = ReportLib\TextStyles::addTextStyle("CaptionE", $tsNormal); $tsC->setBold(true); $tsC->setSize(8.0); $tsV = ReportLib\TextStyles::addTextStyle("ValueE", $tsNormal); $tsV->setSize(10.0); $nextY = addQrText($report, "Währung", 67.0, 68.0, 15.0, $tsC, 11.0); addQrText($report, "Betrag", 82.0, 68.0, 35.0, $tsC, 9.0); addQrText($report, "CHF", 67.0, $nextY, 34.0, $tsV, 11.0); addQrText($report, "275 000.00", 82.0, $nextY, 34.0, $tsV, 11.0); } /** * @param ReportLib\Report $report * @return void */ function addQRE(ReportLib\Report $report): void { $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $tsC = ReportLib\TextStyles::addTextStyle("CaptionE", $tsNormal); $tsC->setBold(true); $tsC->setSize(6.0); addQrText($report, "Annahmestelle", 5.0, 82.0, 52.0, $tsC, 8.0, 'R'); } /** * @param ReportLib\Report $report * @return void */ function addQrLines(ReportLib\Report $report): void { $qrTopOffset = 297.0 - 105.0; $tsNormal = ReportLib\TextStyles::getTextStyle(ReportLib\TextStyles::NORMAL); $ts = ReportLib\TextStyles::addTextStyle("TitleE", $tsNormal); $ts->setBold(true); $ts->setSize(8.0); addQrText($report, "Hier abtrennen", 0.0, -3.5, 210.0, $ts, 0.0, 'C'); $f = new ReportLib\FixposFrame(0.0, $qrTopOffset, true); $f->AddHLine(); $report->getBody()->AddFrame($f); $f = new ReportLib\FixposFrame(62.0, $qrTopOffset, true); $f->AddVLine(); $report->getBody()->AddFrame($f); } /** * @param ReportLib\Report $report * @param string $text * @param float $x * @param float $y * @param float $w * @param ReportLib\TextStyle $ts * @param float $fontSize * @param string $hAlign * @return float */ function addQrText(ReportLib\Report $report, string $text, float $x, float $y, float $w, ReportLib\TextStyle $ts, float $fontSize, string $hAlign = 'L'): float { $qrTopOffset = 297.0 - 105.0; $f = new ReportLib\FixposFrame($x, $qrTopOffset + $y, true); $tf = $f->AddTextInBox($w, $text, $ts, $hAlign); $report->getBody()->AddFrame($f); return $y + convertPtToMM($fontSize); } /** * @param float $pt * @return float */ function convertPtToMM(float $pt): float { return $pt * 25.4 / 72.0; }