Files
webstatement/app/Jobs/ConvertHtmlToPdfJob.php
Daeng Deni Mardaeni 173b229f07 feat(webstatement): tambahkan pengaturan ukuran kertas A4 pada konversi HTML ke PDF
- Menambahkan pengaturan ukuran kertas A4 pada proses konversi HTML ke PDF di `ConvertHtmlToPdfJob`:
  - Menggunakan metode `setPaper('A4', 'portrait')` untuk menetapkan standar ukuran dan orientasi kertas.
- Memperbarui log proses konversi agar mencantumkan informasi ukuran kertas yang digunakan.
- Tujuan perubahan ini adalah memastikan tampilan PDF lebih terstandarisasi sesuai kebutuhan dokumen.

Signed-off-by: Daeng Deni Mardaeni <ddeni05@gmail.com>
2025-06-02 19:21:10 +07:00

106 lines
3.0 KiB
PHP

<?php
namespace Modules\Webstatement\Jobs;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\File;
use Barryvdh\DomPDF\Facade\Pdf;
class ConvertHtmlToPdfJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $baseDirectory;
/**
* Create a new job instance.
*
* @param string $baseDirectory Base directory path to scan
*/
public function __construct(string $baseDirectory)
{
$this->baseDirectory = $baseDirectory;
}
/**
* Execute the job.
*/
public function handle(): void
{
try {
Log::info("Starting HTML to PDF conversion in directory: {$this->baseDirectory}");
// Check if directory exists
if (!File::isDirectory($this->baseDirectory)) {
Log::error("Directory not found: {$this->baseDirectory}");
return;
}
// Get all subdirectories (ID folders)
$idDirectories = File::directories($this->baseDirectory);
foreach ($idDirectories as $idDirectory) {
$this->processDirectory($idDirectory);
}
Log::info("HTML to PDF conversion completed successfully.");
} catch (Exception $e) {
Log::error("Error converting HTML to PDF: " . $e->getMessage());
}
}
/**
* Process a single ID directory
*
* @param string $directory Directory path to process
*/
protected function processDirectory(string $directory): void
{
try {
$htmlFiles = File::glob($directory . '/*.html');
foreach ($htmlFiles as $htmlFile) {
$this->convertHtmlToPdf($htmlFile);
}
} catch (Exception $e) {
Log::error("Error processing directory {$directory}: " . $e->getMessage());
}
}
/**
* Convert a single HTML file to PDF
*
* @param string $htmlFilePath Path to HTML file
*/
protected function convertHtmlToPdf(string $htmlFilePath): void
{
try {
$filename = pathinfo($htmlFilePath, PATHINFO_FILENAME);
$directory = pathinfo($htmlFilePath, PATHINFO_DIRNAME);
$pdfFilePath = $directory . '/' . $filename . '.pdf';
// Read HTML content
$htmlContent = File::get($htmlFilePath);
// Convert HTML to PDF with A4 size
$pdf = PDF::loadHTML($htmlContent);
// Set paper size to A4
$pdf->setPaper('A4', 'portrait');
// Save PDF file
$pdf->save($pdfFilePath);
Log::info("Converted {$htmlFilePath} to {$pdfFilePath} with A4 size");
} catch (Exception $e) {
Log::error("Error converting {$htmlFilePath} to PDF: " . $e->getMessage());
}
}
}