Files
baseProject/vendor/tecnickcom/tc-lib-pdf/examples/E036_graphic_methods.php
T

524 lines
12 KiB
PHP
Raw Normal View History

<?php
/**
* E036_graphic_methods.php
*
* @since 2017-05-08
* @category Library
* @package Pdf
* @author Nicola Asuni <info@tecnick.com>
* @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.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: 036');
$pdf->setTitle('Graphic Methods');
$pdf->setKeywords('TCPDF tc-lib-pdf graphic methods lines curves polygons shapes');
$pdf->setPDFFilename('036_graphic_methods.pdf');
$pdf->setViewerPreferences(['DisplayDocTitle' => true]);
$pdf->enableDefaultPageContent();
// ----------
// Insert fonts
$bfont1 = $pdf->font->insert($pdf->pon, 'helvetica', '', 12);
// test images directory
$imgdir = \realpath(__DIR__ . '/../vendor/tecnickcom/tc-lib-pdf-image/test/images/');
// ----------
$style1 = [
'lineWidth' => 0.5,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'dashArray' => [5, 2, 1, 2],
'dashPhase' => 0,
'lineColor' => 'red',
'fillColor' => 'powderblue',
];
$style2 = [
'lineWidth' => 0.5,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'dashArray' => [],
'dashPhase' => 0,
'lineColor' => 'green',
'fillColor' => 'powderblue',
];
$style3 = [
'lineWidth' => 1,
'lineCap' => 'round',
'lineJoin' => 'round',
'dashArray' => [6, 2],
'dashPhase' => 0,
'lineColor' => 'blue',
'fillColor' => 'powderblue',
];
$style4 = [
'all' => [
'lineWidth' => 0.5,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'miterLimit' => 0.5,
'dashArray' => [],
'dashPhase' => 0,
'lineColor' => 'black',
'fillColor' => 'aliceblue',
],
// TOP
0 => [
'lineWidth' => 0.25,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'dashArray' => [],
'dashPhase' => 0,
'lineColor' => 'red',
'fillColor' => 'powderblue',
],
// RIGHT
1 => [
'lineWidth' => 0.25,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'dashArray' => [],
'dashPhase' => 0,
'lineColor' => 'green',
'fillColor' => 'powderblue',
],
// BOTTOM
2 => [
'lineWidth' => 0.50,
'lineCap' => 'round',
'lineJoin' => 'miter',
'dashArray' => [],
'dashPhase' => 0,
'lineColor' => 'blue',
'fillColor' => 'powderblue',
],
// LEFT
3 => [
'lineWidth' => 0.75,
'lineCap' => 'square',
'lineJoin' => 'miter',
'dashArray' => [6, 3, 2, 3],
'dashPhase' => 0,
'lineColor' => 'yellow',
'fillColor' => 'powderblue',
],
];
$style5 = [
'lineWidth' => 0.25,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'dashArray' => [],
'dashPhase' => 0,
'lineColor' => 'darkblue',
'fillColor' => 'mistyrose',
];
$style6 = [
'lineWidth' => 0.5,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'dashArray' => [3, 3],
'dashPhase' => 0,
'lineColor' => 'green',
'fillColor' => 'powderblue',
];
$style7 = [
'lineWidth' => 0.5,
'lineCap' => 'butt',
'lineJoin' => 'miter',
'dashArray' => [],
'dashPhase' => 0,
'lineColor' => 'darkorange',
'fillColor' => 'palegreen',
];
// ----------
$page01 = $pdf->addPage();
$titleHtml = <<<HTML
<h1 style="font-size:16pt; color:#003366;">Graphic Methods</h1>
<p style="font-size:9pt; color:#333333;">
This example presents a compact visual overview of the drawing primitives available in tc-lib-pdf,
including pie sectors, ellipses, lines, rectangles, curves, polygons, regular polygons, star polygons,
rounded rectangles, and arrow styles.
</p>
HTML;
$pdf->addHTMLCell(html: $titleHtml, posx: 15, posy: 15, width: 180);
$xc = 105;
$yc = 150;
$r = 50;
$pie1 = $pdf->graph->getPieSector($xc, $yc, $r, 20, 120, 'FD', $style5, 2);
$pdf->page->addContent($pie1);
$pie2 = $pdf->graph->getPieSector($xc, $yc, $r, 120, 250, 'FD', $style6, 2);
$pdf->page->addContent($pie2);
$pie3 = $pdf->graph->getPieSector($xc, $yc, $r, 250, 20, 'FD', $style7, 2);
$pdf->page->addContent($pie3);
// ----------
$page02 = $pdf->addPage();
$pdf->setBookmark(name: 'Ellipse', link: '', level: 1);
// center of ellipse
$xc = 100;
$yc = 100;
// X Y axis
$arc1 = $pdf->graph->getLine($xc - 50, $yc, $xc + 50, $yc, $style1);
$pdf->page->addContent($arc1);
$arc2 = $pdf->graph->getLine($xc, $yc - 50, $xc, $yc + 50, $style2);
$pdf->page->addContent($arc2);
// ellipse axis
$arc3 = $pdf->graph->getLine($xc - 50, $yc - 50, $xc + 50, $yc + 50, $style3);
$pdf->page->addContent($arc3);
$arc4 = $pdf->graph->getLine($xc - 50, $yc + 50, $xc + 50, $yc - 50, $style5);
$pdf->page->addContent($arc4);
// ellipse
$arc5 = $pdf->graph->getEllipse($xc, $yc, 30, 15, 45, 0, 360, 'D', $style6, 2);
$pdf->page->addContent($arc5);
// ellipse arc
$arc6 = $pdf->graph->getEllipse($xc, $yc, 30, 15, 45, 45, 90, 'D', $style7, 2);
$pdf->page->addContent($arc6);
// ----------
$page03 = $pdf->addPage();
// Line
$line1 = $pdf->graph->getLine(5, 10, 80, 30, $style1);
$pdf->page->addContent($line1);
$line2 = $pdf->graph->getLine(5, 10, 5, 30, $style2);
$pdf->page->addContent($line2);
$line3 = $pdf->graph->getLine(5, 10, 80, 10, $style3);
$pdf->page->addContent($line3);
// Rectangle
$rect1 = $pdf->graph->getRect(100, 10, 40, 20, 'DF', $style4);
$pdf->page->addContent($rect1);
$rect2 = $pdf->graph->getRect(145, 10, 40, 20, 'D', [
'all' => $style3,
]);
$pdf->page->addContent($rect2);
// Curve
$curve1 = $pdf->graph->getCurve(5, 40, 30, 55, 70, 45, 60, 75, '', $style6);
$pdf->page->addContent($curve1);
$curve2 = $pdf->graph->getCurve(80, 40, 70, 75, 150, 45, 100, 75, 'F', $style6);
$pdf->page->addContent($curve2);
$curve3 = $pdf->graph->getCurve(140, 40, 150, 55, 180, 45, 200, 75, 'DF', $style6);
$pdf->page->addContent($curve3);
// Circle
$circle1 = $pdf->graph->getCircle(25, 105, 20);
$pdf->page->addContent($circle1);
$circle2 = $pdf->graph->getCircle(25, 105, 10, 90, 180, '', $style7);
$pdf->page->addContent($circle2);
$circle3 = $pdf->graph->getCircle(25, 105, 10, 270, 360, 'F');
$pdf->page->addContent($circle3);
$circle4 = $pdf->graph->getCircle(25, 105, 10, 270, 360, 'C', $style7);
$pdf->page->addContent($circle4);
// Ellipse
$ellipse1 = $pdf->graph->getEllipse(100, 103, 40, 20);
$pdf->page->addContent($ellipse1);
$ellipse2 = $pdf->graph->getEllipse(100, 105, 20, 10, 0, 90, 180, '', $style7);
$pdf->page->addContent($ellipse2);
$ellipse3 = $pdf->graph->getEllipse(100, 105, 20, 10, 0, 270, 360, 'DF', $style7);
$pdf->page->addContent($ellipse3);
$ellipse4 = $pdf->graph->getEllipse(175, 103, 30, 15, 45);
$pdf->page->addContent($ellipse4);
$ellipse5 = $pdf->graph->getEllipse(175, 105, 15, 7.50, 45, 90, 180, '', $style7);
$pdf->page->addContent($ellipse5);
$ellipse6 = $pdf->graph->getEllipse(175, 105, 15, 7.50, 45, 270, 360, 'F', $style7, 4);
$pdf->page->addContent($ellipse6);
// Polygon
$polygon1 = $pdf->graph->getPolygon([5, 135, 45, 135, 15, 165], 's');
$pdf->page->addContent($polygon1);
$polygon2 = $pdf->graph->getPolygon([60, 135, 80, 135, 80, 155, 70, 165, 50, 155], 'DF', [
$style6,
$style7,
$style7,
$style6,
$style6,
]);
$pdf->page->addContent($polygon2);
$polygon3 = $pdf->graph->getPolygon([120, 135, 140, 135, 150, 155, 110, 155], 'D', [
$style5,
$style6,
$style7,
$style6,
]);
$pdf->page->addContent($polygon3);
$polygon4 = $pdf->graph->getPolygon([160, 135, 190, 155, 170, 155, 200, 160, 160, 165], 'DF', [
'all' => $style6,
]);
$pdf->page->addContent($polygon4);
$polygon5 = $pdf->graph->getPolygon([80, 165, 90, 160, 100, 165, 110, 160, 120, 165, 130, 160, 140, 165], 'D', [
'all' => $style1,
]);
$pdf->page->addContent($polygon5);
// Regular Polygon
$regpoly1 = $pdf->graph->getRegularPolygon(
20,
190,
15,
6,
0,
'b',
[
'all' => $style6,
],
's',
$style5,
);
$pdf->page->addContent($regpoly1);
$regpoly2 = $pdf->graph->getRegularPolygon(55, 190, 15, 6, 0, 's');
$pdf->page->addContent($regpoly2);
$regpoly3 = $pdf->graph->getRegularPolygon(55, 190, 10, 6, 45, 'DF', [
$style6,
$style5,
$style7,
$style5,
$style7,
$style7,
]);
$pdf->page->addContent($regpoly3);
$regpoly4 = $pdf->graph->getRegularPolygon(
90,
190,
15,
3,
0,
'b',
[
'all' => $style5,
],
'F',
$style6,
);
$pdf->page->addContent($regpoly4);
$regpoly5 = $pdf->graph->getRegularPolygon(
125,
190,
15,
4,
30,
'b',
[
'all' => $style5,
],
's',
$style1,
);
$pdf->page->addContent($regpoly5);
$regpoly6 = $pdf->graph->getRegularPolygon(160, 190, 15, 10, 0, 's');
$pdf->page->addContent($regpoly6);
// Star Polygon
$startpoly1 = $pdf->graph->getStarPolygon(
20,
230,
15,
20,
3,
0,
's',
[
'all' => $style2,
],
'b',
$style5,
);
$pdf->page->addContent($startpoly1);
$startpoly2 = $pdf->graph->getStarPolygon(55, 230, 15, 12, 5, 15, 's');
$pdf->page->addContent($startpoly2);
$startpoly3 = $pdf->graph->getStarPolygon(
55,
230,
7,
12,
5,
45,
'b',
[
'all' => $style7,
],
'F',
$style6,
);
$pdf->page->addContent($startpoly3);
$startpoly4 = $pdf->graph->getStarPolygon(
90,
230,
15,
20,
6,
0,
's',
[
'all' => $style5,
],
'F',
$style6,
);
$pdf->page->addContent($startpoly4);
$startpoly5 = $pdf->graph->getStarPolygon(
125,
230,
15,
5,
2,
30,
's',
[
'all' => $style5,
],
's',
$style6,
);
$pdf->page->addContent($startpoly5);
$startpoly6 = $pdf->graph->getStarPolygon(160, 230, 15, 10, 3, 0, 's');
$pdf->page->addContent($startpoly6);
$startpoly7 = $pdf->graph->getStarPolygon(160, 230, 7, 50, 26, 10, 's');
$pdf->page->addContent($startpoly7);
// Rounded Rectangle
$roundrect1 = $pdf->graph->getRoundedRect(5, 255, 40, 30, 3.50, 3.50, '1111', 'DF');
$pdf->page->addContent($roundrect1);
$roundrect2 = $pdf->graph->getRoundedRect(50, 255, 40, 30, 6.50, 6.50, '1000', 'b');
$pdf->page->addContent($roundrect2);
$roundrect3 = $pdf->graph->getRoundedRect(95, 255, 40, 30, 10.0, 5.0, '1111', 's', $style6);
$pdf->page->addContent($roundrect3);
$roundrect4 = $pdf->graph->getRoundedRect(140, 255, 40, 30, 8.0, 8.0, '0101', 'DF', $style6);
$pdf->page->addContent($roundrect4);
// Arrows
$arrow1 = $pdf->graph->getArrow(200, 280, 185, 266, 0, 5, 15);
$pdf->page->addContent($arrow1);
$arrow2 = $pdf->graph->getArrow(200, 280, 190, 263, 1, 5, 15);
$pdf->page->addContent($arrow2);
$arrow3 = $pdf->graph->getArrow(200, 280, 195, 261, 2, 5, 15);
$pdf->page->addContent($arrow3);
$arrow4 = $pdf->graph->getArrow(200, 280, 200, 260, 3, 5, 15);
$pdf->page->addContent($arrow4);
// ----------
// =============================================================
// ----------
// 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);