laravel 5 pdf创建,下载&打印

时间:2016-04-20 06:35:58

标签: laravel-5 pdf-generation

我现在有这种刀片视图来显示客户的发票

enter image description here

我看到他们创建pdf的大部分网站都在浏览器中显示。那么我认为浏览器允许打印和下载以及放大/缩小。完全是这样的 enter image description here

所以任何提示或方法都可以轻松完成。我尝试过DomPDF,但它不会让我做复杂的风格。我想在浏览器中打开pdf并打印和下载

2 个答案:

答案 0 :(得分:1)

在32位ubuntu上使用laravel 5.4。

将这三行添加到composer.json

"barryvdh/laravel-snappy": ">=0.4.0",
"h4cc/wkhtmltopdf-i386": "0.12.x",
"h4cc/wkhtmltoimage-i386": "0.12.x"

64位系统

"barryvdh/laravel-snappy": ">=0.4.0",
"h4cc/wkhtmltopdf-amd64": "0.12.x",
"h4cc/wkhtmltoimage-amd64": "0.12.x",
从您的终端

导航到您的laravel文件夹并输入

  

作曲家更新

在config / app中,在“别名”

下添加这两行
  

'PDF'=> Barryvdh \斯纳皮\外墙\ SnappyPdf ::类,

     

'SnappyImage'=> Barryvdh \斯纳皮\外墙\ SnappyImage ::类,

终端类型

中的

  

php artisan vendor:publish --provider =“Barryvdh \ Snappy \ ServiceProvider”

转到config / snappy并将'pdf'数组的二进制路径更改为此

  

'binary'=> BASE_PATH( '/供应商/ h4cc / wkhtmltopdf-I386 / bin中/ wkhtmltopdf-I386'),

和'image'数组到此:

  

'binary'=> BASE_PATH( '/供应商/ h4cc / wkhtmltoimage-I386 / bin中/ wkhtmltoimage-I386'),

要尝试一下,在控制器中,您可以执行以下操作:

public function postPDFPrint() {

        $pdf = \App::make('snappy.pdf.wrapper');
        $pdf->loadHTML('<h1>Test</h1>');
        return $pdf->inline();
    }

如果您想从视图中打印,请加载视图并像往常一样传入数据。我建议使用特定于打印的CSS加载特定的“视图”以便打印到pdf。

public function postAdminPrint()
{
        $form = Form::find(1);
        $pdf = \PDF::loadView('form.admin-print'['form'=>$form]);
        return $pdf->inline();  
}

调试“退出状态码127:出错了......”错误。首先,我们尝试通过命令行打印。导航到终端内laravel安装的根目录,然后键入:

vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 http://www.google.com test.pdf

如果安装正确并且没有文件夹权限问题,那么您应该会在终端中看到以下行。

Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done  

google主页的打印应该出现在你的Laravel根目录中。否则,导致错误的是您的文件夹权限。

如果上述工作正在尝试将我上面写的二进制路径更改为:

/var/www/html/new/project/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64

/var/www/html/new/project/vendor/h4cc/hkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 

“/ var / www / html” - &gt;我在apache中的web文件夹 “/ new / project” - &gt;我的laravel目录

如何利用立面的选项:

// Within your controller class
use PDF;

public function YourControllerFunction(Model $model) {

$pdf = PDF::loadView('path.to.your.file',['model'=>$model])
        ->setPaper('a4')
        ->setOptions([
            'header-html'=>"/var/www/html/{your-laravel-install-folder}/resources/views/header.html", // display a image logo on every page header
            'footer-font-size'=>'8',
            'footer-left'=>'Footer Left Text',
            'footer-center'=>'Footer Center Text',
            'footer-right'=>'Footer Right Text']);

            return $pdf->inline();
      }

您的“header.html”文件

<!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
        </head>   
        <body>      
            <img style="display:block;" height="100" src="https://dl.dropbox.com/{your-dropbox-image-id}?raw=1">
        </body>
    </html>

参考:https://github.com/barryvdh/laravel-snappy

答案 1 :(得分:0)

DomPDF仍然不支持许多新的CSS功能。所以我使用的是laravel-snappy。您只需使用任何css框架或根据您的愿望创建一个html页面。然后使用snappy加载它,它将创建该页面的pdf。它基本上是urlhtml页面的快照,并创建PDF。所以你的pdf和html页面看起来完全一样。

现在,要下载PDF,您可以使用

 return Response::download($filepath);

您可以在另一个标签页中打开该PDF文件,以便根据浏览器显示更多选项。