Request // PDF Export Features #800

Closed
opened 2026-02-04 22:19:17 +03:00 by OVERLORD · 8 comments
Owner

Originally created by @derek-shnosh on GitHub (Aug 29, 2018).

Describe the feature you'd like

Updated 2018.1206 to create a concise list of desired features pertaining to the PDF export function.

  • Print view for the WYSIWYG editor and MD editor preview pane; similar to MS Word's Print Layout (View > Print Layout, or default view). I think this would be better suited as a toggle in the editors because I do not believe that a simple print preview-esque feature would be sufficient as it wouldn't allow dynamic control over breaks.
    • Ability to adjust margins at either a page or global level; e.g. Word has narrow, wide, etc... custom not necessary.
    • Ability to dynamically insert/edit page breaks.
  • Option to set quality of PDF export (currently exports using low quality).
  • ... any others?

Describe the benefits this feature would bring to BookStack users

With the goal of using Bookstack for client project documentation, sometimes hard copies are required for planning meetings/discussions. Having control over page breaks greatly improves printed presentation as it helps avoid content spanning printed pages; e.g. tables, lazyetc.

Additional context

None.

Originally created by @derek-shnosh on GitHub (Aug 29, 2018). **Describe the feature you'd like** Updated 2018.1206 to create a concise list of desired features pertaining to the PDF export function. * Print view for the WYSIWYG editor and MD editor preview pane; similar to MS Word's *Print Layout* (**View > Print Layout**, or default view). I think this would be better suited as a toggle in the editors because I do not believe that a simple _print preview-esque_ feature would be sufficient as it wouldn't allow dynamic control over breaks. * Ability to adjust margins at either a page or global level; e.g. Word has `narrow`, `wide`, etc... `custom` not necessary. * Ability to dynamically insert/edit page breaks. * Option to set quality of PDF export (currently exports using `low quality`). * *... any others?* **Describe the benefits this feature would bring to BookStack users** With the goal of using Bookstack for client project documentation, sometimes hard copies are required for planning meetings/discussions. Having control over page breaks greatly improves printed presentation as it helps avoid content spanning printed pages; e.g. tables, <sup>lazy</sup>etc. **Additional context** None.
OVERLORD added the 🔨 Feature Request label 2026-02-04 22:19:17 +03:00
Author
Owner

@nvnvnvnvn commented on GitHub (Sep 4, 2018):

For pagebreak try this code:

<p style="page-break-before: always">&nbsp;</p>

@nvnvnvnvn commented on GitHub (Sep 4, 2018): For pagebreak try this code: ` <p style="page-break-before: always">&nbsp;</p>`
Author
Owner

@derek-shnosh commented on GitHub (Sep 4, 2018):

While that can be used to specify a page break location, that doesn't give a real-time print view of where the break is on the page based on how it is going to view when exported to PDF or printed.

The best way to further describe the request would be analogous to editing a MS Word doc in View > Print Layout (default view).

@derek-shnosh commented on GitHub (Sep 4, 2018): While that can be used to specify a page break location, that doesn't give a real-time *print* view of where the break is on the page based on how it is going to view when exported to PDF or printed. The best way to further describe the request would be analogous to editing a MS Word doc in **View** > **Print Layout** (default view).
Author
Owner

@derek-shnosh commented on GitHub (Dec 7, 2018):

@ssddanbrown Apologies if the issue title and content update causes confusion but I wanted to have a single issue to place enhancement requests pertaining to PDF export instead of filing them separetly.

@derek-shnosh commented on GitHub (Dec 7, 2018): @ssddanbrown Apologies if the issue title and content update causes confusion but I wanted to have a single issue to place enhancement requests pertaining to PDF export instead of filing them separetly.
Author
Owner

@derek-shnosh commented on GitHub (Dec 7, 2018):

Hmm, @ssddanbrown I found the disable-smart-shrinking option but when I try to add it to bookstack/config/snappy.php I get the following;

