]> BookStack Code Mirror - bookstack/blobdiff - app/Entities/Tools/PdfGenerator.php
PDF: Removed barryvdh snappy to use snappy direct
[bookstack] / app / Entities / Tools / PdfGenerator.php
index 7502c10ff43243488c01e7cea82028def07c740f..e187b9ab2c4e50d892c40de70588c54586082939 100644 (file)
@@ -2,7 +2,7 @@
 
 namespace BookStack\Entities\Tools;
 
-use Barryvdh\Snappy\Facades\SnappyPdf;
+use Knp\Snappy\Pdf as SnappyPdf;
 use Dompdf\Dompdf;
 
 class PdfGenerator
@@ -19,9 +19,7 @@ class PdfGenerator
         $engine = $this->getActiveEngine();
 
         if ($engine === self::ENGINE_WKHTML) {
-            $pdf = SnappyPDF::loadHTML($html);
-            $pdf->setOption('print-media-type', true);
-            return $pdf->output();
+            return $this->renderUsingWkhtml($html);
         } else if ($engine === self::ENGINE_COMMAND) {
             // TODO - Support PDF command
             return '';
@@ -36,18 +34,23 @@ class PdfGenerator
      */
     public function getActiveEngine(): string
     {
-        $wkhtmlBinaryPath = config('snappy.pdf.binary');
-        if (file_exists(base_path('wkhtmltopdf'))) {
-            $wkhtmlBinaryPath = base_path('wkhtmltopdf');
-        }
-
-        if (is_string($wkhtmlBinaryPath) && config('app.allow_untrusted_server_fetching') === true) {
+        if ($this->getWkhtmlBinaryPath() && config('app.allow_untrusted_server_fetching') === true) {
             return self::ENGINE_WKHTML;
         }
 
         return self::ENGINE_DOMPDF;
     }
 
+    protected function getWkhtmlBinaryPath(): string
+    {
+        $wkhtmlBinaryPath = config('exports.snappy.pdf_binary');
+        if (file_exists(base_path('wkhtmltopdf'))) {
+            $wkhtmlBinaryPath = base_path('wkhtmltopdf');
+        }
+
+        return $wkhtmlBinaryPath ?: '';
+    }
+
     protected function renderUsingDomPdf(string $html): string
     {
         $options = config('exports.dompdf');
@@ -60,6 +63,13 @@ class PdfGenerator
         return (string) $domPdf->output();
     }
 
+    protected function renderUsingWkhtml(string $html): string
+    {
+        $snappy = new SnappyPdf($this->getWkhtmlBinaryPath());
+        $options = config('exports.snappy.options');
+        return $snappy->getOutputFromHtml($html, $options);
+    }
+
     /**
      * Taken from https://github.com/barryvdh/laravel-dompdf/blob/v2.1.1/src/PDF.php
      * Copyright (c) 2021 barryvdh, MIT License