wkhtmltopdf, 0.12.6, Warning: Blocked access to file

Wkhtmltopdf

Wkhtmltopdf Problem Overview


When upgrade wkhtmltopdf to 0.12.6, it came to such messages and the image did not show in the target pdf:

    Warning: Blocked access to file /path/to/bpa_product_layering.png

BTW, the same source html file works well with 0.12.5

Wkhtmltopdf Solutions


Solution 1 - 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>

Solution 2 - Wkhtmltopdf

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

Solution 3 - Wkhtmltopdf

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.

Solution 4 - Wkhtmltopdf

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

Solution 5 - Wkhtmltopdf

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")

Solution 6 - Wkhtmltopdf

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.

Solution 7 - Wkhtmltopdf

I confirm that the problem comes from the wkhtmltopdf version. For those on Symfony (3.4), just add an option in config.yml:

knp_snappy:
    pdf:
        options:
            enable-local-file-access: true

Solution 8 - Wkhtmltopdf

I know am a bit late in party but just wanted to write clear example with c# here so one can understand clearly.

ProcessStartInfo proc = new ProcessStartInfo();
        proc = new ProcessStartInfo();
        proc.RedirectStandardError = true;
        proc.UseShellExecute = false;
        proc.WorkingDirectory = @"" + Config.WkhtmltopdfPath;
        proc.FileName = @"" + Config.WkhtmltopdfPath + @"\wkhtmltopdf.exe";
        proc.Arguments = @"  --enable-local-file-access -T 0 -B 0 --page-width 210mm --page-height 450mm " + fileName + ".html " + fileName + ".pdf";
        Process inkscape = Process.Start(proc);
Categories

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser5671078View Question on Stackoverflow
Solution 1 - Wkhtmltopdfuser5671078View Answer on Stackoverflow
Solution 2 - WkhtmltopdfL.JView Answer on Stackoverflow
Solution 3 - WkhtmltopdfShrimpView Answer on Stackoverflow
Solution 4 - WkhtmltopdfRichard TianView Answer on Stackoverflow
Solution 5 - Wkhtmltopdfsunnysidedown916View Answer on Stackoverflow
Solution 6 - WkhtmltopdfBenoit BlanchonView Answer on Stackoverflow
Solution 7 - WkhtmltopdfRemiswlView Answer on Stackoverflow
Solution 8 - WkhtmltopdfAneeq Azam KhanView Answer on Stackoverflow