InvalidArgumentException
The option '0' does not exist.

Here is my bookstack/config/snappy.php

<?php

return [
    'pdf' => [
        'enabled' => true,
        'binary'  => file_exists(base_path('wkhtmltopdf')) ? base_path('wkhtmltopdf') : env('WKHTMLTOPDF', false),
        'timeout' => false,
        'options' => ['disable-smart-shrinking'],
        'env'     => [],
    ],
    'image' => [
        'enabled' => false,
        'binary'  => '/usr/local/bin/wkhtmltoimage',
        'timeout' => false,
        'options' => [],
        'env'     => [],
    ],
];

I tried enclosing disable-smart-shrinking with {} and () and this did not work either. I'm not an expert here (especially with PHP), so any help would be greatly appreciated.

I am able to use this option via bash.

~$ wkhtmltopdf --disable-smart-shrinking https://www.google.com nosmartshrink.pdf
Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done   

Versions

~$ more /var/www/bookstack/version 
v0.24.2
~$ wkhtmltopdf --version           
wkhtmltopdf 0.12.5 (with patched qt)

Debug

InvalidArgumentException thrown with message "The option '0' does not exist."

Stacktrace:
#83 InvalidArgumentException in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/AbstractGenerator.php:112
#82 Knp\Snappy\AbstractGenerator:setOption in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/AbstractGenerator.php:138
#81 Knp\Snappy\AbstractGenerator:setOptions in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/AbstractGenerator.php:51
#80 Knp\Snappy\AbstractGenerator:__construct in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/Pdf.php:24
#79 Knp\Snappy\Pdf:__construct in /var/www/bookstack/vendor/barryvdh/laravel-snappy/src/IlluminateSnappyPdf.php:15
#78 Barryvdh\Snappy\IlluminateSnappyPdf:__construct in /var/www/bookstack/vendor/barryvdh/laravel-snappy/src/ServiceProvider.php:38
#77 Barryvdh\Snappy\ServiceProvider:Barryvdh\Snappy\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:749
#76 Illuminate\Container\Container:build in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:631
#75 Illuminate\Container\Container:resolve in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:586
#74 Illuminate\Container\Container:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:732
#73 Illuminate\Foundation\Application:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:1195
#72 Illuminate\Container\Container:offsetGet in /var/www/bookstack/vendor/barryvdh/laravel-snappy/src/ServiceProvider.php:48
#71 Barryvdh\Snappy\ServiceProvider:Barryvdh\Snappy\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:749
#70 Illuminate\Container\Container:build in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:631
#69 Illuminate\Container\Container:resolve in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:586
#68 Illuminate\Container\Container:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:732
#67 Illuminate\Foundation\Application:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:1195
#66 Illuminate\Container\Container:offsetGet in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:159
#65 Illuminate\Support\Facades\Facade:resolveFacadeInstance in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:128
#64 Illuminate\Support\Facades\Facade:getFacadeRoot in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:215
#63 Illuminate\Support\Facades\Facade:__callStatic in /var/www/bookstack/app/Entities/ExportService.php:135
#62 BookStack\Entities\ExportService:htmlToPdf in /var/www/bookstack/app/Entities/ExportService.php:86
#61 BookStack\Entities\ExportService:pageToPdf in /var/www/bookstack/app/Http/Controllers/PageController.php:504
#60 BookStack\Http\Controllers\PageController:exportPdf in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
#59 call_user_func_array in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
#58 Illuminate\Routing\Controller:callAction in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45
#57 Illuminate\Routing\ControllerDispatcher:dispatch in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Route.php:212
#56 Illuminate\Routing\Route:runController in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Route.php:169
#55 Illuminate\Routing\Route:run in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:658
#54 Illuminate\Routing\Router:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30
#53 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/app/Http/Controllers/Controller.php:44
#52 BookStack\Http\Controllers\Controller:BookStack\Http\Controllers\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:131
#51 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#50 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/app/Http/Middleware/Authenticate.php:48
#49 BookStack\Http\Middleware\Authenticate:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#48 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#47 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/app/Http/Middleware/Localization.php:36
#46 BookStack\Http\Middleware\Localization:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#45 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#44 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41
#43 Illuminate\Routing\Middleware\SubstituteBindings:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#42 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#41 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:68
#40 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#39 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#38 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49
#37 Illuminate\View\Middleware\ShareErrorsFromSession:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#36 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#35 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63
#34 Illuminate\Session\Middleware\StartSession:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#33 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#32 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37
#31 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#30 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#29 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66
#28 Illuminate\Cookie\Middleware\EncryptCookies:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#27 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#26 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:102
#25 Illuminate\Pipeline\Pipeline:then in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:660
#24 Illuminate\Routing\Router:runRouteWithinStack in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:635
#23 Illuminate\Routing\Router:runRoute in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:601
#22 Illuminate\Routing\Router:dispatchToRoute in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:590
#21 Illuminate\Routing\Router:dispatch in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:176
#20 Illuminate\Foundation\Http\Kernel:Illuminate\Foundation\Http\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30
#19 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php:65
#18 Barryvdh\Debugbar\Middleware\InjectDebugbar:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#17 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#16 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/fideloper/proxy/src/TrustProxies.php:56
#15 Fideloper\Proxy\TrustProxies:handle in /var/www/bookstack/app/Http/Middleware/TrustProxies.php:45
#14 BookStack\Http\Middleware\TrustProxies:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#13 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#12 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:30
#11 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#10 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#9 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27
#8 Illuminate\Foundation\Http\Middleware\ValidatePostSize:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#7 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#6 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:46
#5 Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149
#4 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53
#3 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:102
#2 Illuminate\Pipeline\Pipeline:then in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:151
#1 Illuminate\Foundation\Http\Kernel:sendRequestThroughRouter in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:116
#0 Illuminate\Foundation\Http\Kernel:handle in /var/www/bookstack/public/index.php:53
@derek-shnosh commented on GitHub (Dec 7, 2018): Hmm, @ssddanbrown I found the `disable-smart-shrinking` option but when I try to add it to `bookstack/config/snappy.php` I get the following; ``` InvalidArgumentException The option '0' does not exist. ``` Here is my `bookstack/config/snappy.php` ```php <?php return [ 'pdf' => [ 'enabled' => true, 'binary' => file_exists(base_path('wkhtmltopdf')) ? base_path('wkhtmltopdf') : env('WKHTMLTOPDF', false), 'timeout' => false, 'options' => ['disable-smart-shrinking'], 'env' => [], ], 'image' => [ 'enabled' => false, 'binary' => '/usr/local/bin/wkhtmltoimage', 'timeout' => false, 'options' => [], 'env' => [], ], ]; ``` I tried enclosing `disable-smart-shrinking` with `{}` and `()` and this did not work either. I'm not an expert here (especially with PHP), so any help would be greatly appreciated. I am able to use this option via bash. ```bash ~$ wkhtmltopdf --disable-smart-shrinking https://www.google.com nosmartshrink.pdf Loading pages (1/6) Counting pages (2/6) Resolving links (4/6) Loading headers and footers (5/6) Printing pages (6/6) Done ``` ## Versions ```bash ~$ more /var/www/bookstack/version v0.24.2 ~$ wkhtmltopdf --version wkhtmltopdf 0.12.5 (with patched qt) ``` ## Debug ```debug InvalidArgumentException thrown with message "The option '0' does not exist." Stacktrace: #83 InvalidArgumentException in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/AbstractGenerator.php:112 #82 Knp\Snappy\AbstractGenerator:setOption in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/AbstractGenerator.php:138 #81 Knp\Snappy\AbstractGenerator:setOptions in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/AbstractGenerator.php:51 #80 Knp\Snappy\AbstractGenerator:__construct in /var/www/bookstack/vendor/knplabs/knp-snappy/src/Knp/Snappy/Pdf.php:24 #79 Knp\Snappy\Pdf:__construct in /var/www/bookstack/vendor/barryvdh/laravel-snappy/src/IlluminateSnappyPdf.php:15 #78 Barryvdh\Snappy\IlluminateSnappyPdf:__construct in /var/www/bookstack/vendor/barryvdh/laravel-snappy/src/ServiceProvider.php:38 #77 Barryvdh\Snappy\ServiceProvider:Barryvdh\Snappy\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:749 #76 Illuminate\Container\Container:build in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:631 #75 Illuminate\Container\Container:resolve in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:586 #74 Illuminate\Container\Container:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:732 #73 Illuminate\Foundation\Application:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:1195 #72 Illuminate\Container\Container:offsetGet in /var/www/bookstack/vendor/barryvdh/laravel-snappy/src/ServiceProvider.php:48 #71 Barryvdh\Snappy\ServiceProvider:Barryvdh\Snappy\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:749 #70 Illuminate\Container\Container:build in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:631 #69 Illuminate\Container\Container:resolve in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:586 #68 Illuminate\Container\Container:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:732 #67 Illuminate\Foundation\Application:make in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Container/Container.php:1195 #66 Illuminate\Container\Container:offsetGet in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:159 #65 Illuminate\Support\Facades\Facade:resolveFacadeInstance in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:128 #64 Illuminate\Support\Facades\Facade:getFacadeRoot in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:215 #63 Illuminate\Support\Facades\Facade:__callStatic in /var/www/bookstack/app/Entities/ExportService.php:135 #62 BookStack\Entities\ExportService:htmlToPdf in /var/www/bookstack/app/Entities/ExportService.php:86 #61 BookStack\Entities\ExportService:pageToPdf in /var/www/bookstack/app/Http/Controllers/PageController.php:504 #60 BookStack\Http\Controllers\PageController:exportPdf in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54 #59 call_user_func_array in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54 #58 Illuminate\Routing\Controller:callAction in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:45 #57 Illuminate\Routing\ControllerDispatcher:dispatch in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Route.php:212 #56 Illuminate\Routing\Route:runController in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Route.php:169 #55 Illuminate\Routing\Route:run in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:658 #54 Illuminate\Routing\Router:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30 #53 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/app/Http/Controllers/Controller.php:44 #52 BookStack\Http\Controllers\Controller:BookStack\Http\Controllers\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:131 #51 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #50 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/app/Http/Middleware/Authenticate.php:48 #49 BookStack\Http\Middleware\Authenticate:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #48 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #47 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/app/Http/Middleware/Localization.php:36 #46 BookStack\Http\Middleware\Localization:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #45 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #44 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41 #43 Illuminate\Routing\Middleware\SubstituteBindings:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #42 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #41 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:68 #40 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #39 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #38 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49 #37 Illuminate\View\Middleware\ShareErrorsFromSession:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #36 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #35 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63 #34 Illuminate\Session\Middleware\StartSession:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #33 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #32 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37 #31 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #30 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #29 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66 #28 Illuminate\Cookie\Middleware\EncryptCookies:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #27 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #26 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:102 #25 Illuminate\Pipeline\Pipeline:then in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:660 #24 Illuminate\Routing\Router:runRouteWithinStack in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:635 #23 Illuminate\Routing\Router:runRoute in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:601 #22 Illuminate\Routing\Router:dispatchToRoute in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Router.php:590 #21 Illuminate\Routing\Router:dispatch in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:176 #20 Illuminate\Foundation\Http\Kernel:Illuminate\Foundation\Http\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30 #19 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php:65 #18 Barryvdh\Debugbar\Middleware\InjectDebugbar:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #17 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #16 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/fideloper/proxy/src/TrustProxies.php:56 #15 Fideloper\Proxy\TrustProxies:handle in /var/www/bookstack/app/Http/Middleware/TrustProxies.php:45 #14 BookStack\Http\Middleware\TrustProxies:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #13 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #12 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:30 #11 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #10 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #9 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27 #8 Illuminate\Foundation\Http\Middleware\ValidatePostSize:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #7 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #6 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:46 #5 Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode:handle in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:149 #4 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #3 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:102 #2 Illuminate\Pipeline\Pipeline:then in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:151 #1 Illuminate\Foundation\Http\Kernel:sendRequestThroughRouter in /var/www/bookstack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:116 #0 Illuminate\Foundation\Http\Kernel:handle in /var/www/bookstack/public/index.php:53 ```
Author
Owner

