【问题标题】:laravel 5 pdf create, download & printlaravel 5 pdf 创建、下载和打印
【发布时间】:2016-04-20 06:35:57
【问题描述】:

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

我看到他们正在创建 pdf 并在浏览器中显示的大多数网站。然后我认为浏览器允许打印和下载以及放大/缩小。就像这样

所以任何提示或方法都可以轻松做到这一点。我已经尝试过 DomPDF,但它不会让我做复杂的样式。我希望它像在浏览器中打开 pdf 并打印和下载一样

【问题讨论】:

    标签: laravel-5 pdf-generation


    【解决方案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 中的 'aliases' 下添加这两行

    'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,

    'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,

    在您的终端类型中

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

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

    'binary' => base_path('/vendor/h4cc/wkhtmltopdf-i386/bin/wkhtmltopdf-i386'),

    和'image'数组到这个:

    'binary' => base_path('/vendor/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" --> 我在 apache 中的 web 文件夹 "/new/project" --> 我的 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

    【讨论】:

      【解决方案2】:

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

      现在下载PDF,您可以使用

       return Response::download($filepath);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 2015-04-12
        • 2011-07-01
        • 2012-04-30
        相关资源
        最近更新 更多