progicharles / doc-template
将.docx和.xlsx文件模板转换为PDF。
Requires
- php: ~7.0
- laravel/framework: >=5.6
- phpoffice/phpspreadsheet: ^1.9
- phpoffice/phpword: ^0.16.0
This package is not auto-updated.
Last update: 2024-09-27 00:30:43 UTC
README
Document Designer是一个Laravel包,允许从模板生成文档,并用一些用户数据填充它。当前版本的PHPWord支持Microsoft Office Open XML (OOXML或OpenXML)
Document Designer基于PHPWord。为了导出PDF,服务器上需要安装LibreOffice。
特性
- 从.docx文件处理模板
- 从.xlsx文件处理模板
- 导出为.docx、.xlsx和.pdf格式
- 文本变量替换
- 表格行重复
- 递归块重复
安装
包
composer require uccello/document-designer-core
LibreOffice
您可以在您的服务器操作系统上参考官方文档进行安装。
入门
您只需指定一个模板文件、一个输出文件名以及用于解析和填充模板的数据集
DocumentIO::process($templateFile, $outFile, $data);
$data
应该是一个关联数组,包含所有变量及其对应的数据以进行替换。
根据在$outFile
中给出的扩展名(.docx或.pdf),导出格式将是DOCX或PDF。
变量
$data = [ 'variableName' => 'Content of the variable', 'otherVariable' => 'Other content', ]
在模板文档中,您需要使用以下语法声明变量:${variableName}
表格
关联数组中的表格键需要带有t:
前缀。
$data = [ 't:variableName' => [ [ 'variableName' => 'dolor', 'otherVariable' => 'elit', ], [ 'variableName' => 'amet', 'otherVariable' => 'elit', ], ], ]
在模板文档中,您需要使用以下语法声明变量:${variableName}
所有模板文档的第一行包含与表格键同名变量的内容将被重复,其他变量的内容将被替换。
图像
关联数组中的图像键需要带有i:
前缀。
$data = [ 'i:imgVariable' => 'path/image.jpg', ]
在模板文档中,您需要使用以下语法声明变量:${imgVariable:[width]:[height]:[ratio]}
块
关联数组中的块键需要带有b:
前缀,并且以大写字母开头。
$data = [ 'b:BLOCK_NAME' => [ [ 'variableName' => 'dolor', 'otherVariable' => 'elit', ], [ 'variableName' => 'amet', 'otherVariable' => 'elit', ], ] ]
在模板文档中,您需要使用标志声明块的开始和结束
${BLOCK_NAME}
块内容...
${/BLOCK_NAME}
块的行为是递归的,这意味着它们可以包含变量、表格和其他块。
如果一个块包含一个与父块中另一个变量名称冲突的变量,则较深的块变量将优先替换。
示例
Php
use Uccello\DocumentDesignerCore\Support\DocumentIO; $templateFile = "path/template.docx"; $outFile = "path/out.pdf"; $data = [ 'var1' => 'lorem', 'var2' => 'ipsum', 'img1' => 'path/image.jpg', 't:tVar1' => [ [ 'tVar1' => 'dolor', 'tVar2' => 'sit', ], [ 'tVar1' => 'amet', 'tVar2' => 'consectetur', ], ], 'b:BLOCK' => [ [ 'var1' => 'adipiscing', 'var2' => 'elit', ], [ 'var1' => 'sed', 'var2' => 'do', ], [ 'var1' => 'eiusmod', 'var2' => 'tempor', ], ] ]; DocumentIO::process($templateFile, $outFile, $data);
Template.docx
这是一个简单的测试模板内容,包含两个变量 ${var1} 和 ${var2}
包含一个图像
${img1:300:200}
包含一个表格
以及一个块
${BLOCK}
这是一个块内容,包含两个变量 ${var1} 和 ${var2}
${/BLOCK}