Files
citrus-cms/app/Services/RegisterCreator/PdfConverter.php
T
2026-04-28 21:14:25 +03:00

99 lines
3.1 KiB
PHP

<?php
namespace App\Services\RegisterCreator;
use Illuminate\Support\Facades\Log;
use Exception;
class PdfConverter
{
/**
* Convert Excel to PDF using xlsx_to_pdf_legacy helper
*/
public function convert(string $excelPath, string $pdfPath, bool $override = true): string
{
$fullExcelPath = storage_path('documents/' . $excelPath);
$fullPdfPath = storage_path('documents/' . $pdfPath);
if (!file_exists($fullExcelPath)) {
throw new Exception("Excel file not found: {$fullExcelPath}");
}
// Prepare PDF filename
$pdfFileName = rtrim($fullPdfPath, '/') . 'Register.pdf';
// Check override setting
if (!$override && file_exists($pdfFileName)) {
$pdfFileName = $this->generateUniquePdfFilename($pdfFileName);
$pdfPath = str_replace(storage_path('documents/'), '', dirname($pdfFileName)) . '/';
Log::debug('PDF exists and override is false, using unique name', [
'path' => $pdfFileName
]);
}
Log::debug('Converting Excel to PDF', [
'excel' => $fullExcelPath,
'pdf_dir' => $fullPdfPath
]);
try {
// Use existing helper function
$result = xlsx_to_pdf_legacy($fullExcelPath, $fullPdfPath);
if (!$result) {
throw new Exception("PDF conversion failed");
}
// Fix file permissions if PDF was created
if (file_exists($pdfFileName)) {
try {
// Change owner to www-data for web access
chown($pdfFileName, 'www-data');
chgrp($pdfFileName, 'www-data');
chmod($pdfFileName, 0644);
} catch (\Throwable $th) {
Log::warning('Could not change PDF file permissions', [
'file' => $pdfFileName,
'error' => $th->getMessage()
]);
}
}
Log::debug('PDF conversion successful', [
'pdf_file' => $pdfFileName,
'exists' => file_exists($pdfFileName)
]);
return $pdfPath;
} catch (\Throwable $th) {
Log::error('PDF conversion error', [
'error' => $th->getMessage(),
'excel' => $fullExcelPath,
'pdf_dir' => $fullPdfPath
]);
throw $th;
}
}
/**
* Generate unique PDF filename if file exists
*/
private function generateUniquePdfFilename(string $filePath): string
{
$counter = 1;
$pathInfo = pathinfo($filePath);
do {
$newFileName = $pathInfo['dirname'] . '/' .
$pathInfo['filename'] . '_' . $counter . '.' .
$pathInfo['extension'];
$counter++;
} while (file_exists($newFileName));
return $newFileName;
}
}