From 8b5747eae2f5aaeb8c0ac07a4f9e883de8c53470 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 24 Jan 2022 17:24:00 +0000 Subject: [PATCH] Further adjusted linked image sizes on PDF export Further fixes for #3120, Adds DOMPDF specific adjustments to prevent full width linked images being cut-off as per last tweak. This does not fix usage in smaller cases (tables) but tested on master DOMPDF branch shows that will likely be fixed in next DOMPDF upstream release. DOMPDF fixes would break WKHTMLTOPDF presentation so system updated to conditionally apply styles. --- app/Entities/Tools/ExportFormatter.php | 3 +++ app/Entities/Tools/PdfGenerator.php | 17 ++++++++++++++--- resources/views/common/export-styles.blade.php | 9 ++++++++- resources/views/layouts/export.blade.php | 2 +- 4 files changed, 26 insertions(+), 5 deletions(-) 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 @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 @@ @yield('title') - @include('common.export-styles', ['format' => $format]) + @include('common.export-styles', ['format' => $format, 'engine' => $engine ?? '']) @include('common.export-custom-head')