Использование RTF шаблонов в PHP

Задача
Использование RTF шаблонов на входе и RTF файл результат на выходе. используем для автоматического заполнения договоров и некоторых актов. 99% правильного заполнения.
Единственные проблемы возникали при наличии в RTF исходнике лишнего мусора.

Класс PHP
Класс для PHP (назовём его rtf_template.php) будет выглядеть так


<?php
/**
 * Class RTF template
 * ©2011 Igor Artasevych, Andrey Yaroshenko
 *
*/
class RTF_Template{
/*****************************************************************************/
/* variables */
    private $content;
/* functions */
    /**
     * RTF_Template::__construct()
     *
     * @param mixed $filename
     * @return
     */
    public function __construct($filename){
        $this->content = file_get_contents($filename);
    }//construct
    /*************************************************************************/
    /**
     * RTF_Template::parse()
     *
     * @param mixed $block_name
     * @param mixed $value
     * @param string $start_tag
     * @param string $end_tag
     * @return
     */
    public function parse($block_name, $value, $start_tag = '\{', $end_tag = '\}'){
       $this->content = str_ireplace($start_tag.$block_name.$end_tag, $value, $this->content);
    }//
    /*************************************************************************/
    /**
     * RTF_Template::out_f()
     *
     * @param mixed $filename
     * @return
     */
    public function out_f($filename){
        file_put_contents($filename, $this->content);
    }//
    /*************************************************************************/
    /**
     * RTF_Template::out_h()
     *
     * @param mixed $filename
     * @return
     */
    public function out_h($filename){
        ob_clean();
        header("Content-type: plaintext/rtf");
        header("Content-Disposition: attachment; filename=$filename");
        echo $this->content;
    }//
    /*************************************************************************/
    /**
     * RTF_Template::out()
     *
     * @param mixed $filename
     * @return
     */
    public function out(){
        return $this->content;
    }//
}//class
?>

Класс реализует методы открытия файла шаблона, замены в нём переменных (указателей) типа {var_name}. Вывода в файл, в файл на лету и возврат как текст того, что получилось.

Реализация
Использовать этот класс очень просто. В RTF файле в том месте где нужна вставка создаём тег, например: {DATE}.


<?php
$rtf = new RTF_Template('имя файла шаблона');
$rtf->parse('DATE',  date('Y')); // вставит вместо тега <strong>{DATE}</strong> в шаблоне текущий год
$rtf->out_h('имя файла для создания на лету');
$rtf->out_f('имя файла для создания в каталоге');
echo $rtf->out(); //вывод в текущий viewport
?>

P.S.
При создании RTF через MSWORD желательно придерживаться некоторых правил:
1. Не создавать пустых тегов {}, а потом вписывать туда текст. Это надо делать по порядку – скобка, имя переменно, скобка. Так будет меньше мусора в RTF.

2. Документ должен быть приведён к одному языку. MSWORD должен думать, что у Вас в документе один язык. Для этого, после окончательного создания шаблона, нужно выделить всё и указать один язык.

Комментарии (2)

RSS свернуть / развернуть
Спасибо большое!!! Статья очень помогла.
+1
Это приятно)!
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
comments powered by Disqus