diff --git a/app/Entities/Tools/ExportFormatter.php b/app/Entities/Tools/ExportFormatter.php index 7f377cadb..f993d332d 100644 --- a/app/Entities/Tools/ExportFormatter.php +++ b/app/Entities/Tools/ExportFormatter.php @@ -92,6 +92,7 @@ class ExportFormatter $html = view('pages.export', [ 'page' => $page, 'format' => 'pdf', + 'engine' => $this->pdfGenerator->getActiveEngine(), ])->render(); return $this->htmlToPdf($html); @@ -113,6 +114,7 @@ class ExportFormatter 'chapter' => $chapter, 'pages' => $pages, 'format' => 'pdf', + 'engine' => $this->pdfGenerator->getActiveEngine(), ])->render(); return $this->htmlToPdf($html); @@ -130,6 +132,7 @@ class ExportFormatter 'book' => $book, 'bookChildren' => $bookTree, 'format' => 'pdf', + 'engine' => $this->pdfGenerator->getActiveEngine(), ])->render(); return $this->htmlToPdf($html); diff --git a/app/Entities/Tools/PdfGenerator.php b/app/Entities/Tools/PdfGenerator.php index a14f29d4b..c2e8f3d4c 100644 --- a/app/Entities/Tools/PdfGenerator.php +++ b/app/Entities/Tools/PdfGenerator.php @@ -7,14 +7,15 @@ use Barryvdh\Snappy\Facades\SnappyPdf; class PdfGenerator { + const ENGINE_DOMPDF = 'dompdf'; + const ENGINE_WKHTML = 'wkhtml'; + /** * Generate PDF content from the given HTML content. */ public function fromHtml(string $html): string { - $useWKHTML = config('snappy.pdf.binary') !== false && config('app.allow_untrusted_server_fetching') === true; - - if ($useWKHTML) { + if ($this->getActiveEngine() === self::ENGINE_WKHTML) { $pdf = SnappyPDF::loadHTML($html); $pdf->setOption('print-media-type', true); } else { @@ -23,4 +24,14 @@ class PdfGenerator return $pdf->output(); } + + /** + * Get the currently active PDF engine. + * Returns the value of an `ENGINE_` const on this class. + */ + public function getActiveEngine(): string + { + $useWKHTML = config('snappy.pdf.binary') !== false && config('app.allow_untrusted_server_fetching') === true; + return $useWKHTML ? self::ENGINE_WKHTML : self::ENGINE_DOMPDF; + } } diff --git a/resources/views/common/export-styles.blade.php b/resources/views/common/export-styles.blade.php index ae26613b1..ee10637dd 100644 --- a/resources/views/common/export-styles.blade.php +++ b/resources/views/common/export-styles.blade.php @@ -47,8 +47,15 @@ display: block; } + @if($engine === \BookStack\Entities\Tools\PdfGenerator::ENGINE_DOMPDF) + {{-- Fix for full width linked image sizes on DOMPDF --}} .page-content a > img { - max-width: none; + max-width: 700px; } + {{-- Undoes the above for table images to prevent visually worse scenario, Awaiting next DOMPDF release for patch --}} + .page-content td a > img { + max-width: 100%; + } + @endif </style> @endif \ No newline at end of file diff --git a/resources/views/layouts/export.blade.php b/resources/views/layouts/export.blade.php index 55df43a45..a951e262d 100644 --- a/resources/views/layouts/export.blade.php +++ b/resources/views/layouts/export.blade.php @@ -4,7 +4,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>@yield('title')</title> - @include('common.export-styles', ['format' => $format]) + @include('common.export-styles', ['format' => $format, 'engine' => $engine ?? '']) @include('common.export-custom-head') </head> <body>