模板生成器

dev-master 2016-01-03 21:47 UTC

This package is not auto-updated.

Last update: 2024-09-18 19:17:08 UTC


README

这是一个简单的文档文件模板系统。它使用文本替换,允许循环替换和基本过滤器。

安装

您可以使用composer安装此库

composer require bezirovoviku/temgen

要求

LibreOffice (2+) - 仅用于OPDF转换器

PhantomJS - 仅用于PPDF转换器

使用方法

首先,您需要包含生成器类

use Temgen\Generator;

然后按照以下方式使用生成器类

//Creates generator
$generator = new Generator();
//Adds basic filters
$generator->addFilters();
//Sets temporary folder used to store documents
$generator->setTmp('/tmp');
//Sets path to template file
$generator->setTemplate(new Document('template.html'));
//Generates zip archive from specified data
$generator->generateArchive(json_decode($this->data, true), 'archive.zip');

创建自定义过滤器

要创建自定义过滤器,您需要实现 \Temgen\Generator\Filter 接口

class MyFilter implements \Temgen\Generator\Filter
{
	/**
	 * Returns tag used to identify filter
	 *
	 * @return string tag identifing filter
	 */
	public function getTag() {
	  return 'myfilter';
	}
	
	/**
	 * Filter given arguments and return result
	 *
	 * @param \Temgen\Generator $generator generator calling this filter
	 * @param array           $context   replacing context
	 * @param array           $arguments arguments passed to filter
	 * @param string|null     $input     pipe input (if present)
	 * @return string result
	 */
	public function filter($generator, $context, $arguments, $input) {
	  return strtoupper($input);
	}
}

然后,您需要将此过滤器的实例添加到生成器实例中,如下所示

$generator = new Generator();
$generator->addFilter(new MyFilter());

现在,在这个生成器实例中,过滤器 MyFilter 将可以通过 {myfilter} 语法访问

导出PDF

这需要已安装的libreoffice

//Creates docx generator
$generator = new Generator\Docx();
//PDF converter
$converter = new Converter\OPDF();
//Adds basic filters
$generator->addFilters();
//Sets temporary folder used to store documents
$generator->setTmp('/tmp');
//Sets path to template file
$generator->setTemplate(new Document\Docx('template.docx'));
//Generates zip archive from specified data, converts using converter
$generator->generateArchive(json_decode($this->data, true), 'archive.zip', $converter);