Skip to content

Latest commit

 

History

History

PDFDraw

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

PDFDrawTrait

GitHub license Author

This trait allows to to draw lines, rectangles, ellipses, polygons and curves with line style.

Requires

Require use of CMYKTrait

Usage

The public methods are:

/**
 * Sets line style
 *
 * @param array $style Line style. Array with keys among the following:
 * - width: Width of the line in user units
 * - cap: Type of cap to put on the line (butt, round, square). The difference between 'square' and 'butt' is that 'square' projects a flat end past the end of the line.
 * - join: miter, round or bevel
 * - dash: Dash pattern. Is 0 (without dash) or array with series of length values, which are the lengths of the on and off dashes.
 *         For example: (2) represents 2 on, 2 off, 2 on , 2 off ...
 *                      (2,1) is 2 on, 1 off, 2 on, 1 off.. etc
 * - phase: Modifier of the dash pattern which is used to shift the point at which the pattern starts
 * - color: Draw color. Array with components (red, green, blue)
 * @return void
 */
PDFDrawTrait::SetLineStyle(array $style);

/**
 * Draws a line between two points
 *
 * @param float $x1 Abscissa of first point.
 * @param float $y1 Ordinate of first point.
 * @param float $x2 Abscissa of second point.
 * @param float $y2 Ordinate of second point.
 * @param null|array $style Style of line as described in SetLineStyle
 * @return void
 */
PDFDrawTrait::Line(float $x1, float $y1, float $x2, float $y2 [, ?array $style]);

/**
 * Outputs a rectangle. It can be drawn (border only), filled (with no border) or both.
 *
 * @param float $x Abscissa of upper-left corner.
 * @param float $y Ordinate of upper-left corner.
 * @param float $w Width.
 * @param float $h Height.
 * @param null|string $style Style of rendering. Possible values are:
 * - D or empty string: draw. This is the default value.
 * - F: fill
 * - DF or FD: draw and fill
 * @param null|array $border_style Border style of rectangle. Array with some of this index
 * - all: Line style of all borders. Array like for SetLineStyle
 * - L: Line style of left border. null (no border) or array like for SetLineStyle
 * - T: Line style of top border. null (no border) or array like for SetLineStyle
 * - R: Line style of right border. null (no border) or array like for SetLineStyle
 * - B: Line style of bottom border. null (no border) or array like for SetLineStyle
 * @param null|array $fill_color Fill color. Array like for SetFillColor
 * @return void
 */
PDFDrawTrait::Rect(float $x, float $y, float $w, float $h [, $style [, ?array $border_style [, ?array $fill_color]]]);

/**
 * Draws a Bézier curve (the Bézier curve is tangent to the line between the control points at either end of the curve)
 *
 * @param float $x0 Abscissa of start point
 * @param float $y0 Ordinate of start point
 * @param float $x1 Abscissa of control point 1
 * @param float $y1 Ordinate of control point 1
 * @param float $x2 Abscissa of control point 2
 * @param float $y2 Ordinate of control point 2
 * @param float $x3 Abscissa of end point
 * @param float $y3 Ordinate of end point
 * @param null|string $style Style of rendering. Possible values are:
 * - D or empty string: draw. This is the default value.
 * - F: fill
 * - DF or FD: draw and fill
 * @param null|array $line_style Style of line as described in SetLineStyle
 * @param null|array $fill_color Fill color. Array like for SetFillColor
 * @return void
 */
PDFDrawTrait::Curve(float $x0, float $y0, float $x1, float $y1, float $x2, float $y2, float $x3, float $y3 [, ?string $style [, ?array $line_style [, ?array $fill_color]]]);

