Laravel 4 wkHtmlToPdf路由,POST和GET问题

时间:2013-10-29 03:46:34

标签: post laravel laravel-routing

右, 我已经为wkhtmltopdf(https://github.com/ignited/laravel-pdf)安装了服务提供程序 当我添加

Route::get('/', function() {
    $pdf = PDF::make();
    $pdf->addPage('<html><head></head><body><b>Hello World</b></body></html>');
    $pdf->send();
});

在我的routes.php中,它会生成一个pdf文件。

我要做的是将整个div发布到我的控制器,然后从中生成PDF。

我的表单:

<form id="convert" action="{{{ URL::to('') }}}/pdf" method="post">
<input type="hidden" name="body" id="body">
<input type="submit" class="btn btn-success pdf" value="Done? Convert to PDF!">
</form>

jQuery:

$('form#convert').submit(function(){
                  $("input#body").val($("#preview").html());
              });

routes.php文件:

Route::post('pdf', 'PdfController@index');

最后我的控制器(PdfController):

<?php

class PdfController extends BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {

        $data = Input::get('body');


                $pdf = PDF::make();
            $pdf->addPage($data);
            $pdf->send('test.pdf');
            if(!$pdf->send())
        return $pdf->getError();
    }



}

不知怎的,我认为它是一个基本的POST vs GET,或者我做得不对。 现在我收到错误Could not run command '/var/www/docassembly/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64'

但如果我用直接html替换我的控制器中的变量,我会得到同样的错误。

如果我在表单和路径中使用GET并直接传递html作为参数,则错误不同:

Could not run command '/var/www/docassembly/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64' test /tmp/tmp_WkHtmlToPdf_Hq98EZ: Loading pages (1/6) [> ] 0% [======> ] 10% [============================================================] 100% Error: Failed loading page http://test (sometimes it will work just to ignore this error with --load-error-handling ignore) 

因此在控制器中使用它也是一个问题。  任何线索?

2 个答案:

答案 0 :(得分:0)

根据您提供的documentation of the package,它表示您需要在composer.json文件中包含二进制文件才能使其正常工作:


注意(您还必须包含wkhtmltopdf二进制文件) 32位系统

{
    "require": {
        "h4cc/wkhtmltopdf-i386": "*"
    }
}

64位系统

{
    "require": {
        "h4cc/wkhtmltopdf-amd64": "*"
    }
}

如果需要,您可以同时包含这两种内容。


听起来像Laravel试图执行64位二进制文​​件而无法找到它。确保:

  • 您将它放在正确的文件夹中。
  • 它具有chmod设置的执行权限。

答案 1 :(得分:0)

原来答案很简单,只需要用

开始输入

<html><head></head><body>并以</body></html>

结尾

由于我对whtml2pdf的输入是div的内容,我只需将这些html标签插入发送给控制器的输入值即可。