Модуль вывода квитанции Сбербанка. Форма ПД4

Главные вкладки

Аватар пользователя mkonk mkonk 2 марта 2009 в 17:04

Не нашел ничего подходящего.
Сделал как бы модуль, который может выводить различные бланки для печати в двух форматах:
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, но это перебор - ничего не прочтете

Русский текст отображается правильно и в Виндах и в Линукс (Но ТОЛЬКО СО ВЛОЖЕННЫМ ШРИФТОМ!!! Иначе - кракозябы). Как я этот шрифт генерил это отдельная песня Smile

Подробное описание работы дано в файле шаблона. Вывод разделен по двум функциям только для удобства понимания. Все это можно объединить в одну.

Внимание, не удаляйте папку "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.jpg365.06 КБ
Файл get_bill.part1_.rar683.59 КБ
Файл get_bill.part2_.rar468.22 КБ

Комментарии

Аватар пользователя igor701 igor701 2 марта 2009 в 22:32

Прикольно! Не смотрел внутри, но раз речь идет про "генерацию шрифта", то подозреваю что квитанция = картинка, а PDF - это картинка с оберткой PDF. Так?

А почему не взяли MS Word XML? У меня подобные документы генерируются через XML-шаблон, чтобы открывались в ворде сразу - мало ли чего подредактировать надо ещё?

Аватар пользователя VladSavitsky VladSavitsky 17 апреля 2009 в 1:21

Вот код, который у меня заработал (вставлял в ноду):

<?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);
?>

Аватар пользователя Freedom Freedom 22 апреля 2009 в 22:53

"igor701" wrote:
А почему не взяли MS Word XML? У меня подобные документы генерируются через XML-шаблон, чтобы открывались в ворде сразу - мало ли чего подредактировать надо ещё?

Полезно и удобно! Ещё бы в действии посмотреть....

Аватар пользователя igor701 igor701 28 апреля 2009 в 0:49

на диске хранится файл-шаблон, сохраненный в MS Word XML

в нужных полях шаблона напечатаны ключевые слова для замены - типа ФИОФИОФИО, 99.09.2009 и т.п.

далее модуль считывает файл, изменяет найденные поля-ключи на нужные - и выдаёт сразу в виде файла

Аватар пользователя ion ion 17 января 2010 в 15:49

igor701 wrote:
на диске хранится файл-шаблон, сохраненный в MS Word XML

в нужных полях шаблона напечатаны ключевые слова для замены - типа ФИОФИОФИО, 99.09.2009 и т.п.

далее модуль считывает файл, изменяет найденные поля-ключи на нужные - и выдаёт сразу в виде файла

можно подробнее? ПРИМЕР.

Аватар пользователя igor701 igor701 20 января 2010 в 11:32

пример на закрытом корпоративном портале
но общий смысл могу пояснить

вот файл XML (если открыть его для просмотра в текстовом редакторе):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?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);