From 2fc1fb73b7e7a96af127845739b2c82811c2e07c Mon Sep 17 00:00:00 2001 From: dhanabalan Date: Mon, 22 Dec 2025 17:27:38 +0530 Subject: [PATCH] Added sticker pdf service file --- app/Services/StickerPdfService.php | 181 +++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 app/Services/StickerPdfService.php diff --git a/app/Services/StickerPdfService.php b/app/Services/StickerPdfService.php new file mode 100644 index 0000000..06b2816 --- /dev/null +++ b/app/Services/StickerPdfService.php @@ -0,0 +1,181 @@ +first(); + + $stickerId = $structure->sticker_id; + + $elements = StickerDetail::where('sticker_structure_detail_id', $stickerId)->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"'); + } + + private function hexToRgb($hex) + { + $hex = ltrim($hex, '#'); + return [ + hexdec(substr($hex, 0, 2)), + hexdec(substr($hex, 2, 2)), + hexdec(substr($hex, 4, 2)), + ]; + } +}