Как стать автором
Поиск
Написать публикацию
Обновить

Генерация скана документа с печатью с помощью mPDF

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

Принято решение генерировать PDF, поскольку он везде читается и уже содержит разметку страниц (т.е. при печати на любом принтере будет выглядеть одинаково).

Для генерации выбрана библиотека mPDF. Не сказать, что это супер библиотека, но свое дело, хоть и медленно, делает. Образцы печатей с подписями получили от дизайнеров на прозрачных PNGшках. Наиболее простой способ использования mPDF — сгенерировать HTML и на его основе получить готовый файл. Проблема возникла, когда выяснилось, что mPDF крайне лимитировано воспринимает CSS в разрезе position. В итоге «положить» образ печати и подписи в нужное место документа методом позиционирования не получается. Беглый поиск по глобальной сети показал, что не я один страдаю такой незадачей, а решения вроде как и нет. И вдруг чудо: на буржуйском сайте было предложено простое и оригинальное решение. Суть решения заключается в позиционировании с помощью отрицательного margin.

$html = '

<body>
Some docuemnt text is here.

<br><br><br><br><br><br><br><br><br><br><br><br>
<div> Бендер О.  ________________</div>

<img style="float: left; margin: -2.5cm 0 0 1.5cm; image-resolution: 300dpi;" src="0002.png">

';

include("../mpdf.php");

$mpdf=new mPDF();
$mpdf->WriteHTML($html);
$mpdf->Output(); 

exit;


Результат:

image
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.