Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

wkhtmltopdf, 0.12.6, Warning: Blocked access to file

Tags:

wkhtmltopdf

This is caused by the change of default behavior in version 0.12.6 of wkhtmltopdf. wkhtmltopdf disables local file access by default now. It could be solved by adding the command line parameter

--enable-local-file-access

or the combination

--disable-local-file-access --allow <path>

For those that are using laravel-snappy, add the 'enable-local-file-access' option in the config\snappy.php:

'pdf' => [
        'enabled' => true,
        'binary'  => env('WKHTML_PDF_BINARY', '/usr/local/bin/wkhtmltopdf'),
        'timeout' => false,
        'options' => [
            'enable-local-file-access' => true,
            'orientation'   => 'landscape',
            'encoding'      => 'UTF-8'
        ],
        'env'     => [],
    ],

    'image' => [
        'enabled' => true,
        'binary'  => env('WKHTML_IMG_BINARY', '/usr/local/bin/wkhtmltoimage'),
        'timeout' => false,
        'options' => [
            'enable-local-file-access' => true,
            'orientation'   => 'landscape',
            'encoding'      => 'UTF-8'
        ],
        'env'     => [],
    ],

wkhtmltopdf disables local file access by default in the 0.12.6 version


Just bumping this thread with a correction in case you're still getting the same error in spite of using:

--enable-local-file-access

For some reason, this cmd line argument does not work when being specified after input/output files, you have to write this argument right after wkhtmltopdf.exe.

So

wkhtmltopdf.exe --enable-local-file-access input.html output.pdf

instead of other variants.


in my case, I put "enable-local-file-access": "", in options, it worked.


In Windows with Python, I came across a similar error as well when running code:

result = imgkit.from_file('postlayout.A.html', 'out.jpg', config=wkhtmltoimage_binaries)

Error:

Warning: Blocked access to file C:/XXXXXX/background.A.jpg

Error: Failed to load about:blank, with network status code 301 and http status code 0 - Protocol "about" is unknown

What I did to resolve this:

Add variable options

kitoptions = {
  "enable-local-file-access": None
}

Add options to call

FROM

result = imgkit.from_file('postlayout.A.html', 'out.jpg', config=wkhtmltoimage_binaries)

TO

result = imgkit.from_file('postlayout.A.html', 'out.jpg', config=wkhtmltoimage_binaries, options=kitoptions)

Full Source:

import imgkit

#library path to kit
path_wkthmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltoimage.exe'
wkhtmltoimage_binaries  = imgkit.config(wkhtmltoimage=path_wkthmltopdf)

#OPTIONS
kitoptions = {
  "enable-local-file-access": None
}

html_file_directory = r'C:\XXXX\template'

result = imgkit.from_file('postlayout.A.html', 'out.jpg', config=wkhtmltoimage_binaries, options=kitoptions)
if result:
    print("successful")
else:
    print("failed")

For the C API, contrary to what the documentation says, it's not load.blockLocalFileAccess but loadPage.blockLocalFileAccess that you must set to "false":

wkhtmltoimage_set_global_setting(settings, "loadPage.blockLocalFileAccess", "false");

Hopefully, the documentation will be updated soon; see issue #4763.