打印 laravel Blade 的内容(使用 Laravel 5.2)
Posted
技术标签:
【中文标题】打印 laravel Blade 的内容(使用 Laravel 5.2)【英文标题】:Print the content of laravel blade (using Laravel 5.2) 【发布时间】:2018-05-15 19:05:07 【问题描述】:我想打印 laravel Blade 文件的内容......文件包含用户的 html 表......当用户点击打印按钮时,它必须重定向到弹出的打印窗口......请帮助解决这个问题问题。
当前读取文件内容的代码......我不知道如何给出这个文件的路径......文件在resource/views/reports/table.blade.php
当前代码显示异常:
FileSystem.php 第 41 行中的 FileNotFoundException: 路径 printview_table 中不存在文件
控制器中的代码
public function printfile()
$filename = '/reports/printview_table.blade.php';
try
$contents = File::get($filename);
printfile($contents);
catch (Illuminate\Filesystem\FileNotFoundException $exception)
die("The file doesn't exist");
【问题讨论】:
你试过File::get(base_path($filename));
吗?
为什么最终用户需要未编译刀片模板的代码?只是好奇
【参考方案1】:
我知道现在回答为时已晚,但我今天做了同样的事情,并决定在此处也发布我的解决方案,以便将来可能对某人有所帮助。
所需工具:
-
jQuery
jQuery.print
解决步骤:
第一步:打印按钮所在的视图。
dashboard.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="csrf-token" content=" csrf_token() ">
<title>Document</title>
</head>
<body>
<button id="print"> Print </button>
<script src=" asset('js/jquery.js') "></script>
<script src=" asset('js/jquery.print.js') "></script>
<script src=" asset('js/scripts.js') "></script>
</body>
</html>
第 2 步:要打印的视图。 假设我有这样的视图,我想打印出来:
print.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Col 1</th>
<th>Col 2</th>
<th>Col 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
</tr>
</tbody>
</table>
</body>
</html>
第 2 步:路线。 我们需要一条路由来调用我们的视图。
web.php
Route::post('/print', function() return view('print'); );
第 3 步: jQuery 脚本。
我们将通过 AJAX 调用视图内容并将其传递给jQuery.print()
函数进行打印。
scripts.js
$('#print').on('click', function()
let CSRF_TOKEN = $('meta[name="csrf-token"').attr('content');
$.ajaxSetup(
url: '/print/',
type: 'POST',
data:
_token: CSRF_TOKEN,
,
beforeSend: function()
console.log('printing ...');
,
complete: function()
console.log('printed!');
);
$.ajax(
success: function(viewContent)
$.print(viewContent); // This is where the script calls the printer to print the viwe's content.
);
);
就是这样,根据自己的需求自定义代码。
【讨论】:
嗨,我按照上面的代码使用 laravel .. 但它给了我 jquery 错误 403(禁止)。我应该使用特定版本的 jQuery 吗? @Unknownymous 这和jQuery版本无关,只要确保你正确设置了CSRF_TOKEN即可。 是的,我已经知道了。现在我的问题是当用户点击 PRINT 时如何捕捉事件,如果 CANCEL BUTTON 页面将重定向到其他页面,那么它仍然在同一页面上? 在 print.blade.php 页面引导程序不起作用。应该怎么做? @nafischonchol 您需要通过.print()
选项包含 Bootstrap CSS,看看:doersguild.github.io/jQuery.print【参考方案2】:
你为什么不把这个任务交给 JS。在视图中添加一个 btn 并在单击事件上调用打印函数。
window.print();
https://www.w3schools.com/jsref/met_win_print.asp
【讨论】:
我可以使用 javascript 完成这项任务,但我如何在 javascript 函数中读取刀片文件??以上是关于打印 laravel Blade 的内容(使用 Laravel 5.2)的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 5 Blade 模板中包含 SVG 内容