Files
qds/app/Services/StickerPdfService.php
dhanabalan d9f531fbc6
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Gemini PR Review / Gemini PR Review (pull_request) Has been cancelled
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (pull_request) Has been cancelled
Laravel Larastan / larastan (pull_request) Has been cancelled
Laravel Pint / pint (pull_request) Has been cancelled
Chnaged logic for showing qr code based on content
2026-04-27 16:25:32 +05:30

1168 lines
41 KiB
PHP

<?php
namespace App\Services;
use App\Models\Item;
use App\Models\ItemCharacteristic;
use App\Models\ProductionQuantity;
use App\Models\StickerDetail;
use App\Models\StickerMappingMaster;
use App\Models\StickerStructureDetail;
use App\Models\StickerValidation;
use Illuminate\Http\Response;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Schema;
use TCPDF;
class StickerPdfService
{
public function generateStickerItem(string $stickerId, Collection $dynamicElements, ?ItemCharacteristic $itemCharacteristic)
{
$dynamicValueMap = [];
foreach ($dynamicElements as $element) {
$column = $element->characteristics_type;
$value = '';
if (
$itemCharacteristic &&
$column &&
Schema::hasColumn('item_characteristics', $column)
) {
$value = $itemCharacteristic->{$column};
}
$dynamicValueMap[$element->id] = [
'design_type' => $element->design_element_type, // Text / Image
'value' => $value,
];
}
$structure = StickerStructureDetail::where('sticker_id', $stickerId)
->first();
$structureId = $structure->id;
$elements = StickerDetail::where(
'sticker_structure_detail_id',
$structureId
)->get();
$width = (float) $structure->sticker_width;
$height = (float) $structure->sticker_height;
$pdf = new TCPDF('P', 'mm', [$width, $height], true, 'UTF-8', false);
// $pdf->SetMargins(
// (float) $structure->sticker_lmargin,
// (float) $structure->sticker_tmargin,
// (float) $structure->sticker_rmargin,
// );
// //$pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
// $pdf->setCellPaddings(0, 0, 0, 0);
// $pdf->setCellMargins(5, 5, 5, 5);
// Set margins
// $pdf->SetMargins(5, 5, 5); // left, top, right
$pdf->SetMargins(
(float) $structure->sticker_lmargin,
(float) $structure->sticker_tmargin,
(float) $structure->sticker_rmargin,
);
$pdf->SetAutoPageBreak(false, 0);
$pdf->AddPage();
$pdf->SetFont('helvetica', 'B', 10);
foreach ($elements as $row) {
switch ($row->design_element_type) {
case 'Text':
$pdf->SetFont(
$row->string_font ?? 'helvetica',
'',
(int) ($row->string_size ?? 10)
);
$pdf->SetTextColor(
...$this->hexToRgb($row->element_colour ?? '#000000')
);
$textValue = $row->string_value ?? '';
if (
$row->element_type == 'Dynamic' &&
isset($dynamicValueMap[$row->id])
) {
$textValue = $dynamicValueMap[$row->id]['value'];
}
$pdf->Text(
(float) ($row->string_x_value ?? 0),
(float) ($row->string_y_value ?? 0),
(string) $textValue
);
break;
case 'QR':
$pdf->write2DBarcode(
$row->qr_value ?? '',
'QRCODE,H',
(float) ($row->qr_x_value ?? 0),
(float) ($row->qr_y_value ?? 0),
(float) ($row->qr_size ?? 10),
(float) ($row->qr_size ?? 10)
);
break;
case 'Image':
$imagePath = null;
if (
$row->element_type == 'Dynamic' &&
isset($dynamicValueMap[$row->id]) &&
! empty($dynamicValueMap[$row->id]['value'])
) {
$imageName = strtolower($dynamicValueMap[$row->id]['value']).'.png';
$imagePath = public_path('images/'.ltrim($imageName, '/'));
}
$pdf->Image(
$imagePath,
(float) ($row->image_x ?? 0),
(float) ($row->image_y ?? 0),
(float) ($row->image_width ?? 0),
(float) ($row->image_height ?? 0)
);
break;
case 'Shape':
if ($row->shape_name == 'Line') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$pdf->Line(
(float) $row->shape_x1_value,
(float) $row->shape_y1_value,
(float) $row->shape_x2_value,
(float) $row->shape_y2_value
);
} elseif ($row->shape_name == 'Rectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
$pdf->Rect($x, $y, $width, $height, 'D');
} elseif ($row->shape_name == 'CurvedRectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
// radius in mm
// $radius = 3;
$radius = (float) $row->curve_radius;
$pdf->RoundedRect(
$x,
$y,
$width,
$height,
$radius,
'1111', // ← round all 4 corners (default)
'D'
);
}
break;
}
}
$pdfContent = $pdf->Output('', 'S'); // 'S' returns string
// Encode as base64
return base64_encode($pdfContent);
// // return $pdf->Output('sticker.pdf', 'S');
// $pdfContent = $pdf->Output('sticker.pdf', 'S');
// return (new Response($pdfContent, 200))
// ->header('Content-Type', 'application/pdf')
// ->header('Content-Disposition', 'inline; filename="sticker.pdf"');
}
public function generate1(string $stickerId, Collection $dynamicElements, ?ItemCharacteristic $itemCharacteristic)
{
$dynamicValueMap = [];
foreach ($dynamicElements as $element) {
$column = $element->characteristics_type;
$value = '';
if (
$itemCharacteristic &&
$column &&
Schema::hasColumn('item_characteristics', $column)
) {
$value = $itemCharacteristic->{$column};
}
$dynamicValueMap[$element->id] = [
'design_type' => $element->design_element_type, // Text / Image
'value' => $value,
];
}
$structure = StickerStructureDetail::where('sticker_id', $stickerId)
->first();
$structureId = $structure->id;
$elements = StickerDetail::where(
'sticker_structure_detail_id',
$structureId
)->get();
$width = (float) $structure->sticker_width;
$height = (float) $structure->sticker_height;
$pdf = new TCPDF('P', 'mm', [$width, $height], true, 'UTF-8', false);
// $pdf->SetMargins(
// (float) $structure->sticker_lmargin,
// (float) $structure->sticker_tmargin,
// (float) $structure->sticker_rmargin,
// );
// //$pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
// $pdf->setCellPaddings(0, 0, 0, 0);
// $pdf->setCellMargins(5, 5, 5, 5);
// Set margins
// $pdf->SetMargins(5, 5, 5); // left, top, right
$pdf->SetMargins(
(float) $structure->sticker_lmargin,
(float) $structure->sticker_tmargin,
(float) $structure->sticker_rmargin,
);
$pdf->SetAutoPageBreak(false, 0);
$pdf->AddPage();
$pdf->SetFont('helvetica', 'B', 10);
foreach ($elements as $row) {
switch ($row->design_element_type) {
case 'Text':
$pdf->SetFont(
$row->string_font ?? 'helvetica',
'',
(int) ($row->string_size ?? 10)
);
$pdf->SetTextColor(
...$this->hexToRgb($row->element_colour ?? '#000000')
);
$textValue = $row->string_value ?? '';
if (
$row->element_type == 'Dynamic' &&
isset($dynamicValueMap[$row->id])
) {
$textValue = $dynamicValueMap[$row->id]['value'];
}
$pdf->Text(
(float) ($row->string_x_value ?? 0),
(float) ($row->string_y_value ?? 0),
(string) $textValue
);
break;
case 'QR':
$pdf->write2DBarcode(
$row->qr_value ?? '',
'QRCODE,H',
(float) ($row->qr_x_value ?? 0),
(float) ($row->qr_y_value ?? 0),
(float) ($row->qr_size ?? 10),
(float) ($row->qr_size ?? 10)
);
break;
case 'Image':
$imagePath = null;
if (
$row->element_type == 'Dynamic' &&
isset($dynamicValueMap[$row->id]) &&
! empty($dynamicValueMap[$row->id]['value'])
) {
$imageName = strtolower($dynamicValueMap[$row->id]['value']).'.png';
$imagePath = public_path('images/'.ltrim($imageName, '/'));
}
$pdf->Image(
$imagePath,
(float) ($row->image_x ?? 0),
(float) ($row->image_y ?? 0),
(float) ($row->image_width ?? 0),
(float) ($row->image_height ?? 0)
);
break;
case 'Shape':
if ($row->shape_name == 'Line') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$pdf->Line(
(float) $row->shape_x1_value,
(float) $row->shape_y1_value,
(float) $row->shape_x2_value,
(float) $row->shape_y2_value
);
} elseif ($row->shape_name == 'Rectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
$pdf->Rect($x, $y, $width, $height, 'D');
} elseif ($row->shape_name == 'CurvedRectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
// radius in mm
// $radius = 3;
$radius = (float) $row->curve_radius;
$pdf->RoundedRect(
$x,
$y,
$width,
$height,
$radius,
'1111', // ← round all 4 corners (default)
'D'
);
}
break;
}
}
// return $pdf->Output('sticker.pdf', 'S');
$pdfContent = $pdf->Output('', 'S'); // 'S' returns string
// Encode as base64
return base64_encode($pdfContent);
}
public function generate(string $stickerId, array $elements)
{
$structure = StickerStructureDetail::where('sticker_id', $stickerId)
->first();
// $stickerId = $structure->sticker_id;
// $elements = StickerDetail::where('sticker_structure_detail_id', $stickerId)->get();
// dd($elements);
$structureId = $structure->id;
$elements = StickerDetail::where(
'sticker_structure_detail_id',
$structureId
)->get();
$width = (float) $structure->sticker_width;
$height = (float) $structure->sticker_height;
$pdf = new TCPDF('P', 'mm', [$width, $height], true, 'UTF-8', false);
// $pdf->SetMargins(
// (float) $structure->sticker_lmargin,
// (float) $structure->sticker_tmargin,
// (float) $structure->sticker_rmargin,
// );
// //$pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
// $pdf->setCellPaddings(0, 0, 0, 0);
$pdf->setCellMargins(5, 5, 5, 5);
// Set margins
$pdf->SetMargins(5, 5, 5); // left, top, right
// $pdf->SetAutoPageBreak(false, 0); // bottom = 0
$pdf->SetMargins(
(float) $structure->sticker_lmargin,
(float) $structure->sticker_tmargin,
(float) $structure->sticker_rmargin,
(float) $structure->sticker_bmargin,
);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// dd($pdf->getMargins());
$pdf->AddPage();
$pdf->SetFont('helvetica', 'B', 10); // font, style, size in points
// // 📍 ADD TEXT: 3mm from left, 10mm from top
// $pdf->Text(3, 10, 'Sticker ID: ' . $stickerId);
// // Optional: add more text
// $pdf->SetFont('helvetica', '', 8);
// $pdf->Text(45, 45, 'Batch: X1');
// $pdf->Text(3, 20, '✓ Valid');
foreach ($elements as $row) {
switch ($row->design_element_type) {
case 'Text':
$pdf->SetFont(
$row->string_font ?? 'helvetica',
'',
(int) ($row->string_size ?? 10)
);
$pdf->SetTextColor(...$this->hexToRgb($row->element_colour ?? '#000000'));
$pdf->Text(
(float) ($row->string_x_value ?? 0),
(float) ($row->string_y_value ?? 0),
$row->string_value ?? ''
);
break;
case 'QR':
$pdf->write2DBarcode(
$row->qr_value ?? '',
'QRCODE,H',
(float) ($row->qr_x_value ?? 0),
(float) ($row->qr_y_value ?? 0),
(float) ($row->qr_size ?? 10),
(float) ($row->qr_size ?? 10)
);
break;
case 'Image':
if (empty($row->image_path)) {
break;
}
$imagePath = storage_path('app/public/'.ltrim($row->image_path, '/'));
// Optional: check if file actually exists (avoid TCPDF crash)
if (! file_exists($imagePath)) {
// Log or skip — or use a placeholder
break;
}
$pdf->Image(
$imagePath,
(float) ($row->image_x ?? 0),
(float) ($row->image_y ?? 0),
(float) ($row->image_width ?? 0),
(float) ($row->image_height ?? 0)
);
break;
case 'Shape':
if ($row->shape_name == 'Line') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$pdf->Line(
(float) $row->shape_x1_value,
(float) $row->shape_y1_value,
(float) $row->shape_x2_value,
(float) $row->shape_y2_value
);
} elseif ($row->shape_name == 'Rectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
$pdf->Rect($x, $y, $width, $height, 'D');
}
break;
}
}
// return $pdf->Output('sticker.pdf', 'S');
$pdfContent = $pdf->Output('sticker.pdf', 'S');
return (new Response($pdfContent, 200))
->header('Content-Type', 'application/pdf')
->header('Content-Disposition', 'inline; filename="sticker.pdf"');
}
public function generateSticker(string $stickerId, array $elements)
{
$structure = StickerStructureDetail::where('sticker_id', $stickerId)
->first();
// $stickerId = $structure->sticker_id;
// $elements = StickerDetail::where('sticker_structure_detail_id', $stickerId)->get();
// dd($elements);
$structureId = $structure->id;
$elements = StickerDetail::where(
'sticker_structure_detail_id',
$structureId
)->get();
$width = (float) $structure->sticker_width;
$height = (float) $structure->sticker_height;
$pdf = new TCPDF('P', 'mm', [$width, $height], true, 'UTF-8', false);
// $pdf->SetMargins(
// (float) $structure->sticker_lmargin,
// (float) $structure->sticker_tmargin,
// (float) $structure->sticker_rmargin,
// );
// //$pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
// $pdf->setCellPaddings(0, 0, 0, 0);
$pdf->setCellMargins(5, 5, 5, 5);
// Set margins
$pdf->SetMargins(5, 5, 5); // left, top, right
// $pdf->SetAutoPageBreak(false, 0); // bottom = 0
$pdf->SetMargins(
(float) $structure->sticker_lmargin,
(float) $structure->sticker_tmargin,
(float) $structure->sticker_rmargin,
(float) $structure->sticker_bmargin,
);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// $pdf->SetAutoPageBreak(false, (float) $structure->sticker_bmargin);
// dd($pdf->getMargins());
$pdf->AddPage();
$pdf->SetFont('helvetica', 'B', 10); // font, style, size in points
// // 📍 ADD TEXT: 3mm from left, 10mm from top
// $pdf->Text(3, 10, 'Sticker ID: ' . $stickerId);
// // Optional: add more text
// $pdf->SetFont('helvetica', '', 8);
// $pdf->Text(45, 45, 'Batch: X1');
// $pdf->Text(3, 20, '✓ Valid');
foreach ($elements as $row) {
switch ($row->design_element_type) {
case 'Text':
$pdf->SetFont(
$row->string_font ?? 'helvetica',
'',
(int) ($row->string_size ?? 10)
);
$pdf->SetTextColor(...$this->hexToRgb($row->element_colour ?? '#000000'));
$pdf->Text(
(float) ($row->string_x_value ?? 0),
(float) ($row->string_y_value ?? 0),
$row->string_value ?? ''
);
break;
case 'QR':
$pdf->write2DBarcode(
$row->qr_value ?? '',
'QRCODE,H',
(float) ($row->qr_x_value ?? 0),
(float) ($row->qr_y_value ?? 0),
(float) ($row->qr_size ?? 10),
(float) ($row->qr_size ?? 10)
);
break;
case 'Image':
if (empty($row->image_path)) {
break;
}
$imagePath = storage_path('app/public/'.ltrim($row->image_path, '/'));
// Optional: check if file actually exists (avoid TCPDF crash)
if (! file_exists($imagePath)) {
// Log or skip — or use a placeholder
break;
}
$pdf->Image(
$imagePath,
(float) ($row->image_x ?? 0),
(float) ($row->image_y ?? 0),
(float) ($row->image_width ?? 0),
(float) ($row->image_height ?? 0)
);
break;
case 'Shape':
if ($row->shape_name == 'Line') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$pdf->Line(
(float) $row->shape_x1_value,
(float) $row->shape_y1_value,
(float) $row->shape_x2_value,
(float) $row->shape_y2_value
);
} elseif ($row->shape_name == 'Rectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
$pdf->Rect($x, $y, $width, $height, 'D');
}
break;
}
}
$pdfContent = $pdf->Output('', 'S'); // 'S' returns string
// Encode as base64
return base64_encode($pdfContent);
// // return $pdf->Output('sticker.pdf', 'S');
// $pdfContent = $pdf->Output('sticker.pdf', 'S');
// return (new Response($pdfContent, 200))
// ->header('Content-Type', 'application/pdf')
// ->header('Content-Disposition', 'inline; filename="sticker.pdf"');
}
public function generatePdf1(string $stickerId, Collection $dynamicElements, ?ItemCharacteristic $itemCharacteristic, ?string $serialNumber, $serNo)
{
$dynamicValueMap = [];
$itemCode = $itemCharacteristic?->item?->code ?? '';
foreach ($dynamicElements as $element) {
$column = $element->characteristics_type;
$value = '';
if (
$itemCharacteristic &&
$column &&
Schema::hasColumn('item_characteristics', $column)
) {
$value = $itemCharacteristic->{$column};
}
$dynamicValueMap[$element->id] = [
'design_type' => $element->design_element_type, // Text / Image
'value' => $value,
];
}
$structure = StickerStructureDetail::where('sticker_id', $stickerId)
->first();
$structureId = $structure->id;
$elements = StickerDetail::where(
'sticker_structure_detail_id',
$structureId
)->get();
$width = (float) $structure->sticker_width;
$height = (float) $structure->sticker_height;
$pdf = new TCPDF('P', 'mm', [$width, $height], true, 'UTF-8', false);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetMargins(
(float) $structure->sticker_lmargin,
(float) $structure->sticker_tmargin,
(float) $structure->sticker_rmargin,
(float) $structure->sticker_bmargin,
);
$pdf->SetAutoPageBreak(false, 0);
$pdf->AddPage();
// if (!empty($serialNumber)) {
// $pdf->SetFont('helvetica', 'B', 10);
// $pdf->SetTextColor(0, 0, 0);
// // HARD-CODED POSITION (mm)
// $x = 40; // change as needed
// $y = 60; // change as needed
// $pdf->Text($x, $y, (string) $serialNumber);
// }
$pdf->SetFont('helvetica', 'B', 10);
foreach ($elements as $row) {
switch ($row->design_element_type) {
case 'Text':
$pdf->SetFont(
$row->string_font ?? 'helvetica',
'',
(int) ($row->string_size ?? 10)
);
$pdf->SetTextColor(
...$this->hexToRgb($row->element_colour ?? '#000000')
);
$textValue = $row->string_value ?? '';
if (
$row->element_type == 'Dynamic' &&
isset($dynamicValueMap[$row->id])
) {
$textValue = $dynamicValueMap[$row->id]['value'];
}
$pdf->Text(
(float) ($row->string_x_value ?? 0),
(float) ($row->string_y_value ?? 0),
(string) $textValue
);
break;
case 'QR':
if (
($row->element_type) == 'Dynamic'
) {
$qrContent = $serNo ?? '';
$pdf->write2DBarcode(
$qrContent,
'QRCODE,H',
(float) ($row->qr_x_value ?? 0),
(float) ($row->qr_y_value ?? 0),
(float) ($row->qr_size ?? 10),
(float) ($row->qr_size ?? 10)
);
break;
}
else{
$pdf->write2DBarcode(
$row->qr_value ?? '',
'QRCODE,H',
(float) ($row->qr_x_value ?? 0),
(float) ($row->qr_y_value ?? 0),
(float) ($row->qr_size ?? 10),
(float) ($row->qr_size ?? 10)
);
break;
}
case 'Image':
$imagePath = null;
if (
$row->element_type == 'Dynamic' &&
isset($dynamicValueMap[$row->id]) &&
! empty($dynamicValueMap[$row->id]['value'])
) {
$imageName = strtolower($dynamicValueMap[$row->id]['value']).'.png';
$imagePath = public_path('images/'.ltrim($imageName, '/'));
}
$pdf->Image(
$imagePath,
(float) ($row->image_x ?? 0),
(float) ($row->image_y ?? 0),
(float) ($row->image_width ?? 0),
(float) ($row->image_height ?? 0)
);
break;
case 'Shape':
if ($row->shape_name == 'Line') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$pdf->Line(
(float) $row->shape_x1_value,
(float) $row->shape_y1_value,
(float) $row->shape_x2_value,
(float) $row->shape_y2_value
);
} elseif ($row->shape_name == 'Rectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
$pdf->Rect($x, $y, $width, $height, 'D');
} elseif ($row->shape_name == 'CurvedRectangle') {
$pdf->SetLineWidth((float) ($row->shape_pen_size ?? 0.3));
if (isset($row->element_colour)) {
$rgb = $this->hexToRgb($row->element_colour);
$pdf->SetDrawColor($rgb[0], $rgb[1], $rgb[2]);
} else {
$pdf->SetDrawColor(0, 0, 0);
}
$x1 = (float) $row->shape_x1_value;
$y1 = (float) $row->shape_y1_value;
$x2 = (float) $row->shape_x2_value;
$y2 = (float) $row->shape_y2_value;
$x = min($x1, $x2);
$y = min($y1, $y2);
$width = abs($x2 - $x1);
$height = abs($y2 - $y1);
// radius in mm
// $radius = 3;
$radius = (float) $row->curve_radius;
$pdf->RoundedRect(
$x,
$y,
$width,
$height,
$radius,
'1111', // ← round all 4 corners (default)
'D'
);
}
break;
}
}
// $pdfContent = $pdf->Output('', 'S'); // 'S' returns string
// // Encode as base64
// return base64_encode($pdfContent);
// $pdfContent = $pdf->Output('', 'S');
// return response($pdfContent)
// ->header('Content-Type', 'application/pdf')
// ->header('Content-Disposition', 'inline; filename="sticker.pdf"');
$pdfContent = $pdf->Output('', 'S'); // 'S' returns the PDF as a string
// Return the PDF as a response
try {
$pdfContent = $pdf->Output('', 'S'); // 'S' returns the PDF as a string
return response($pdfContent)
->header('Content-Type', 'application/pdf')
->header('Content-Disposition', 'inline; filename="sticker.pdf"');
} catch (\Exception $e) {
Log::error('PDF generation failed: '.$e->getMessage());
abort(500, 'Failed to generate PDF');
}
}
public function generatePdfBySerial($item, $serNo, $plantId, $refNumber)
{
$recFound = ProductionQuantity::where('plant_id', $plantId)
->where('production_order', $refNumber)
->where('serial_number', $serNo)
->first();
if (!$recFound) {
abort(404, 'Serial not found');
}
$duplicate = StickerValidation::where('plant_id', $plantId)
->where('production_order', $refNumber)
->where('serial_number', $serNo)
->first();
$itemC = Item::where('code', $item)
->where('plant_id', $plantId)
->first();
if (!$itemC) {
abort(404, 'Item not found');
}
$item = ItemCharacteristic::where('item_id', $itemC->id)
->where('plant_id', $plantId)
->first();
if (!$item) {
abort(404, 'Item characteristic not found');
}
$mapping = StickerMappingMaster::where('plant_id', $plantId)
->where('item_characteristic_id', $item->id)
->first();
if (!$mapping) {
abort(404, 'Sticker mapping not found');
}
$structure = StickerStructureDetail::findOrFail($mapping->sticker_structure1_id);
$dynamicElements = StickerDetail::where(
'sticker_structure_detail_id',
$structure->id
)->where('element_type', 'Dynamic')->get();
return $this->generatePdf1(
$structure->sticker_id,
$dynamicElements,
$item,
$serNo,
$serNo
);
// return response($pdf)
// ->header('Content-Type', 'application/pdf')
// ->header('Content-Disposition', 'inline; filename="sticker.pdf"');
}
// public function printStickersToUSB(array $stickers, int $plantId, ?string $serialNumber)
// {
// $printerPort = 'USB001';
// foreach ($stickers as $sticker) {
// $dynamicElements = StickerDetail::where('sticker_structure_detail_id', $sticker['sticker_id'])
// ->get();
// $itemCharacteristic = ItemCharacteristic::find(
// $sticker['item_characteristic']
// );
// $pdfContent = $this->generatePdf1(
// $sticker['sticker_id'],
// $dynamicElements,
// $itemCharacteristic,
// $serialNumber
// );
// $handle = fopen("{$printerPort}:", "wb");
// if (! $handle) {
// throw new \Exception("Cannot open printer port {$printerPort}");
// }
// fwrite($handle, $pdfContent);
// fclose($handle);
// }
// }
// private function hexToRgb($hex)
// {
// $hex = ltrim($hex, '#');
// return [
// hexdec(substr($hex, 0, 2)),
// hexdec(substr($hex, 2, 2)),
// hexdec(substr($hex, 4, 2)),
// ];
// }
private function hexToRgb($hex)
{
if (! is_string($hex) || ($hex = trim($hex)) === '') {
return [0, 0, 0];
}
$hex = ltrim($hex, '#');
if (strlen($hex) == 3) {
$hex = $hex[0].$hex[0].$hex[1].$hex[1].$hex[2].$hex[2];
}
if (strlen($hex) !== 6 || ! ctype_xdigit($hex)) {
return [0, 0, 0];
}
return [
hexdec(substr($hex, 0, 2)), // integer
hexdec(substr($hex, 2, 2)), // integer
hexdec(substr($hex, 4, 2)), // integer
];
}
}