Merge pull request 'Added Sticker pdf service logic for dynamic values' (#46) from ranjith-dev into master
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Some checks failed
Scan for leaked secrets using Kingfisher / kingfisher-secrets-scan (push) Has been cancelled
Reviewed-on: #46
This commit was merged in pull request #46.
This commit is contained in:
@@ -2,17 +2,240 @@
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\ItemCharacteristic;
|
||||
use App\Models\StickerDetail;
|
||||
use App\Models\StickerStructureDetail;
|
||||
use Illuminate\Support\Collection;
|
||||
use TCPDF;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class StickerPdfService
|
||||
{
|
||||
public function generate(string $stickerId, array $elements)
|
||||
|
||||
public function generate1(string $stickerId, Collection $dynamicElements, ?ItemCharacteristic $itemCharacteristic)
|
||||
{
|
||||
|
||||
// $dynamicValueMap = [];
|
||||
|
||||
// foreach ($dynamicElements as $element) {
|
||||
|
||||
// $column = $element->characteristics_type;
|
||||
|
||||
// if (
|
||||
// $itemCharacteristic &&
|
||||
// $column &&
|
||||
// Schema::hasColumn('item_characteristics', $column)
|
||||
// ) {
|
||||
// $dynamicValueMap[$element->id] = $itemCharacteristic->{$column};
|
||||
// } else {
|
||||
// $dynamicValueMap[$element->id] = '';
|
||||
// }
|
||||
// }
|
||||
$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,
|
||||
(float) $structure->sticker_bmargin,
|
||||
);
|
||||
|
||||
$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 = storage_path('app/public/' . ltrim($imageName, '/'));
|
||||
|
||||
// $imagePath = storage_path(
|
||||
// 'app/public/' . $imageName
|
||||
// );
|
||||
|
||||
// $imagePath = storage_path(
|
||||
// 'app/public/images/' . ltrim(strtolower($dynamicValueMap[$row->id]['value'])) . '.png'
|
||||
// );
|
||||
|
||||
//dd($imagePath);
|
||||
}
|
||||
|
||||
$pdf->Image(
|
||||
$imagePath,
|
||||
(float) ($row->image_x ?? 0),
|
||||
(float) ($row->image_y ?? 0),
|
||||
(float) ($row->image_width ?? 0),
|
||||
(float) ($row->image_height ?? 0)
|
||||
);
|
||||
|
||||
// $pdf->Image(
|
||||
// '/home/iot-dev/projects/qds/storage/app/public/images/cri.png',
|
||||
// 10, 10, 50, 50
|
||||
// );
|
||||
|
||||
|
||||
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 generate(string $stickerId, array $elements)
|
||||
{
|
||||
$structure = StickerStructureDetail::where('sticker_id', $stickerId)
|
||||
->first();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user