@ssddanbrown commented on GitHub (Dec 9, 2018):

@derek-shnosh I believe the option would be provided like so:

        'options' => [
            'disable-smart-shrinking' => true,
        ],
@ssddanbrown commented on GitHub (Dec 9, 2018): @derek-shnosh I believe the option would be provided like so: ```php 'options' => [ 'disable-smart-shrinking' => true, ], ```
Author
Owner

@derek-shnosh commented on GitHub (Dec 14, 2018):

@ssddanbrown Thanks, that format was accepted... however it doesn't seem to help.

The reason I was looking for this option is because the fonts are a bit skewed after an export, below is an example with the Work Sans, Muli, and Fira Code fonts; it seems their upper right corners are a bit hacked.

image

If I open the PDF with Acrobat Standard I can see the fonts are assigned properly. Also, when editing the text field, new characters typed are quite clear.

image

Now that I know how to assign the options properly, I'm going to dig through them to see if there is something to help with this.

@derek-shnosh commented on GitHub (Dec 14, 2018): @ssddanbrown Thanks, that format was accepted... however it doesn't seem to help. The reason I was looking for this option is because the fonts are a bit skewed after an export, below is an example with the **Work Sans**, **Muli**, and **Fira Code** fonts; it seems their upper right corners are a bit hacked. ![image](https://user-images.githubusercontent.com/21090563/50016454-177f9700-ff7e-11e8-9ba6-9cd8acf4cfd1.png) If I open the PDF with Acrobat Standard I can see the fonts are assigned properly. Also, when editing the text field, new characters typed are quite clear. ![image](https://user-images.githubusercontent.com/21090563/50016628-94127580-ff7e-11e8-94ee-220f8a17e6c5.png) Now that I know how to assign the options properly, I'm going to dig through them to see if there is something to help with this.
Author
Owner

@Nebucatnetzer commented on GitHub (Jun 10, 2019):

As discussed here https://github.com/linuxserver/docker-bookstack/issues/32 it would be good if the PDF options would be either produce a nicer output, meaning that the output works better on an A4 page, or that there options for the .env file because customizing the snappy.php file means that we're editing the source code directly.

@Nebucatnetzer commented on GitHub (Jun 10, 2019): As discussed here https://github.com/linuxserver/docker-bookstack/issues/32 it would be good if the PDF options would be either produce a nicer output, meaning that the output works better on an A4 page, or that there options for the .env file because customizing the snappy.php file means that we're editing the source code directly.
Author
Owner

@ssddanbrown commented on GitHub (Nov 8, 2022):

I'm going to close this off since this has had relatively little demand while being a feature that is quite open and would be a relative pain to implement & maintain. If needed, we have since made it easier to customize exports using header CSS or the visual theme system.

@ssddanbrown commented on GitHub (Nov 8, 2022): I'm going to close this off since this has had relatively little demand while being a feature that is quite open and would be a relative pain to implement & maintain. If needed, we have since made it easier to customize exports using header CSS or the [visual theme system](https://github.com/BookStackApp/BookStack/blob/development/dev/docs/visual-theme-system.md).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/BookStack#800