#PhpWord与GD 和图像处理 函数进行word文档数值替换以及合并插入图片

代码示例

代码如下(示例):

public function test(){//读取模板$templateProcessor = new TemplateProcessor("upload/image/a.docx");//创建图片$url = $this->createImage();//替换值  把字符串变量替换成图片$templateProcessor->setImageValue('image', ['path' => $url,  //路径'width' => '100px', //宽度'height' => '100px', //高度]);//保存至新地址新名称$templateProcessor->saveAs('upload/image/a1.docx');//第二个添加图片//        $word =IOFactory::load(UrlServer::setFileUrl('upload/image/a1.docx'));//        $sec=$word->addSection();//        $sec->addImage(UrlServer::getFileUrl("upload/image/a.png"),null);//       $objWriter = IOFactory::createWriter($word);////        $objWriter->save((UrlServer::setFileUrl('upload/image/a11.docx')));//        $templateProcessor=new TemplateProcessor(UrlServer::getFileUrl("upload/image/a1.docx"));//        dump($templateProcessor);}/*** 创建并合并图片** @return void*/public function createImage(){//读取图片模板$im = imagecreatefrompng('upload/image/b.png');//设置图片属性$base = ['border' => 10, //图片外边框'file_path' => 'upload/img/', //图片保存路径'title_height' => 30, //报表名称高度'title_font_size' => 16, //报表名称字体大小'font_ulr' => '', //字体文件路径'text_size' => 12, //正文字体大小'row_hight' => 30, //每行数据行高'filed_id_width' => 60, //序号列的宽度'filed_name_width' => 120, //玩家名称的宽度'filed_data_width' => 100, //'table_header' => ['序号', '昵称', '数据1', '数据2', '数据3', '数据4', '数据5'], //表头文字'column_text_offset_arr' => [45, 90, 55, 55, 55, 65, 65], //表头文字左偏移量'row_text_offset_arr' => [50, 110, 90, 90, 90, 90, 90], ///数据列文字左偏移量];//        $base['img_width']=200;//        $base['img_height']=200;//        $img = imagecreatetruecolor(200, 200);//创建指定尺寸图片//        $bg_color = imagecolorallocate($img, 200, 200, 200);//设定图片背景色//        $text_coler = imagecolorallocate($img, 200, 0, 0);//设定文字颜色$text_coler = imagecolorallocate($im, 200, 0, 0); //设定文字颜色//        $white_coler = imagecolorallocate($img, 255, 255, 255);//设定边框颜色//        $border_coler = imagecolorallocate($img, 0, 0, 0);//设定边框颜色//        imagefill($img, 0, 0, $bg_color);//填充图片背景色    //先填充一个黑色的大块背景//        imagefilledrectangle($img, $base['border'], $base['border'] + $base['title_height'], $base['img_width'] - $base['border'], $base['img_height'] - $base['border'], $border_coler);//画矩形//再填充一个小两个像素的 背景色区域,形成一个两个像素的外边框//向图片上添加文字imagestring($im, 5, 100, 100, "hello", $text_coler);$save_path = $base['file_path'] . "abc.png";if (!is_dir($base['file_path'])) {mkdir($base['file_path'], 0777, true); //可创建多级目录}//        imagecopymerge($im, $img, imagesx($im) - imagesx($img) - 10, imagesy($im) - imagesy($img) - 10, 0, 0, imagesx($img), imagesy($img), 50);//合并图片$res = imagepng($im, $save_path);return $save_path;}//demo函数public function createTable(){$data = array(); //生成演示数据$params = ['row' => 11, //数据的行数'file_name' => '1.png','title' => '数据表','table_time' => '2018-4-29 22:50:43','data' => $data];$base = ['border' => 10, //图片外边框'file_path' => 'upload/img/', //图片保存路径'title_height' => 30, //报表名称高度'title_font_size' => 16, //报表名称字体大小'font_ulr' => '', //字体文件路径'text_size' => 12, //正文字体大小'row_hight' => 30, //每行数据行高'filed_id_width' => 60, //序号列的宽度'filed_name_width' => 120, //玩家名称的宽度'filed_data_width' => 100, //'table_header' => ['序号', '昵称', '数据1', '数据2', '数据3', '数据4', '数据5'], //表头文字'column_text_offset_arr' => [45, 90, 55, 55, 55, 65, 65], //表头文字左偏移量'row_text_offset_arr' => [50, 110, 90, 90, 90, 90, 90], ///数据列文字左偏移量];$base['img_width'] = $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5 + $base['border'] * 2; //图片宽度$base['img_height'] = $params['row'] * $base['row_hight'] + $base['border'] * 2 + $base['title_height']; //图片高度$border_top = $base['border'] + $base['title_height']; //表格顶部高度$border_bottom = $base['img_height'] - $base['border']; //表格底部高度$base['column_x_arr'] = [$base['border'] + $base['filed_id_width'], //第一列边框线x轴像素$base['border'] + $base['filed_id_width'] + $base['filed_name_width'], //第二列边框线x轴像素$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 1, //第三列边框线x轴像素$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 2, //第四列边框线x轴像素$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 3, //第五列边框线x轴像素$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 4, //第五列边框线x轴像素$base['border'] + $base['filed_id_width'] + $base['filed_name_width'] + $base['filed_data_width'] * 5, //第五列边框线x轴像素];$img = imagecreatetruecolor($base['img_width'], $base['img_height']); //创建指定尺寸图片$bg_color = imagecolorallocate($img, 255, 255, 255); //设定图片背景色$text_coler = imagecolorallocate($img, 0, 0, 0); //设定文字颜色$border_coler = imagecolorallocate($img, 0, 0, 0); //设定边框颜色$white_coler = imagecolorallocate($img, 255, 255, 255); //设定边框颜色imagefill($img, 0, 0, $bg_color); //填充图片背景色    //先填充一个黑色的大块背景imagefilledrectangle($img, $base['border'], $base['border'] + $base['title_height'], $base['img_width'] - $base['border'], $base['img_height'] - $base['border'], $border_coler); //画矩形//再填充一个小两个像素的 背景色区域,形成一个两个像素的外边框imagefilledrectangle($img, $base['border'] + 2, $base['border'] + $base['title_height'] + 2, $base['img_width'] - $base['border'] - 2, $base['img_height'] - $base['border'] - 2, $bg_color); //画矩形    //画表格纵线 及 写入表头文字foreach ($base['column_x_arr'] as $key => $x) {imageline($img, $x, $border_top, $x, $border_bottom, $border_coler); //画纵线//            imagettftext($img, $base['text_size'], 0, $x - $base['column_text_offset_arr'][$key] + 1, $border_top + $base['row_hight'] - 8, $text_coler, null, $base['table_header'][$key]);//写入表头文字}//    //画表格横线foreach ($params['data'] as $key => $item) {$border_top += $base['row_hight'];imageline($img,$base['border'],$border_top,$base['img_width'] - $base['border'],$border_top,$border_coler);//            imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][0] - $base['row_text_offset_arr'][0], $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $key + 1);//写入序号$sub = 0;foreach ($item as $value) {$sub++;//                imagettftext($img, $base['text_size'], 0, $base['column_x_arr'][$sub] - $base['row_text_offset_arr'][$sub], $border_top + $base['row_hight'] - 10, $text_coler, $base['font_ulr'], $value);//写入data数据}}    //计算标题写入起始位置//        $title_fout_box = imagettfbbox($base['title_font_size'], 0, $base['font_ulr'], $params['title']);//imagettfbbox() 返回一个含有 8 个单元的数组表示了文本外框的四个角://        $title_fout_width = $title_fout_box[2] - $title_fout_box[0];//右下角 X 位置 - 左下角 X 位置 为文字宽度//        $title_fout_height = $title_fout_box[1] - $title_fout_box[7];//左下角 Y 位置- 左上角 Y 位置 为文字高度    //居中写入标题//        imagettftext($img, $base['title_font_size'], 0, ($base['img_width'] - $title_fout_width) / 2, $base['title_height'], $text_coler, $base['font_ulr'], $params['title']);    //写入制表时间//        imagettftext($img, $base['text_size'], 0, $base['border'], $base['title_height'], $text_coler, $base['font_ulr'], '时间:' . $params['table_time']);$save_path = $base['file_path'] . $params['file_name'];if (!is_dir($base['file_path'])) {mkdir($base['file_path'], 0777, true); //可创建多级目录}imagepng($img, $save_path); //输出图片,输出png使用imagepng方法,输出gif使用imagegif方法    echo '';}//        create_table();

总结

可以实现word文档加入图片,替换图片,或者实现图片水印效果进行赋值到word中,现实案例:盖章,签名,二维码分享海报等
文档路径:https://www.php.net/manual/zh/book.image.php

PhpWord与GD 和图像处理 函数进行word文档数值替换以及合并插入图片相关推荐

  1. java word添加图片_Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...

  2. python-docx对Word文档的指定位置(批量)插入图片

    python-docx对Word文档的指定位置(批量)插入图片 任务 实现自动化办公,对请假条.docx文件实现自动插入请假人签名图片. 技术方案 1.python-docx python-docx是 ...

  3. 用 Python 自动生成 Word 文档并在指定位置插入图片

    用Python生成Word文档 在指定位置插入图片 首先当然需要第三方库啦(▽) 天才第一步,第三方的库O(∩_∩)O哈哈~ 参照转发的是这位大佬的博客:https://blog.csdn.net/c ...

  4. 「Vue To Words」 - 教你在Vue项目中导出Word文档(包含表格合并,图片修改大小)

    前言:最近在项目中遇到了,vue页面需要导出word文档,今日就进行记录一下,如有不对的地方,还请见谅 ^^ 简单说一下需求:需要导出的页面是表格页面,因为包含表格的嵌套和合并,其实最主要的就是导出页 ...

  5. java word替换图片_Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...

  6. Word处理控件Aspose.Words功能演示:使用 Java 在 MS Word 文档中进行邮件合并

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...

  7. Word处理控件Aspose.Words功能演示:使用Java在MS Word文档中进行邮件合并

    邮件合并是一种动态生成信件,信封,发票,报告和其他类型文档的便捷方法.使用邮件合并,您可以创建一个包含合并字段的模板文件,然后使用数据源中的数据填充这些字段. 假设您必须向20个不同的人发送一封信,并 ...

  8. C# 如何给Word文档设置背景颜色和背景图片

    C# 如何给Word文档设置背景颜色和背景图片 Word文档在创建时,背景颜色都是白色的,这样的背景色比较单一,看久了以后也非常容易视觉疲劳,给文档设置一个合适的背景颜色或者添加好看的背景图片,不仅可 ...

  9. Word文档中实现:点击图片双击放大

    Word文档中实现:点击图片双击放大 跌娣 2020-03-04 16:59:09  7895  已收藏 2 分类专栏: 其他 版权 忍不住来转载下文章,功能太好用了: 文章来源:脚本之家 文章网址: ...

最新文章

  1. oracle decode一个值对应多个值,如何使用Oracle的Decode函数进行多值判断
  2. [洛谷P4721]【模板】分治 FFT
  3. 软件开发者的最佳实践
  4. python最小二乘法拟合_Python 普通最小二乘法(OLS)进行多项式拟合
  5. Nginx使用upstream实现动静分离
  6. 3大细节让新站SEO更有竞争优势
  7. 为什么计算机报名无法选择福建,2020年9月福建计算机考试如何报名
  8. 企业信息化战略规划方法
  9. 3串口多串口双串口以及2串口UART转WiFi多跳通讯实现三
  10. 卡方分布、卡方独立性检验和拟合性检验理论及其python实现
  11. Apache apollo 配置说明及用户名和密码管理
  12. 编写一个程序实现顺序栈(假设栈中元素类型为char)的各种基本运算
  13. java --help_java help
  14. PPIO边缘云聚焦音视频底层技术,探索元宇宙“登月工程”
  15. 代码重复率检查工具jsinspect 检查重复代码,去掉冗余代码。
  16. 点击a标签,返回上一页
  17. VBA编程之操作单元格
  18. mysql导入pet表
  19. 再一次打破局限:“华为云会议”和“畅连”到底连接了什么
  20. 如何用AML中的Designer创建一个AML pipeline来处理数据

热门文章

  1. 1次演讲13次提到技术,马云在阿里巴巴年会上都说了什么?
  2. python 未知数求解 5个方程 5个未知数
  3. PassFab iPhone Backup Unlocker(itunes备份密码找回神器)官方中文版V5.2.10.2 | iphone备份密码解除工具下载 | itunes备份密码忘记怎么办
  4. 我做过超市里的收银员
  5. 计算机中常用寄存器功能,(转)汇编中各寄存器的作用
  6. Keras 1.0 与 2.0 中 Convolution1D 的区别(其实是tf1.0 2.0 区别)
  7. Tribon二次开发定制开发
  8. python的scrapy框架----->可以使我们更加强大,为打破写许多代码而生
  9. 易语言5.11完全破解补丁-支持静态编译
  10. HZF的 AC Dream