/**
 * Draws an ellipse
 *
 * @param float $x0 Abscissa of center point
 * @param float $y0 Ordinate of center point
 * @param float $rx Horizontal radius
 * @param null|float $ry Vertical radius (if 0, draws a circle)
 * @param float $angle Orientation angle (anti-clockwise)
 * @param float $astart Start angle
 * @param float $afinish Finish angle
 * @param null|string $style Style of ellipse (draw and/or fill: D, F, DF, FD, C (D + close))
 * @param null|array $line_style Line style for ellipse. Array like for SetLineStyle
 * @param null|array $fill_color Fill color. Array like for SetFillColor
 * @param int $nSeg Ellipse is made up of nSeg Bézier curves
 * @return void
 */
PDFDrawTrait::Ellipse(float $x0, float $y0, float $rx [, ?float $ry [, float $angle [, float $astart [, float $afinish [, ?string $style [, ?array $line_style [, ?array $fill_color [, int $nSeg]]]]]]]]);

/**
 * Draws a circle
 *
 * @param float $x0 Abscissa of center point
 * @param float $y0 Ordinate of center point
 * @param float $r Radius
 * @param float $astart Start angle
 * @param float $afinish Finish angle
 * @param null|string $style Style of circle (draw and/or fill) (D, F, DF, FD, C (D + close))
 * @param null|array $line_style Line style for circle. Array like for SetLineStyle
 * @param null|array $fill_color Fill color. Array like for SetFillColor
 * @param int $nSeg
 * @return void
 */
PDFDrawTrait::Circle(float $x0, float $y0, float $r [, float $astart [, float $afinish [, ?string $style [, ?array $line_style [, ?array $fill_color [, int $nSeg]]]]]]);

Example

<?php
declare(strict_types=1);

require dirname(dirname(__DIR__)) . '/fpdf/fpdf.php';
require dirname(dirname(__DIR__)) . '/src/Traits/CMYKTrait.php';
require __DIR__ . '/PDFDrawTrait.php';

use Fawno\FPDF\Traits\CMYKTrait;
use FPDF\Scripts\PDFDraw\PDFDrawTrait;

$pdf = new class extends FPDF {
  use CMYKTrait;
  use PDFDrawTrait;
};

$pdf->SetFont('arial', '', 10);
$pdf->AddPage();

