Создание на PHP файла PDF из текстовых данных

Гость19 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
10.01.2009

НАВЫКИ

PHP5, Linux, опыт написания конвертеров в PDF (работа с текстом, изображениями и простыми таблицами), умение тестировать свой код.

ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ

Linux, Pentium4 или выше, PHP 5 или выше. Оптимизация кода по скорости выполнения.

ОПИСАНИЕ

Функция предназначена для формирования русскоязычного текста договора в формате pdf в режиме реального времени. Для этого используется шрифт Times New Roman 12. Форматирование договора можно видеть в примере по ссылке :

На вход функции CreateDogovor($title, $name1, $name2, $city, $date, $body, $sign, $stamp, $reqtable) подаются:

$title - название документа (в теле документа идёт жирным шрифтом, новая строка отделяется символом "\n", выравнивание по центру);

$name1 - наименование одной стороны (используется в нижнем колонтитуле);

$name2 - наименование другой стороны (используется в нижнем колонтитуле);

$city - город;

$date - дата;

$body - массив строк в некотором формате (см. ниже);

$sign - ссылка на графический файл в формате jpg с подписью (переменная может быть пустой), эта подпись размещается на каждой странице справа от $name1, если переменная пустая, то слева от $name1 располагается подчёркивание (место для подписи);

$stamp - ссылка на графический файл в формате jpg с печатью и подписью (переменная может быть пустой);

$reqtable - массив из восьми строк для заполнения таблицы с реквизитами.

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

Переменная $body содержит массив с последовательным списком всех строк тела договора. Если строка начинается без спецсимволов, то это просто новый абзац. Если строка начинается с номера, который отделён от текста пробелом, то это какой-то уровень нумерации. Первый уровень печатается жирным шрифтом. Остальные обычным. Цифры разделяются точками (1.1.1. - третий уровень отступа). Если строка начинается со знака "минус", то это ненумеруемый пункт и у него такой же отступ, как у строки документа из предыдущей строки массива + 1 см отступ для текста. Текст имеет выравнивание по обе стороны, весь текст с отступами, кроме первых абзацев без нумерации, выравнивается по одной линии на расстоянии +1 см от линии выравнивания номеров пунктов.

$reqtable - это данные для построения таблицы реквизитов в конце документа. Переменная представляет собой массив с шестью строками:

$reqtable[0] - реквизиты первой компании (новая строка отделяется символом "\n");

$reqtable[1] - реквизиты второй компании (новая строка отделяется символом "\n");

$reqtable[2] - должность подписывающего лица первой компании;

$reqtable[3] - должность подписывающего лица второй компании;

$reqtable[4] - фамилия и инициалы подписывающего лица первой компании;

$reqtable[5] - фамилия и инициалы подписывающего лица второй компании;

$reqtable[6] - наименование первой компании (печатается жирным шрифтом);

$reqtable[7] - наименование второй компании (печатается жирным шрифтом).

ПРИМЕР ИСПОЛЬЗОВАНИЯ

$title = "ДОГОВОР\nна оказание услуг";

$name1 = "Заказчик";

$name2 = "Исполнитель";

$city = "Москва";

$date = time();

$body[] = "Какой-то длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный текст";

$body[] = "1. Какой-то длинный-длинный длинный-длинный текст";

$body[] = "1.2. Какой-то длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный текст";

$body[] = "Какой-то длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный текст";

$body[] = "1.2.1. Какой-то длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный текст";

$body[] = "2. Какой-то текст";

$body[] = "- Какой-то длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный длинный-длинный текст";

$sign = "img/sign.jpg";

$stamp = "img/stamp.jpg";

$reqtable[0] = "ИНН 787978978\nКПП 67678\nЮр. Адрес 125454, Москва, ул. Космодемьянских, д. 345, корп. 1, стр. 67, офис 4574";

$reqtable[1] = "ИНН 687667878\nКПП 67678\nЮр. Адрес 125454, Москва, ул. Космодемьянских, д. 345, корп. 1, стр. 67, офис 4574";

$reqtable[2] = "Генеральный директор";

$reqtable[3] = "Главный конструктор";

$reqtable[4] = "Вий А.М.";

$reqtable[5] = "Петров А.М.";

$reqtable[6] = "ООО "Гватемалы"";

$reqtable[7] = "ООО "Гаваи"";

$pdf = CreateDogovor($title, $name1, $name2, $city, $date, $body, $sign, $stamp, $reqtable);

?>

ПРИМЕР ТОГО, ЧТО ДОЛЖНО ПОЛУЧИТЬСЯ ПО ВЁРСТКЕ

См. во вложении. Приведено в виде rtf, так как это удобнее. Нужно итоговый документ cверстать так же, но в pdf.

Заявки фрилансеров