barryvdh / laravel-dompdf:-fopen无法打开流:laravel 5.7中没有此类文件或目录

时间:2019-02-01 06:28:42

标签: laravel dompdf invoice

当我要下载invoice.pdf时出现错误:-

  

打开(project_path \ storage \ fonts / \ 071ddd89a9cb147bf5639344caee3fe8.ufm):无法打开流:没有此类文件或目录

enter image description here

在存储下创建字体文件夹后也出现错误:

  

“执行次数最多”的最大执行时间为30秒。

enter image description here

我现在该怎么办?

6 个答案:

答案 0 :(得分:1)

经过全部测试,我为“打开失败”和“执行时间已过期”找到了一个完美的解决方案。

当您使用发票代码扩展主文件时会发生这种情况

@extends('admin.master')
@section('body')
/* your invoice code*/
@sectionend

为避免所有问题,只需将发票的源代码粘贴到下载发票刀片中,例如

<!doctype html>

    <html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>BigStore: Shopping Invoice</title>
    </head>
    <body>


    <style>
    /*css*/
    </style>
    <br>
    /**html code**/
     </body>
    </html>

答案 1 :(得分:1)

首先运行这个:

php artisan vendor:publish

然后在 storage 中创建 fonts 目录

/storage/fonts

确保字体目录具有可写权限。

答案 2 :(得分:0)

*execution times up" maximum execution time is 30 sec.* Need to change php configuration in `php.ini` file

You should change the following configuration:

***max_execution_time = 30;
max_input_time = 60 ; 
memory_limit = 8M;   ***

答案 3 :(得分:0)

在Laravel 5.7中,我点击了以下链接以安装dompdf:https://github.com/barryvdh/laravel-dompdf

完成安装后,我在控制器中使用此代码制作了下载发票

public function downloadOrderInvoice($id) {
        $order          = Order::find($id);
        $customer       = Customer::find($order->customer_id);
        $shipping       = Shipping::find($order->shipping_id);
        $orderDetails   = OrderDetail::where('order_id', $order->id)->get();

        $pdf = PDF::loadView('admin.order.download-invoice',[
            'order'=> $order,
            'customer'=>$customer,
            'shipping'=>$shipping,
            'orderDetails'=>$orderDetails
        ]);

        return $pdf->download('invoice.pdf');
//        return $pdf->stream('invoice.pdf');
    }

在刀片文件中,我仅粘贴了发票的所有源代码:

