* @copyright 2002-2026 Nicola Asuni - Tecnick.com LTD * @license https://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE) * @link https://github.com/tecnickcom/tc-lib-pdf * * This file is part of tc-lib-pdf software library. */ // NOTE: local file reads (images, fonts, attachments) are restricted to an allowlist of // trusted paths that covers this package tree, so run the examples in place. To read assets // from other locations, list them in the 'allowedPaths' entry of the fileOptions constructor // parameter (see E047_remote_resources_security.php). // NOTE: run make fonts in the project root to generate the dependencies and example fonts. // autoloader when using Composer require __DIR__ . '/../vendor/autoload.php'; \define('OUTPUT_FILE', \realpath(__DIR__ . '/../target') . '/example_overview.pdf'); // define fonts directory \define('K_PATH_FONTS', \realpath(__DIR__ . '/../vendor/tecnickcom/tc-lib-pdf-font/target/fonts')); // autoloader when using RPM or DEB package installation //require ('/usr/share/php/Com/Tecnick/Pdf/autoload.php'); // main TCPDF object $pdf = new \Com\Tecnick\Pdf\Tcpdf( unit: \Com\Tecnick\Pdf\Page\Unit::Millimeter, isunicode: true, subsetfont: false, compress: true, mode: \Com\Tecnick\Pdf\PdfConformance::None, objEncrypt: null, ); // ---------- $pdf->setCreator('tc-lib-pdf'); $pdf->setAuthor('Nicola Asuni'); $pdf->setSubject('tc-lib-pdf example: 000'); $pdf->setTitle('tc-lib-pdf Visual Showcase'); $pdf->setKeywords('TCPDF tc-lib-pdf showcase barcode qr svg image transparency gradients'); $pdf->setPDFFilename('000_overview.pdf'); $pdf->setViewerPreferences(['DisplayDocTitle' => true]); $pdf->enableDefaultPageContent(); // ---------- // Insert fonts $titleFont = $pdf->font->insert($pdf->pon, 'dejavusans', 'B', 30); $subtitleFont = $pdf->font->insert($pdf->pon, 'dejavusans', '', 13); $bodyFont = $pdf->font->insert($pdf->pon, 'dejavusans', '', 10); $smallFont = $pdf->font->insert($pdf->pon, 'dejavusans', '', 8); $imgdir = __DIR__ . '/images'; // ---------- // Add first page $page01 = $pdf->addPage(); $pdf->setBookmark(name: 'Visual showcase', link: '', level: 0, page: -1, posx: 0, posy: 0, fstyle: 'B', color: 'blue'); $pageW = (float) $page01['width']; $pageH = (float) $page01['height']; $cardStyle = [ 'all' => [ 'lineWidth' => 0.35, 'lineCap' => 'butt', 'lineJoin' => 'miter', 'dashArray' => [], 'dashPhase' => 0, 'lineColor' => 'rgb(193,216,242)', 'fillColor' => 'rgb(255,255,255)', ], ]; $lineStyle = [ 'all' => [ 'lineWidth' => 0.25, 'lineCap' => 'butt', 'lineJoin' => 'miter', 'dashArray' => [], 'dashPhase' => 0, 'lineColor' => 'rgb(147,196,227)', 'fillColor' => 'rgb(147,196,227)', ], ]; $barcodeStyle = [ 'lineWidth' => 0, 'lineCap' => 'butt', 'lineJoin' => 'miter', 'dashArray' => [], 'dashPhase' => 0, 'lineColor' => 'black', 'fillColor' => 'black', ]; $textOnDark = $pdf->color->getPdfColor('rgb(244,250,255)'); $textOnLight = $pdf->color->getPdfColor('rgb(22,37,61)'); // Background atmosphere. $pdf->page->addContent($pdf->graph->getLinearGradient(0, 0, $pageW, $pageH, 'rgb(10,27,60)', 'rgb(0,171,193)', [ 0, 0, 1, 1, ])); $pdf->page->addContent($pdf->graph->getAlpha(0.12)); for ($lineY = -20; $lineY <= 330; $lineY += 12) { $pdf->page->addContent($pdf->graph->getLine(0, (float) $lineY, $pageW, (float) ($lineY + 95), $lineStyle)); } $pdf->page->addContent($pdf->graph->getAlpha(0.28)); $pdf->page->addContent($pdf->graph->getCircle(167, 46, 40, 0, 360, 'F', [ 'all' => [ 'lineWidth' => 0, 'lineCap' => 'butt', 'lineJoin' => 'miter', 'dashArray' => [], 'dashPhase' => 0, 'lineColor' => 'rgb(255,255,255)', 'fillColor' => 'rgb(255,255,255)', ], ])); $pdf->page->addContent($pdf->graph->getAlpha(1.0)); // Main title block. $pdf->page->addContent($textOnDark); $pdf->page->addContent($titleFont['out']); $pdf->addHTMLCell( html: '
tc-lib-pdf
', posx: 15, posy: 18, width: 120, ); $pdf->page->addContent($subtitleFont['out']); $pdf->addHTMLCell( html: '
Modern PDF generation in pure PHP: vectors, images, barcodes, and rich page composition.
', posx: 15, posy: 34, width: 125, ); // Left feature card. $pdf->page->addContent($pdf->graph->getAlpha(0.90)); $pdf->page->addContent($pdf->graph->getRect(12, 56, 89, 137, 'DF', $cardStyle)); $pdf->page->addContent($pdf->graph->getAlpha(1.0)); $pdf->page->addContent($textOnLight); $pdf->page->addContent($subtitleFont['out']); $pdf->addHTMLCell( html: '
Cool Features
', posx: 18, posy: 64, width: 72, ); $pdf->page->addContent($bodyFont['out']); $features = ''; $pdf->addHTMLCell(html: $features, posx: 18, posy: 74, width: 79); $logoFile = $imgdir . '/tcpdf_logo.jpg'; if (\is_file($logoFile)) { $logoId = $pdf->image->add($logoFile); $pdf->page->addContent($pdf->image->getSetImage($logoId, 153, 10, 40, 13, $pageH)); } // SVG art panel. $pdf->page->addContent($pdf->graph->getAlpha(0.92)); $pdf->page->addContent($pdf->graph->getRect(106, 70, 92, 121, 'DF', $cardStyle)); $pdf->page->addContent($pdf->graph->getAlpha(1.0)); $svgFile = $imgdir . '/testsvgblend.svg'; if (\is_file($svgFile)) { $svgObj = $pdf->addSVG(img: $svgFile, posx: 111, posy: 76, width: 82, height: 108, pageheight: $pageH); $pdf->page->addContent($pdf->getSetSVG(soid: $svgObj)); } $pdf->page->addContent($textOnLight); $pdf->page->addContent($smallFont['out']); $pdf->addHTMLCell( html: '
SVG graphic rendered directly into PDF vectors
', posx: 111, posy: 182, width: 82, ); // QR code panel. $pdf->page->addContent($pdf->graph->getAlpha(0.92)); $pdf->page->addContent($pdf->graph->getRect(12, 198, 186, 76, 'DF', $cardStyle)); $pdf->page->addContent($pdf->graph->getAlpha(1.0)); $pdf->page->addContent($textOnLight); $pdf->page->addContent($subtitleFont['out']); $pdf->addHTMLCell( html: '
Scan to Explore
', posx: 18, posy: 206, width: 92, ); $pdf->page->addContent($bodyFont['out']); $pdf->addHTMLCell( html: '
This QR code points to the official TCPDF project page:
', posx: 18, posy: 216, width: 118, ); $pdf->addHTMLCell( html: '
https://tcpdf.org
', posx: 18, posy: 228, width: 118, ); $pdf->page->addContent($pdf->getBarcode( type: 'QRCODE,H', code: 'https://tcpdf.org', posx: 145, posy: 206, width: 45, height: 45, padding: [0, 0, 0, 0], style: $barcodeStyle, )); // ============================================================= // ---------- // get PDF document as raw string $rawpdf = $pdf->getOutPDFString(); // ---------- // Various output modes: //$pdf->savePDF(\dirname(__DIR__).'/target', $rawpdf); $pdf->renderPDF(rawpdf: $rawpdf); //$pdf->downloadPDF($rawpdf); //echo $pdf->getMIMEAttachmentPDF($rawpdf);