Печать отчетов в PHP

NIMahno

Guest
Печать отчетов в PHP

Необходимо печатать формы отчетности. Есть ли способы удобного описания бланков, предназначенных для печати (например, в форме текстовых файлов с указанием полей и переменных), которые могли бы быть использованы при получении документов на сайте, написнном на PHP+MySQL
 

young

Новичок
Если ты хочешь упростить это дело используй Технологию Template.

Если хочешь что бы это было действительно красиво, используй ФОРМАТ PDF.

Все зависит от требований.

Когда я последний раз писал формы отчетов, главным требованием к ним было, что бы одной кнопкой БОСС их отпечатал, что бы они красиво выглядели и ему удобно было их читать за чашкой кофе :)
 

NIMahno

Guest
Простите, я, ну скажем так, не очень большой специалист в этой всей технологии, поэтому - хоть немного разъяснений.
Итак:
1. Кто такие Template (ссылочку хотя бы для разъяснений)?
2. Каким образом можно создавать файлы в формате PDF из PHP и всовывать туда собственные данные (тоже - хотя бы ссылочку)?
3. Ну и совсем чайниковский вопрос - а что даст XML?
 

_RVK_

Новичок
Если тебе нужен внешний вид то PDF конечно лучший вариант. Но мне кажется что для несложных отчетов это слишком...
XML удобен для организации шаблонов отчетов а с помощью XSLT легко его преобразовать в HTML.
 

young

Новичок
Что представляет собой Template на пальцах.

У тебя есть такой HTML:

PHP:
Дорогой <b>{username}</b>!

В этом месяце ты потратил {money} Денег!!!

Заплати {tax} налогов, <b> Срочно! </b>!


Сегодня <p class="date">{date}</p>, c уважением <a href="mail-to:support@com">{supportmail}</p>.
Потом, в совем скрипте, ты просто подставляешь эти переменные задав в определенный метод массив с данными и получаешь готовый HTML.
 

_RVK_

Новичок
Вот пример: Здесь в шаблон подставляются значения переданные формой.
PHP:
if (file_exists($tpl_file_name))  //Если файл шаблона существует
  {
  $tf=fopen($tpl_file_name, "r");
  $templete_text = fread($tf, filesize($tpl_file_name));
  reset($_POST);
  while (list($key,$value)=each($_POST)) //Читаем имя и значение переменной
  {
   $pattern="'{".$key."}'si";
   $replacement="$value";
   $templete_text=preg_replace($pattern,$replacement,$templete_text); //Заменяем имя в шаблоне на значение
  }
  
 }
 else
  {
   print 'Файл шаблона не найден';
  }
Но всё же советую XML+XSLT... Да и в будующем пригодится...
 

young

Новичок
Фи.

PHP:
<?
  include "./news.conf";

  $tpl = new template(TPL_ROOT);
  $tpl->set_file("out", "developer.tpl");

  $tpl->set_block("out", "selectitem", "_selectitem");

  foreach ($topic_list as $key=>$val) {
    $tpl->set_var(array(
      "VAL" => $names[$key],
      "NAME" => $val
    ));
    $tpl->parse("selectout", "selectitem", true);
  }
  $tpl->set_var("SELECTBODY", $tpl->get("selectout"));
  $tpl->parse("RESULT", "out");

  echo $tpl->get("RESULT");
?>
 

.des.

Поставил пиво кому надо ;-)
[offtopic]
young :) о ты тоже пользуешься этим движком...
тогда вопрос к тебе :) как на нем нарисовать дерево.
у меня как то возник такой вопрос.. но в условиях большой спешки.. пришлось написать свою замену.. для конкретного случая... и вот пока разобраться руки не дошли.

Вот тестовый пример.
PHP:
//--------------------------------------------------------------------------------
// tpl
//--------------------------------------------------------------------------------
<UL>
<!-- BEGIN ChapterBlock -->
<LI> Chapter {chapter} 
	<OL>
<!-- BEGIN PageBlock -->
	<LI> Page {page}
<!-- END PageBlock -->
	</OL>
<!-- END ChapterBlock -->
</UL>
PHP:
//--------------------------------------------------------------------------------
// code
//--------------------------------------------------------------------------------
<? 
$chapters=array(
	0 => 'Beginning', 
	1 => 'End'
	); 

$pages[0]=array(
	0 => 'Getting Started', 
	1 => 'Setting it up', 
	2 => 'Positioning'
	); 

$pages[1]=array(
	0 => 'Wrapping it up', 
	1 => 'Clean up'
	); 


$T->set_file('input_three', 'three.ihtml');
$T->set_block('PageBlock', 'PBlock');
$T->set_block('ChapterBlock', 'CBlock');
for ($i=0; $i<sizeof($chapters); $i++) {
	$T->set_var('PBlock', ''); 
	for ($j=0; $j<sizeof($pages[$i]); $j++) { 
		$T->set_var('page', $pages[$i][$j]); 
		$T->parse('PBlock', 'PageBlock', true);
		} 
	$T->set_var('chapter', $chapters[$i]); 
	$T->parse('CBlock', 'ChapterBlock', true); 
	} 
$T->pparse('Output', 'input_three'); 
?>
ну собственно этот пример не полностью работоспособен.. выводится только
1. Beginning
&nbsp;&nbsp;&nbsp;2. Getting started
 

_RVK_

Новичок
COOL :)
Но для примера не подходит. Это класс для обработки шаблона. А что у тебя там в методах? Как они работают? Для поснения принципов не подходит, ИМХО.
 

young

Новичок
young о ты тоже пользуешься этим движком...
тогда вопрос к тебе как на нем нарисовать дерево.
В отдельную тему и по подробней.
Дерево я когда-то рисовал :)
 

_RVK_

Новичок
Автор оригинала: .des.
Diesel PHPLib
Знаю. Но нужен пример принципа а не готовая библиотека.

А всё что мне надо я сам пишу. И другим новичкам советую. Написал своё. А потом сравнил с тем что пишут гуру. Кстати довольно часто гордость за себя испытываешь... Но это уже совсем другая история.
 

.des.

Поставил пиво кому надо ;-)
2young все нормально displayed :))) так что проблемы все таки не в ссылке :)
 

Alexandre

PHPПенсионер
а все-таки для формирования нормальных юридических документиов, таких как платежка, договор на оказание услуг...и пр... с уже подстановленными реквизитами советую использовать pdf lib.

формат pdf поддерживает большинство браузеров и если необходимо его распечаталь то не будет проблем....

Сами знаете какая печать html кода...
такую платежку ни один банк не примет....
а если учесть что каждый браузер печатает по своему....


технология XML-XSLT хороша для формирования только HTML кода, хотя теоретически можно формировать и pdf и звуковый документы.

Лично я имею опыт на примере передачи xml данных с помощью XSLT формировать команды SQL (INSERT в частности)

ИТОГО:
----------

выбранный инструмент зависит от цели....для простых отчетов достаточно {template} или XML-XSLT

для юр. документов желательно pdf
 

Alexandre

PHPПенсионер
кстати собираюсь сделать класс для формирования документов в RTF
 
Сверху