diff --git a/guides/DEPLOY.md b/docs/DEPLOY.md similarity index 100% rename from guides/DEPLOY.md rename to docs/DEPLOY.md diff --git a/guides/IMPLEMENTATION_GUIDE.md b/docs/IMPLEMENTATION_GUIDE.md similarity index 100% rename from guides/IMPLEMENTATION_GUIDE.md rename to docs/IMPLEMENTATION_GUIDE.md diff --git a/guides/web2print-specs.md b/docs/web2print-specs.md similarity index 100% rename from guides/web2print-specs.md rename to docs/web2print-specs.md diff --git a/src/Controllers/GenerateController.php b/src/Controllers/GenerateController.php index f8ea1da..652c0a7 100644 --- a/src/Controllers/GenerateController.php +++ b/src/Controllers/GenerateController.php @@ -39,18 +39,25 @@ class GenerateController } // Valider les données - if (empty($data['html'])) { - $this->sendError(400, 'HTML content required'); + if (empty($data['url']) && empty($data['html'])) { + $this->sendError(400, 'url or html required'); return; } try { // Générer le PDF - $pdf = $this->generator->generate( - $data['html'], - $data['css'] ?? null, - $data['options'] ?? [] - ); + if (!empty($data['url'])) { + $pdf = $this->generator->generateFromUrl( + $data['url'], + $data['options'] ?? [] + ); + } else { + $pdf = $this->generator->generate( + $data['html'], + $data['css'] ?? null, + $data['options'] ?? [] + ); + } // Retourner le PDF header('Content-Type: application/pdf'); diff --git a/src/Services/PdfGenerator.php b/src/Services/PdfGenerator.php index 12bd1bb..fce4d32 100644 --- a/src/Services/PdfGenerator.php +++ b/src/Services/PdfGenerator.php @@ -47,6 +47,41 @@ class PdfGenerator } } + public function generateFromUrl(string $url, array $options = []): string + { + $pdfFile = tempnam($this->config['tmp_dir'], 'pdf_') . '.pdf'; + + try { + $cmd = escapeshellcmd($this->config['pagedjs_bin']); + $cmd .= ' ' . escapeshellarg($url); + $cmd .= ' -o ' . escapeshellarg($pdfFile); + + if (!empty($options['timeout'])) { + $cmd .= ' --timeout ' . (int)$options['timeout']; + } else { + $cmd .= ' --timeout ' . ($this->config['pagedjs_timeout'] * 1000); + } + + $output = []; + $returnCode = 0; + exec($cmd . ' 2>&1', $output, $returnCode); + + if ($returnCode !== 0) { + $this->log('Paged.js CLI error (URL): ' . implode("\n", $output)); + throw new \Exception('PDF generation failed: ' . implode("\n", $output)); + } + + if (!file_exists($pdfFile)) { + throw new \Exception('PDF file not created'); + } + + return file_get_contents($pdfFile); + + } finally { + @unlink($pdfFile); + } + } + private function createTempFile(string $html, ?string $css): string { $fullHtml = $html;