0

我正在尝试使用wkhtmltoimage将 html 和网页转换为使用 Perl 模块WKHTMLTOPDF的图像。下面的脚本和代码从命令行工作,但如果我从浏览器调用脚本则不起作用。

Update:

If I run the script from the shell as a root user, it runs without
error, if I switch to the domain user where the script is located,
I get that error, seems it is executable permissions for domain owner.

错误是:

error running '/usr/local/bin/wkhtmltoimage': '/usr/local/bin/wkhtmltoimage http://yahoo.com 
/home/xxxx/public_html/pdfwebkit/output.png' died with signal 11, with coredump at 
/usr/local/perl-5.18.1/lib/site_perl/5.18.1/MooseX/Role/Cmd.pm line 128.
MooseX::Role::Cmd::run(WKHTMLTOPDF=HASH(0x2714260), "http://yahoo.com", 
"/home/xxxx/public_html/pdfwebkit/output.png") called at /usr/local/
perl-5.18.1/lib/site_perl/5.18.1/WKHTMLTOPDF.pm line 645 WKHTMLTOPDF::generate(WKHTMLT
OPDF=HASH(0x2714260)) called at htmltoimage.cgi line xxx main::convert_using_WKHTMLTOPDF_image("http://yahoo.com", 
"/home/xxxx/public_html/pdfwebkit/output.png") called at htmltoimage.cgi line xx

我正在使用的代码是:

#!/usr/bin/perl
#!C:\perl\bin\perl.exe
print "Content-type: text/html;charset=utf-8\n\n";
use File::Spec::Functions;
use File::Basename;
BEGIN {
    $|=1;
    use CGI::Carp qw(fatalsToBrowser set_message);
    sub handle_errors {
        #print "Content-type: text/html;charset=utf-8\n\n";
        my $msg = shift;
        print qq!<h1><font color="red">Software Error</font></h1>!;
        print qq!<p>$msg</p>!;
    }
    set_message(\&handle_errors);
}

$|=1;
my ($Script, $Bin);
if ($ENV{SCRIPT_FILENAME}) {
    ($Script, $Bin) = fileparse($ENV{SCRIPT_FILENAME});
}
else {
    ($Script, $Bin) = fileparse(__FILE__);
}

use WKHTMLTOPDF;

    my $outfile = catfile ($Bin, 'output.jpg');
    print "Converting url to image file $outfile...<br>\n";
    convert_using_WKHTMLTOPDF_image('http://yahoo.com', $outfile);
    print "Finished...<br>\n";
    exit;

sub convert_using_WKHTMLTOPDF_image {
    my ($page, $output) = @_;
    my $pdf = new WKHTMLTOPDF;
    my $bin = '/usr/local/bin/wkhtmltoimage';
    #my $bin = 'C:/Program Files/wkhtmltopdf/bin/wkhtmltoimage.exe';
    $pdf->bin_name($bin);
    $pdf->_input_file($page);
    $pdf->_output_file($output);
    #$pdf->grayscale(1);
    $pdf->generate;
}

sub convert_html_to_image_direct {
    my ($page, $output) = @_;
    my $bin = '/usr/local/bin/wkhtmltoimage --quiet ';
    my $out = `$bin $page $output`;
    print "out: $out<br>\n";
    return $out;
}

该代码在浏览器正常的 Windows 上工作。如果我尝试使用 wkhtmltopdf 将 html 转换为 pdf,我会遇到同样的问题。

我安装二进制文件的方式来自这里:

https://gist.github.com/DaRamirezSoto/5489861

# wget http://wkhtmltopdf.googlecode.com/files/wkhtmltoimage-0.11.0_rc1-static-amd64.tar.bz2
# wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
# tar xvjf wkhtmltoimage-0.11.0_rc1-static-amd64.tar.bz2
# tar xvjf wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
# chown root:root wkhtmltopdf-amd64
# chown root:root wkhtmltoimage-amd64
# mv wkhtmltopdf-amd64 /usr/bin/wkhtmltopdf
# mv wkhtmltoimage-amd64 /usr/bin/wkhtmltoimage

// dependencies
# yum install -y libXrender libXext openssl openssl-devel fontconfig 
4

1 回答 1

0

我使用 Centos 6 服务器进行了测试(在 IE 11/Win 8.1 中),只需对我希望保存它的文件夹的路径稍作更改,就可以正常工作。

我的输出是将 url 转换为图像文件 /home/user/../bittertruth.jpg... 完成...

正如你所期望的那样......

于 2015-01-19T21:43:13.820 回答