Laravel - Создать PDF из формы, включая также подпись пользователя - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть большой вызов для моего уровня.

Название не требует пояснений: Создание PDF из формы, включая также подпись пользователя , используя Laravel.

My laravel and general php level is basic.Я знаю, как создать базовый блог на laravel (как и все парни, которые следили за laracasts или подобным), но этот мне кажется трудным, потому что я вижу, что в одно и то же время происходит много концепций из разных мест, и у меня много пробеловзнание.

Было бы по крайней мере очень полезно знать, какие пакеты являются лучшими для всего этого.Я пытался с DOMPDF и https://github.com/szimek/signature_pad. Но я читал, что с DOMPDF я не могу использовать активные формы ... Я также проверил MPDF.

Что мне в основном нужноэто представление, где есть форма, где есть подпись, чтобы пользователь мог подписать подпись после формы, и это, после отправки, генерирует pdf.

Любые начальные точки о том, что читать, учись, фокусируйся?

Уже как смешать изображение подписи, которое написано на js, с данными формы мне кажется everest.

Что я могуне представляю, как бороться с разными контроллерами ..

1 Ответ

0 голосов
/ 23 ноября 2018

Снимаю шляпу за то, что признал, что тебе не хватает знаний, чтобы сделать это самостоятельно.Не стыдно спрашивать, и я думаю, это все-таки облегчит вашу жизнь.

Мой совет - разбить всю задачу на подходящие подзадачи, которые вы сможете выполнить.На мой взгляд, это:

  1. Создайте абсолютно нормальную HTML-форму, которую вы можете отправить. Для этого вам понадобится один контроллер с двумя функциями.Одна функция будет отображать форму, а другая будет обрабатывать отправленные данные, как только форма будет отправлена.

    class MyFormController
    {
        public function getForm()
        {
            return view('my.form');
        }
    
        public function postForm(Request $request)
        {
            // do something with the form data in $request
        }
    }
    

    Я думаю, вы знаете, как собрать правильную форму HTML.

  2. Создание PDF-файла с данными отправленной формы. Большинство генераторов пакетов PDF в Laravel работают с помощью представления шаблона лезвия.Для вас это на самом деле весьма полезно, потому что вы уже знаете, как собрать представление 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>
    
  3. Теперь, когда у нас есть форма и сама генерация 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.

...