我对自己的水平有很大的挑战。
标题是不言自明的:使用Laravel从表单(包括用户的签名)中生成PDF。
My laravel and general php level is basic
。我知道如何在laravel上建立一个基本博客(就像所有关注laracast或类似的家伙一样),但是我发现这很艰难,因为我发现同时有许多来自不同地方的概念,并且我还有很多空白知识。
至少知道哪些软件包是执行所有这些操作的最佳软件包,这至少对您很有帮助。我一直在尝试使用DOMPDF和https://github.com/szimek/signature_pad。但是我已经读过DOMPDF,我不能使用活动表单...我还检查了MPDF。
我主要需要的是视图,其中有一个表单,在该表单后有一个供用户签名的签名板,提交后会生成pdf。 / p>
关于阅读,学习和关注什么的任何起点?
在我看来,如何将签名的图像(该脚本在js上)与表单数据混合在一起似乎是珠穆朗玛峰。
我也无法想象是如何处理不同的控制器的。.
答案 0 :(得分:2)
拒绝接受您缺乏自行执行此操作的知识。提出这个要求并不令人感到羞耻,我想它毕竟会让您的生活更加轻松。
我的建议是将整个任务分解为您能够处理的适当子任务。我认为是:
创建可以提交的绝对普通的HTML表单。
为此,您将需要一个具有两个功能的控制器。表单提交后,一个函数将显示该表单,另一函数将处理提交的数据。
class MyFormController
{
public function getForm()
{
return view('my.form');
}
public function postForm(Request $request)
{
// do something with the form data in $request
}
}
我想你知道如何组合正确的HTML表单。
使用提交的表单数据生成PDF。
Laravel的大多数pdf生成器软件包的工作方式是使用刀片模板视图。对您来说,这实际上是非常有益的,因为您已经知道如何组合HTML视图!
因此,如果我们将其翻译成基于barryvdh/laravel-dompdf
包的代码,则会得到如下信息:
public function postForm(Request $request)
{
$pdf = PDF::loadView('my.pdf', [
'name' => $request->input('name'),
'address' => $request->input('address'),
// ... and more data if you like
]);
return $pdf->download('signed_form.pdf');
}
当然,我们还将需要一个刀片模板。根据名称,它将具有路径和文件名resources/views/my/pdf.blade.php
:
<table>
<tr>
<th>Name:</th>
<td>{{ $name }}</td>
</tr>
<tr>
<th>Address:</th>
<td>{{ $address }}</td>
</tr>
</table>
现在,由于我们具有表单和PDF生成本身,因此我们可以继续进行签名。
公平地讲,到目前为止,我从未做过类似的事情。但是经过快速搜索之后,我发现了JavaScript软件包szimek/signature_pad
,它看起来非常有前途。我认为设置非常容易解释,但是到目前为止,这是我所了解的:
<script src="...">
)添加到表单视图中。<input type="hidden" name="sig" id="sig">
)。<canvas>
HTML元素。给它一个标识符:<canvas id="signature">
。添加另一个脚本标签,但自定义JavaScript代码位于已添加的脚本标签下方。像这样:
<script type="text/javascript">
var canvas = document.getElementById('signature');
var signaturePad = new SignaturePad(canvas);
function onFormSubmit()
{
document.getElementById('sig').value = signaturePad.toDataURL();
}
</script>
您现在还必须将onsubmit="onFormSubmit()"
添加到您的<form ...>
标记中。该脚本的作用是首先初始化签名板,然后将隐藏的输入字段的值设置为签名板的内容。
sig
值添加到用于生成pdf的视图中。并且在视图本身中,您必须在新的图像元素中使用提交的sig
数据:<img src="{{ $sig }}">
如果幸运的话,我刚刚写的所有内容(无需任何测试)都可以立即使用。如果没有,您至少应该知道实现目标的步骤。
顺便说一句,您当然可以使所有视图看起来精美。但是请注意,PDF无法显示与HTML一样多的信息。因此,当您将视图转换为pdf时,您肯定会在某些时候丢失信息和样式。