$html = view('pages.export', [
'page' => $page,
'format' => 'pdf',
+ 'engine' => $this->pdfGenerator->getActiveEngine(),
])->render();
return $this->htmlToPdf($html);
'chapter' => $chapter,
'pages' => $pages,
'format' => 'pdf',
+ 'engine' => $this->pdfGenerator->getActiveEngine(),
])->render();
return $this->htmlToPdf($html);
'book' => $book,
'bookChildren' => $bookTree,
'format' => 'pdf',
+ 'engine' => $this->pdfGenerator->getActiveEngine(),
])->render();
return $this->htmlToPdf($html);
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 {
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;
+ }
}
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
<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>