понедельник, 5 ноября 2007 г.

Apache + php = PDF ???

В один прекрасный день заказчик попросил меня сделать в проекте PDF - репортинг. Ну, думаю, наконец-то разберусь толком с PDFlib или ClibPDF... Но не тут то оно было... PDF нужно было создать при помощи... APACHE (!)

Оказывается, есть такое Java приложение, которое после установки на Apache может генерировать PDF файлы. Это приложение называется FOP, страница загрузки: http://xmlgraphics.apache.org/fop/download.html (естественно, у вас должна быть установлена JVM)Сделать PDFку можно из файлов XML, XSL и так называемого "FO-документа".

Подробности здесь

пятница, 2 ноября 2007 г.

Создание XML на php

Все знают о DOM функциях в javascript. При помощи них можно создать или изменить дерево документа динамически. В языке php тоже предусмотрен целый набор DOM функций, причем они не требуют никаких дополнительных библиотек, так как являются частью ядра php.

Функции DOM очень удобно использовать при создании XML файлов.
Рассмотрим небольшой пример: нужно построить XML такого вида:


<?xml version="1.0" encoding="UTF-8"?>
<Товары>
<Клавиатура КоличествоКнопок="108">
<Бренд>Logitech</Бренд>
<Тип>проводная</Тип>
<Модель>KB-2025</Модель>
<Производитель>Тайвань</Производитель>
</Клавиатура>
</Товары>


Чтобы реализовать это при помощи DOM функций, создаем объект DOMDocument. Это следует сделать так:
$dom = new DOMDocument("1.0");

Основные методы, которые нам понадобятся:


  • $dom->createElement(имя_элемента) - создает XML элемент

  • $dom->createAttribute(имя_аттрибута) - создает аттрибут для элемента

  • $dom->createTextNode(текст) - создает текстовый элемент (узел)

  • $Node->appendChild(объект_Node) - применяет узел к указанному элементу


Далее приведен код с комментариями:

<?php
$dom = new DOMDocument("1.0");
// создаем корневой элемент 'Товары'
$root = $dom->createElement('Товары');
// создаем товар 'Клавиатура'
$keyb = $dom->createElement('Клавиатура');
// создаем аттрибут для клавиатуры
$q = $dom->createAttribute('КоличествоКнопок');
// применяем аттрибут для клавиатуры
$keyb->appendChild($q);
// добавляем элемент 'Клавиатура' к корневому элементу
$root->appendChild($keyb);

// создаем элемент 'Бренд'
$brand = $dom->createElement('Бренд');
// создаем текстовый узел
$txt = $dom->createTextNode('Logitec');
// записываем текст в содержимое тега 'Бренд'
$brand->appendChild($txt);

// располагаем 'Бренд' внутри тега 'Клавиатура'
$keyb = $dom->appendChild($brand);
// ...
?>


Таким же образом создаем все остальные элементы. После чего, мы можем сохранить получившийся XML файл:


// сохраняем файл
$dom->save('file.xml');

Кроме этого можно не сохранять данные в файл, а получить их в виде строки:

// получаем строку
$str = $dom->saveXML();