<!doctype html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>BigStore: Shopping Invoice</title>
</head>
<body>


    <style>
        /* reset */

        /***/
        /*{*/
        /*border: 0;*/
        /*box-sizing: content-box;*/
        /*color: inherit;*/
        /*font-family: inherit;*/
        /*font-size: inherit;*/
        /*font-style: inherit;*/
        /*font-weight: inherit;*/
        /*line-height: inherit;*/
        /*list-style: none;*/
        /*margin: 0;*/
        /*padding: 0;*/
        /*text-decoration: none;*/
        /*vertical-align: top;*/
        /*}*/

        /* content editable */

        *[contenteditable] { border-radius: 0.25em; min-width: 1em; outline: 0; }

        *[contenteditable] { cursor: pointer; }

        *[contenteditable]:hover, *[contenteditable]:focus, td:hover *[contenteditable], td:focus *[contenteditable], img.hover { background: #DEF; box-shadow: 0 0 1em 0.5em #DEF; }

        span[contenteditable] { display: inline-block; }

        /* heading */

        h1 { font: bold 100% sans-serif; letter-spacing: 0.5em; text-align: center; text-transform: uppercase; }

        /* table */

        table { font-size: 75%; table-layout: fixed; width: 100%; }
        table { border-collapse: separate; border-spacing: 2px; }
        th, td { border-width: 1px; padding: 0.5em; position: relative; text-align: left; }
        th, td { border-radius: 0.25em; border-style: solid; }
        th { background: #EEE; border-color: #BBB; }
        td { border-color: #DDD; }

        /* page */

        /*html { font: 16px/1 'Open Sans', sans-serif; overflow: auto; padding: 0.5in; }*/
        /*html { background: #999; cursor: default; }*/

        /*body { box-sizing: border-box; height: 11in; margin: 0 auto; overflow: hidden; padding: 0.5in; width: 8.5in; }*/
        /*body { background: #FFF; border-radius: 1px; box-shadow: 0 0 1in -0.25in rgba(0, 0, 0, 0.5); }*/

        /* header */

        header { margin: 0 0 3em; }
        header:after { clear: both; content: ""; display: table; }

        header h1 { background: #000; border-radius: 0.25em; color: #FFF; margin: 0 0 1em; padding: 0.5em 0; }
        header address { float: left; font-size: 75%; font-style: normal; line-height: 1.25; margin: 0 1em 1em 0; }
        header address p { margin: 0 0 0.25em; }
        header span, header img { display: block; float: right; }
        header span { margin: 0 0 1em 1em; max-height: 25%; max-width: 60%; position: relative; }
        header img { max-height: 100%; max-width: 100%; }
        header input { cursor: pointer; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; height: 100%; left: 0; opacity: 0; position: absolute; top: 0; width: 100%; }

        /* article */

        article, article address, table.meta, table.inventory { margin: 0 0 3em; }
        article:after { clear: both; content: ""; display: table; }
        article h1 { clip: rect(0 0 0 0); position: absolute; }

        article address { float: left; font-size: 125%; font-weight: bold; }

        /* table meta & balance */

        table.meta, table.balance { float: right; width: 36%; }
        table.meta:after, table.balance:after { clear: both; content: ""; display: table; }

        /* table meta */

        table.meta th { width: 40%; }
        table.meta td { width: 60%; }

        /* table items */

        table.inventory { clear: both; width: 100%; }
        table.inventory th { font-weight: bold; text-align: center; }

        table.inventory td:nth-child(1) { width: 26%; }
        table.inventory td:nth-child(2) { width: 38%; }
        table.inventory td:nth-child(3) { text-align: right; width: 12%; }
        table.inventory td:nth-child(4) { text-align: right; width: 12%; }
        table.inventory td:nth-child(5) { text-align: right; width: 12%; }

        /* table balance */

        table.balance th, table.balance td { width: 50%; }
        table.balance td { text-align: right; }

        /* aside */

        aside h1 { border: none; border-width: 0 0 1px; margin: 0 0 1em; }
        aside h1 { border-color: #999; border-bottom-style: solid; }

        /* javascript */

        .add, .cut
        {
            border-width: 1px;
            display: block;
            font-size: .8rem;
            padding: 0.25em 0.5em;
            float: left;
            text-align: center;
            width: 0.6em;
        }

        .add, .cut
        {
            background: #9AF;
            box-shadow: 0 1px 2px rgba(0,0,0,0.2);
            background-image: -moz-linear-gradient(#00ADEE 5%, #0078A5 100%);
            background-image: -webkit-linear-gradient(#00ADEE 5%, #0078A5 100%);
            border-radius: 0.5em;
            border-color: #0076A3;
            color: #FFF;
            cursor: pointer;
            font-weight: bold;
            text-shadow: 0 -1px 2px rgba(0,0,0,0.333);
        }

        .add { margin: -2.5em 0 0; }

        .add:hover { background: #00ADEE; }

        .cut { opacity: 0; position: absolute; top: 0; left: -1.5em; }
        .cut { -webkit-transition: opacity 100ms ease-in; }

        tr:hover .cut { opacity: 1; }

    </style>


    <br/>
    <div class="row">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-body">
                    <header>
                        <h1>Invoice</h1>
                        <h4>Shipping Info</h4>
                        <address>
                            <p>{{ $shipping->full_name }}</p>
                            <p>{{ $shipping->address }}</p>
                            <p>{{ $shipping->phone_number }}</p>
                        </address>
                        <h4>Billing Info</h4>
                        <address>
                            <p>{{ $customer->first_name.' '.$customer->last_name }}</p>
                            <p>{{ $customer->address }}</p>
                            <p>{{ $customer->phone_number }}</p>
                        </address>
                        <span><img alt="" src="http://www.jonathantneal.com/examples/invoice/logo.png"><input type="file" accept="image/*"></span>
                    </header>
                    <article>
                        <h1>Recipient</h1>
                        <address>
                            <p>Some Company<br>c/o Some Guy</p>
                        </address>
                        <table class="meta">
                            <tr>
                                <th><span>Invoice #</span></th>
                                <td><span>0000{{ $order->id }}</span></td>
                            </tr>
                            <tr>
                                <th><span>Date</span></th>
                                <td><span>{{ $order->created_at }}</span></td>
                            </tr>
                            <tr>
                                <th><span contenteditable>Amount Due</span></th>
                                <td><span id="prefix" contenteditable>TK.</span><span>{{ $order->order_total }}</span></td>
                            </tr>
                        </table>
                        <table class="inventory">
                            <thead>
                            <tr>
                                <th><span>Item</span></th>
                                <th><span>Description</span></th>
                                <th><span>Rate</span></th>
                                <th><span>Quantity</span></th>
                                <th><span>Total Price</span></th>
                            </tr>
                            </thead>
                            <tbody>
                            @php($sum=0)
                            @foreach($orderDetails as $orderDetail)
                                <tr>
                                    <td><span>{{ $orderDetail->product_name }}</span></td>
                                    <td><span>Experience Review</span></td>
                                    <td><span data-prefix>TK </span><span>{{ $orderDetail->product_price }}</span></td>
                                    <td><span>{{ $orderDetail->product_quantity }}</span></td>
                                    <td><span data-prefix>TK</span><span>{{ $total = $orderDetail->product_price*$orderDetail->product_quantity }}</span></td>
                                </tr>
                                @php($sum = $sum + $total)
                            @endforeach
                            </tbody>
                        </table>
                        <table class="balance">
                            <tr>
                                <th><span>Total</span></th>
                                <td><span data-prefix>TK. </span><span>{{ $sum }}</span></td>
                            </tr>
                        </table>
                    </article>
                    <aside>
                        <h1><span>Additional Notes</span></h1>
                        <div>
                            <p>A finance charge of 1.5% will be made on unpaid balances after 30 days.</p>
                        </div>
                    </aside>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

答案 4 :(得分:0)

通过在存储目录中创建字体文件夹来修复它

答案 5 :(得分:0)

我有同样的字体问题,我通过这样做解决了它:

$pdf = PDF::loadView('reports.today', ['Data' => $Data])->setOptions(['defaultFont' => 'sans-serif']);


return $pdf->download('invoice.pdf');