Нужно клиентам выгружать сертификат в pdf формате

В общем проблема такая. Нужно клиентам выгружать сертификат в pdf формате. И клиенту нужно в этом сертификате прописывать его данные.
Сделали верстку сертификата в html, чтобы можно было менять в нем данные. Теперь пытаемся выгрузить из html в pdf, используя mpdf. В итоге mpdf выгружает криво. Можно ли как-нибудь сделать нормальную выгрузку через mpdf? Или можно ли решить нашу проблему как-нибудь по другому?
Александр Туниеков
07 марта 2017, 20:42
modx.pro
3
2 512
0
Поблагодарить автора Отправить деньги

Комментарии: 8

UDAV
08 марта 2017, 00:06
+2
Вот что ты хочешь услышать? Ответ: Да, можно!… доволен?
Где код, где хотя бы превью в чем кривота отображается и тд?
    Дмитрий
    08 марта 2017, 00:38
    0
      Александр Туниеков
      09 марта 2017, 19:55
      0
      Извиняюсь. Протупил. В итоге решили сделать картинки сертификатов и накладывать на них текст. И потом уже выгружать в пдф. Картинку mpdf выгружает. Осталось только разобраться ка наложить текст.
      Kirill A. Rusanov
      08 марта 2017, 21:02
      +1
      wkhtmltopdf хорошо работает.
        Александр Туниеков
        09 марта 2017, 19:55
        0
        Только чтоб его поставить нужен vds
          Андрей Коробков
          13 марта 2017, 14:04
          0
          Не обязательно — пробовал не везде, но на таймвебе сработало следующее — загрузил бинарник в папку, права на него 744 — вполне себе работает.
        Prihod
        09 марта 2017, 21:35
        +1
        в PHPExcel есть возможность работать с pdf
          Александр Туниеков
          10 марта 2017, 00:35
          1
          0
          Может кому-то понадобиться опишу решение задачи. Мне понадобилось два дня чтоб пробраться через все баги.
          Сверстаный html макет сертификата в mpdf выгружался криво. Одна страница растягивалась на 3 страницы. Не подгружались фоновые картинки. В итоге решили сертификаты делать картинками, а на них уже накладывать номер и код сертификата.
          Во первых нужен сам mpdf. Он ставиться через composer. Но ставить через composer так не разобрался как. Поступил проще установил компонент PDFresource. В нем уже есть последняя настроенная версия mpdf.
          Итоговый сниппет html2pdf:
          <?php
          require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/core/components/pdfresource/vendor/mpdf/mpdf/mpdf.php'); // путь до mpdf
          $mpdf = new mPDF(); 
          $mpdf->list_indent_first_level = 0;
          $mpdf->SetDisplayMode('fullpage');
          switch($_GET['product']){
              case '218':
                  $img='http://mysite.ru/assets/components/html2pdf/sertifikat-lichniy-vrach-plus.jpg';
                  break;
              case '219':
                  $img='http://mysite.ru/assets/components/html2pdf/sertifikat-lichniy-vrach-semeynoe-zdorovye.jpg';
                  break;
              case '217': default:
                  $img='http://mysite.ru/assets/components/html2pdf/sertifikat-lichniy-vrach-standart.jpg';
                  break;
          }
          $t=$modx->getChunk('sertifikat_html',array(
              'img'=>$img,
              'nomer'=>$_GET['nomer'],
              'code'=>$_GET['code'],
              ));
          //return $t;
          $mpdf->WriteHTML($t, 0); /*формируем pdf. С ключом 0 обрабатывает стили css.*/
          $mpdf->Output('mpdf11.pdf', 'I'); // вывод pdf в браузер. С ключом 'D' выводит файл на загрузку.
          exit; // без этой команды в браузер выпадают ероглифы
          Итоговый чанк sertifikat_html:
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          <html lang="ru">
          <head>
          	<meta charset="utf-8">
          </head>
          
          <body>
          <div class="example2">
              
              <img src="[[+img]]"  >
              <div style="margin-top: -895px;padding-left:80px;"><span>[[+nomer]]</span></div>
              <div style="margin-top: -20px;padding-left:470px;"><span>[[+code]]</span></div>
          </div>
          </body>
          </html>
          В mpdf стили position:absolute обрабатываются ограниченно. Пришлось долго возиться, чтобы наложить текст на картинку. Решилось все стилем margin-top с отрицательными значениями. Причем те же стили примененные к span эффекта не давали. Только div выручил.
          Сейчас все наконец-то работает :)
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            8