user5671078
user5671078

Reputation:

wkhtmltopdf, 0.12.6, Warning: Blocked access to file

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

Upvotes: 97

Views: 67615

Answers (9)

HoldOffHunger
HoldOffHunger

Reputation: 20881

The full, complete solution is:

wkhtmltopdf.exe --enable-local-file-access "E:\INPUT-FILE.html" "E:\output-file.pdf"

CRITICAL: It's important to put it in this order. Even though --enable-local-file-access is a named parameter, which means it can be identified anywhere in a command, the order is necessary.

Consider the currently-accepted answer: Merely "add on" the parameter. That simply doesn't work. And you'll get this result if you attempt using it:

Loading pages (1/6)
Warning: Blocked access to file E:/gutenberg/metro_files/illusc.jpg
Error: Failed to load about:blank, with network status code 301 and http status 
code 0 - Protocol "about" is unknown

Upvotes: 0

Aneeq Azam Khan
Aneeq Azam Khan

Reputation: 1032

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

Upvotes: 0

Remiswl
Remiswl

Reputation: 11

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

Upvotes: 1

sunnysidedown916
sunnysidedown916

Reputation: 175

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

Upvotes: 4

L.J
L.J

Reputation: 530

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

Upvotes: 43

Benoit Blanchon
Benoit Blanchon

Reputation: 14521

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.

Upvotes: 2

Richard Tian
Richard Tian

Reputation: 73

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

Upvotes: 4

Shrimp
Shrimp

Reputation: 612

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.

Upvotes: 31

user5671078
user5671078

Reputation:

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>

Upvotes: 161

Related Questions