Не нашел ничего подходящего.
Сделал как бы модуль, который может выводить различные бланки для печати в двух форматах:
1. В браузер, как изображение JPG
2. Как PDF документ
Почему "как бы"? Потому что файл get_bill.module пустой и используется только, как заглушка, для того, что бы можно было в нужном месте вызвать нужный шаблон используя функцию drupal_get_path. Но этот путь можно установить и при помощи variable_set. Кому, как нДравится. Работа модуля заканчивается редиректом на страницу с изображением для распечатки, по этому подключайте его в том месте , где вся нужная предварительная работа закончена.
Если все подключено, как модуль, то вызов осуществляется так:
require_once(drupal_get_path('module', 'get_bill')."/templates/$template.php");
Гда $template содержит название файла шаблона без расширения. Шаблон и картинка должны называться одинаково(за исключением расширений)
Краткое описание:
Для вывода заполненного бланка используется .JPG картинка с пустым бланком
Используя шаблоны можно выводить сколько угодно различных бланков в двух форматах
На каждый бланк один шаблон, который выводит и PDF и HTML
Если текст в строках вывода длиннее отведенного ему места, то его размер корректно уменьшается вплоть до size=1, но это перебор - ничего не прочтете
Русский текст отображается правильно и в Виндах и в Линукс (Но ТОЛЬКО СО ВЛОЖЕННЫМ ШРИФТОМ!!! Иначе - кракозябы). Как я этот шрифт генерил это отдельная песня
Подробное описание работы дано в файле шаблона. Вывод разделен по двум функциям только для удобства понимания. Все это можно объединить в одну.
Внимание, не удаляйте папку "temp"!!! В нее сохраняются временные файлы!!!
Для вывода PDF используется очень мощный класс TCPDF у класса есть огромные возможности, здесь используется только часть из них. Из стандартной поставки класса удалены примеры, шрифты и утилиты для их конвертации.
Используется последняя на сегодня версия TCPDF 4.5.019
Домашняя страница и возможности: TCPDF http://www.tcpdf.org/
Скачать: http://sourceforge.net/project/showfiles.php?group_id=128076
Документация: http://www.tecnick.com/pagefiles/tcpdf/doc/com-tecnick-tcpdf/TCPDF.html
Все делал для себя, кому не нравится - извините.
Кому помог - пожалуйста.
Прикрепляю изображение получившейся квитанции
И архив модуля, разделенный на две части.
Всем удачи!
P.S Заглядываю сюда не часто, т. ч. извините, если не сразу отвечу, если возникнут вопросы, но, вроде, там я все расписал, проблем быть не должно.
Вложение | Размер |
---|---|
example.jpg | 365.06 КБ |
get_bill.part1_.rar | 683.59 КБ |
get_bill.part2_.rar | 468.22 КБ |
Комментарии
вроде не пятница...
тихий ужас.
Там что, BMP с квитанцией в архиве?! с фига ли метр?
Прикольно! Не смотрел внутри, но раз речь идет про "генерацию шрифта", то подозреваю что квитанция = картинка, а PDF - это картинка с оберткой PDF. Так?
А почему не взяли MS Word XML? У меня подобные документы генерируются через XML-шаблон, чтобы открывались в ворде сразу - мало ли чего подредактировать надо ещё?
Хм, как пользователь будет вводить свои данные ?
в архиве jpeg 2048x1689
Попробовал. Не корректно передаётся сериализованный массив в URL.
Завтра попробую разобраться.
Вот код, который у меня заработал (вставлял в ноду):
<?php
$template = 'sberbank_pd4';
require_once(drupal_get_path('module', 'get_bill')."/templates/$template.php");
$data_array = array (
'recipient' => 'ООО Аврора', // Название получателя
'inn' => '1255567890', // ИНН - 10 цифр
'num_ord_recipient' => '12345678901234567890', // Номер счета получателя - 20 цифр
'bank_name_recipient' => 'Банк Америка', //Наименование банка получателя
'bik_bank_recipient' => '123456789', // БИК банка получателя - 9 цифр
'cor_ord_bank_recip' => '12345678901234567890', // Номер корреспондентского счета банка счета получателя - 20 цифр
'payment_name' => 'Оплата участия в конференции', // Наименование платежа
'payer_code' => 'Номер лицевого счета (код) плательщика', // Номер лицевого счета (код) плательщика
'fio' => 'Фамилия И. О.', // ФИО плательщика
'adress_payer' => '199243 г. Крыжопль ул. Кривошипная, д. 1, корпус забыл, кв. отсутствует', // Адрес плательщика
'rub' => '25000', // Сумма платежа рубли
'kop' => '00', // Сумма платежа копейки
);
$data_array['template'] = $template;
// Добавляем пробелы, чтоб вписать каждую цифру в ячейку:
$data_array['inn'] = trim(preg_replace('/(\d)/', "$1 ", $data_array['inn']));
$data_array['num_ord_recipient'] = trim(preg_replace('/(\d)/', "$1 ", $data_array['num_ord_recipient']));
$data_array['bik_bank_recipient'] = trim(preg_replace('/(\d)/', "$1 ", $data_array['bik_bank_recipient']));
$data_array['cor_ord_bank_recip'] = trim(preg_replace('/(\d)/', "$1 ", $data_array['cor_ord_bank_recip']));
get_bill_get_template('pdf', $data_array);
?>
Полезно и удобно! Ещё бы в действии посмотреть....
на диске хранится файл-шаблон, сохраненный в MS Word XML
в нужных полях шаблона напечатаны ключевые слова для замены - типа ФИОФИОФИО, 99.09.2009 и т.п.
далее модуль считывает файл, изменяет найденные поля-ключи на нужные - и выдаёт сразу в виде файла
можно подробнее? ПРИМЕР.
Решил удалить
пример на закрытом корпоративном портале
но общий смысл могу пояснить
вот файл XML (если открыть его для просмотра в текстовом редакторе):
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:sch
...
...
<w:r><w:rPr><w:noProof/></w:rPr><w:t>ФИОФИОФИО И.О.</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:noProof/>
...
...
далее заменяете эти ФИОФИОФИО И.О. на ваши Иванов И.И. кодом типа такого:
$file = preg_replace('/ФИОФИОФИО И\.О\./',"$fam $im.$ot.",$file);
А как подключить к этому форму для заполнения из которой данные идут в квитанцию?
скачайте подходящее утилиту для генерации PDF
это где взять?
А как сделать чтобы пользователь мог вписывать свои данные ?