$style1 = ['width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,20,5,10', 'phase' => 10, 'color' => [255, 0, 0]];
$style2 = ['width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => [255, 0, 0]];
$style3 = ['width' => 1, 'cap' => 'round', 'join' => 'round', 'dash' => '2,10', 'color' => [255, 0, 0]];
$style4 = [
  'L' => 0,
  'T' => ['width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '20,10', 'phase' => 10, 'color' => [100, 100, 255]],
  'R' => ['width' => 0.50, 'cap' => 'round', 'join' => 'miter', 'dash' => 0, 'color' => [50, 50, 127]],
  'B' => ['width' => 0.75, 'cap' => 'square', 'join' => 'miter', 'dash' => '30,10,5,10'],
];
$style5 = ['width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => [0, 0, 0]];
$style6 = ['width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,10', 'color' => [0, 255, 0]];
$style7 = ['width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => [200, 200, 0]];

// Line
$pdf->Text(5, 7, 'Line examples');
$pdf->Line(5, 10, 80, 30, $style1);
$pdf->Line(5, 10, 5, 30, $style2);
$pdf->Line(5, 10, 80, 10, $style3);

// Rect
$pdf->Text(100, 7, 'Rectangle examples');
$pdf->Rect(100, 10, 40, 20, 'DF', $style4, [220, 220, 200]);
$pdf->Rect(145, 10, 40, 20, 'D', ['all' => $style3]);

// Curve
$pdf->Text(5, 37, 'Curve examples');
$pdf->Curve(5, 40, 30, 55, 70, 45, 60, 75, null, $style6);
$pdf->Curve(80, 40, 70, 75, 150, 45, 100, 75, 'F', $style6);
$pdf->Curve(140, 40, 150, 55, 180, 45, 200, 75, 'DF', $style6, [200, 220, 200]);

// Circle and ellipse
$pdf->Text(5, 82, 'Circle and ellipse examples');
$pdf->SetLineStyle($style5);
$pdf->Circle(25,105,20);
$pdf->Circle(25,105,10, 90, 180, null, $style6);
$pdf->Circle(25,105,10, 270, 360, 'F');
$pdf->Circle(25,105,10, 270, 360, 'C', $style6);

$pdf->SetLineStyle($style5);
$pdf->Ellipse(100,105,40,20);
$pdf->Ellipse(100,105,20,10, 0, 90, 180, null, $style6);
$pdf->Ellipse(100,105,20,10, 0, 270, 360, 'DF', $style6);

$pdf->SetLineStyle($style5);
$pdf->Ellipse(175,105,30,15, 45);
$pdf->Ellipse(175,105,15,7.50, 45, 90, 180, null, $style6);
$pdf->Ellipse(175,105,15,7.50, 45, 270, 360, 'F', $style6, [220, 200, 200]);

// Polygon
$pdf->Text(5, 132, 'Polygon examples');
$pdf->SetLineStyle(['width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => [0, 0, 0]]);
$pdf->Polygon([5,135,45,135,15,165]);
$pdf->Polygon([60,135,80,135,80,155,70,165,50,155], 'DF', [$style6, $style7, $style7, 0, $style6]);
$pdf->Polygon([120,135,140,135,150,155,110,155], 'D', [$style6, 0, $style7, $style6]);
$pdf->Polygon([160,135,190,155,170,155,200,160,160,165], 'DF', ['all' => $style6], [220, 220, 220]);

// Regular polygon
$pdf->Text(5, 172, 'Regular polygon examples');
$pdf->SetLineStyle($style5);
$pdf->RegularPolygon(20, 190, 15, 6, 0, 1, 'F');
$pdf->RegularPolygon(55, 190, 15, 6);
$pdf->RegularPolygon(55, 190, 10, 6, 45, 0, 'DF', [$style6, 0, $style7, 0, $style7, $style7, $style6]);
$pdf->RegularPolygon(90, 190, 15, 3, 0, 1, 'DF', ['all' => $style5], [200, 220, 200], 'F', [255, 200, 200]);
$pdf->RegularPolygon(125, 190, 15, 4, 30, 1, null, ['all' => $style5], null, null, $style6);
$pdf->RegularPolygon(160, 190, 15, 10);

// Star polygon
$pdf->Text(5, 212, 'Star polygon examples');
$pdf->SetLineStyle($style5);
$pdf->StarPolygon(20, 230, 15, 20, 3, 0, 1, 'F');
$pdf->StarPolygon(55, 230, 15, 12, 5);
$pdf->StarPolygon(55, 230, 7, 12, 5, 45, 0, 'DF', [$style6, 0, $style7, 0, $style7, $style7, $style6]);
$pdf->StarPolygon(90, 230, 15, 20, 6, 0, 1, 'DF', ['all' => $style5], [220, 220, 200], 'F', [255, 200, 200]);
$pdf->StarPolygon(125, 230, 15, 5, 2, 30, 1, null, ['all' => $style5], null, null, $style6);
$pdf->StarPolygon(160, 230, 15, 10, 3);
$pdf->StarPolygon(160, 230, 7, 50, 26);

// Rounded rectangle
$pdf->Text(5, 252, 'Rounded rectangle examples');
$pdf->SetLineStyle(['width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => [0, 0, 0]]);
$pdf->RoundedRect(5, 255, 40, 30, 3.50, '1111', 'DF');
$pdf->RoundedRect(50, 255, 40, 30, 6.50, '1000');
$pdf->RoundedRect(95, 255, 40, 30, 10.0, '1111', null, $style6);
$pdf->RoundedRect(140, 255, 40, 30, 8.0, '0101', 'DF', $style6, [200, 200, 200]);

$pdf->Output('F', __DIR__ . '/example.pdf');

Result