ThinkPhp使用PHPWord模板类生成报表页面(含文字图片)

   本文简单介绍如何在ThinkPHP3.2中使用PHPWord生成报表页面的word文档并下载,报表带文字和百度Echarts的图表图片。

    有关在ThinkPHP3.2中使用PHPWord,可以参考“thinkphp3.2集成phpword,生成word文档并下载”这篇文章。而使用模板创建word文档,步骤如下:

    一、新建word模板

    模板的格式如下图,在模板中需要替换的内容,使用${替换内容}代替内容。本文示例模板名称为“template.docx”。

    1-201104100G9115.png

    二、装载word模板    

    可以初始化“PhpOffice\PhpWord\TemplateProcessor”类或使用“PhpOffice\PhpWord\PhpWord”的loadTemplate方法,装载word模板。代码如下:

$document = new TemplateProcessor('wordfile/template.docx');
//载入模板文件
// $document = $PHPWord->loadTemplate('wordfile/temp.doc');

    三、设置模板字符串参数值

    通过模板类的setValue方法,设置模板的字符串参数值,代码如下:

$document->setValue('reportTitle', '温度监测综合日报');
$document->setValue('projectName', 'XX监测项目');
$document->setValue('addr', '陕西西安');
$document->setValue('startDate', '2020-01-01');
$document->setValue('endDate', '2020-10-01');

    四、设置模板图片参数值

    本文图片使用的是Echarts图表的getDataURL方法返回的图片内容,并通过post方法传递到服务端。如何将dataurl内容转换为图片,参考“PHP将canvas的dataurl转成图片image”。将图片保存到本地磁盘后,使用模板类的setImageValue方法,设置模板的图片参数,方法调用及参数构造如下代码(参数设置完成后,可以使用unlink删除临时图片):

// 图片处理
$img = I('post.temp');
$imgdata = substr($img, strpos($img, ",") + 1);
$decodedData = base64_decode($imgdata);
$filename = "wordfile/temp.png";
$pngfiles[] = $filename;

// 转存到硬盘
file_put_contents($filename, $decodedData);

// 设置图片参数
$picParam = array("path" => $filename, "width" => 400, "height" => 200);
$document->setImageValue('temp', $picParam);

//删除csv临时文件
unlink($filename);

    五、生成word文档

    通过以上步骤,设置完参数后,调用模板文档类的saveAs方法,生成word文件。代码如下:

$path = 'wordfile/report.docx';
$document->saveAs($path);

    六、效果图

    1-20110410291S19.png    

    注意:

        word模板和导出需使用docx,用doc会报错:Could not close zip file    

    完整代码如下:   

function createDoc()
{
    // word使用docx,用doc会报错:Could not close zip file
    $document = new TemplateProcessor('wordfile/template.docx');
    //载入模板文件
    // $document = $PHPWord->loadTemplate('wordfile/temp.doc');

    $document->setValue('reportTitle', '温度监测综合日报');
    $document->setValue('projectName', 'XX监测项目');
    $document->setValue('addr', '陕西西安');
    $document->setValue('startDate', '2020-01-01');
    $document->setValue('endDate', '2020-10-01');

    // 图片处理
    $img = I('post.temp');
    $imgdata = substr($img, strpos($img, ",") + 1);
    $decodedData = base64_decode($imgdata);
    $filename = "wordfile/temp.png";
    $pngfiles[] = $filename;

    // 转存到硬盘
    file_put_contents($filename, $decodedData);

    // 设置图片参数
    $picParam = array("path" => $filename, "width" => 400, "height" => 200);
    $document->setImageValue('temp', $picParam);

    //删除csv临时文件
    unlink($filename);

    $path = 'wordfile/report.docx';
    $document->saveAs($path);
    die();
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP是一种开源的PHP开发框架,它提供了丰富的功能和工具,可以用来快速高效地开发Web应用程序。在ThinkPHP框架中,我们可以使用第三方库或扩展来生成Word文档。 其中,PHPWord是一个流行的第三方库,可以通过它来生成Word文档。我们可以在ThinkPHP框架中使用Composer安装PHPWord库,然后通过加载和实例化类来创建Word文档。 下面是一个基本的示例代码,展示了在ThinkPHP框架中如何生成Word文档: 1. 首先,通过在项目根目录中的composer.json文件中添加PHPWord依赖项,并运行composer install安装库: ``` { "require": { "phpoffice/phpword": "0.17.*" } } ``` 2. 在ThinkPHP中的某个控制器方法中,引入PHPWord库并使用它来生成Word文档: ``` use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\IOFactory; public function generateWord() { // 实例化PhpWord对象 $phpWord = new PhpWord(); // 创建一个新的节 $section = $phpWord->addSection(); // 添加文本到节中 $section->addText('Hello, World!'); // 保存Word文档 $filePath = '/path/to/save/document.docx'; $phpWord->save($filePath); // 返回生成的文档路径等信息 return [ 'file_path' => $filePath, 'file_size' => filesize($filePath) ]; } ``` 以上代码中,我们首先实例化了一个PhpWord对象,然后创建了一个节和添加了文本内容。最后,通过调用save方法保存Word文档,并返回生成的文档路径和大小等信息。 通过这样的方式,我们可以在ThinkPHP框架中快速生成Word文档,并按需修改和扩展生成文档的内容和格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值