progicharles/doc-template

将.docx和.xlsx文件模板转换为PDF。

v1.0.0 2021-01-18 12:36 UTC

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}