【发布时间】:2016-04-20 06:35:57
【问题描述】:
我现在有这种刀片视图来显示客户的发票
我看到他们正在创建 pdf 并在浏览器中显示的大多数网站。然后我认为浏览器允许打印和下载以及放大/缩小。就像这样
所以任何提示或方法都可以轻松做到这一点。我已经尝试过 DomPDF,但它不会让我做复杂的样式。我希望它像在浏览器中打开 pdf 并打印和下载一样
【问题讨论】:
我现在有这种刀片视图来显示客户的发票
我看到他们正在创建 pdf 并在浏览器中显示的大多数网站。然后我认为浏览器允许打印和下载以及放大/缩小。就像这样
所以任何提示或方法都可以轻松做到这一点。我已经尝试过 DomPDF,但它不会让我做复杂的样式。我希望它像在浏览器中打开 pdf 并打印和下载一样
【问题讨论】:
在 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>
【讨论】:
DomPDF 仍然不支持许多新的 CSS 功能。所以我使用laravel-snappy。您只需要使用任何 css 框架或根据您的需要创建一个 html 页面。然后只需使用 snappy 加载它,它将创建该页面的 pdf。它基本上是拍摄url 或html 页面的快照并创建一个PDF。所以你的 pdf 和 html 页面看起来完全一样。
现在下载PDF,您可以使用
return Response::download($filepath);
您可以在另一个选项卡中打开该 PDF,以便根据浏览器显示更多选项。
【讨论】: