add more controller
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Reports;
|
||||
|
||||
use Dompdf\Dompdf;
|
||||
use Dompdf\Options;
|
||||
|
||||
class SlipPrinterPdfService
|
||||
{
|
||||
public function __construct(private SlipPrinterConfigService $configService)
|
||||
{
|
||||
}
|
||||
|
||||
public function render(array $data, array $lines, array $options = []): array
|
||||
{
|
||||
$paper = strtolower((string) ($options['paper'] ?? $this->configService->printerConfig()['paper'] ?? 'card'));
|
||||
$fontPt = (float) ($options['font_pt'] ?? env('SLIP_FONT_PT', 13.0));
|
||||
$lineH = (float) ($options['line_h'] ?? env('SLIP_LINE_H', 2.0));
|
||||
$linesCount = (int) ($options['rows'] ?? count($lines));
|
||||
if ($linesCount < 1) {
|
||||
$linesCount = count($lines);
|
||||
}
|
||||
|
||||
$ptPerLine = $fontPt * $lineH;
|
||||
$mmPerPt = 25.4 / 72.0;
|
||||
$contentMm = $ptPerLine * $linesCount * $mmPerPt;
|
||||
$pageMarginsMm = 6.0;
|
||||
$fudgeMm = (float) ($options['fudge_mm'] ?? env('SLIP_FUDGE_MM', 12.0));
|
||||
$dynHeightMm = $contentMm + $pageMarginsMm + $fudgeMm;
|
||||
|
||||
switch ($paper) {
|
||||
case 'cardp':
|
||||
case 'card-portrait':
|
||||
$wMm = 53.98;
|
||||
$hMm = max($dynHeightMm, 40.0);
|
||||
break;
|
||||
case 'receipt80':
|
||||
$wMm = 72.0;
|
||||
$hMm = 90.0;
|
||||
break;
|
||||
case 'receipt58':
|
||||
$wMm = 58.0;
|
||||
$hMm = 80.0;
|
||||
break;
|
||||
case 'card':
|
||||
default:
|
||||
$wMm = 85.60;
|
||||
$hMm = max($dynHeightMm, 40.0);
|
||||
}
|
||||
|
||||
$hOverride = $options['height_mm'] ?? $options['h'] ?? null;
|
||||
if (is_numeric($hOverride)) {
|
||||
$hMm = max(30.0, min(200.0, (float) $hOverride));
|
||||
}
|
||||
|
||||
if ($hMm < $dynHeightMm) {
|
||||
$hMm = $dynHeightMm;
|
||||
}
|
||||
|
||||
$html = view('slips/slip_pdf', [
|
||||
'entry' => $data,
|
||||
'lines' => $lines,
|
||||
'page' => ['w_mm' => $wMm, 'h_mm' => $hMm],
|
||||
]);
|
||||
|
||||
$optionsObj = new Options();
|
||||
$optionsObj->set('isRemoteEnabled', true);
|
||||
$optionsObj->set('defaultFont', 'Courier');
|
||||
|
||||
$dompdf = new Dompdf($optionsObj);
|
||||
$dompdf->loadHtml($html, 'UTF-8');
|
||||
|
||||
$mmToPt = 72 / 25.4;
|
||||
$wPt = $wMm * $mmToPt;
|
||||
$hPt = $hMm * $mmToPt;
|
||||
$dompdf->setPaper([0, 0, $wPt, $hPt]);
|
||||
$dompdf->render();
|
||||
|
||||
$filename = 'LateSlip_' . preg_replace('/[^A-Za-z0-9]+/', '_', (string) ($data['student_name'] ?? 'slip')) . '_' . date('Ymd_His') . '.pdf';
|
||||
|
||||
return [
|
||||
'content' => $dompdf->output(),
|
||||
'filename' => $filename,
|
||||
'width_mm' => $wMm,
|
||||
'height_mm' => $hMm,
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user