打印 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 Blade @guest 指令用于多个守卫

TODO:Laravel 使用blade标签布局页面

在 Laravel 5 Blade 模板中包含 SVG 内容

在带有 Blade 的 Laravel 4 中看不到内容视图中的变量

Laravel/Blade,内容中的模板内容

laravel框架总结 -- blade模板引擎