PhpWord与GD 和图像处理 函数进行word文档数值替换以及合并插入图片
#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文档数值替换以及合并插入图片相关推荐
- java word添加图片_Java 替换word文档文字并指定位置插入图片
先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...
- python-docx对Word文档的指定位置(批量)插入图片
python-docx对Word文档的指定位置(批量)插入图片 任务 实现自动化办公,对请假条.docx文件实现自动插入请假人签名图片. 技术方案 1.python-docx python-docx是 ...
- 用 Python 自动生成 Word 文档并在指定位置插入图片
用Python生成Word文档 在指定位置插入图片 首先当然需要第三方库啦(▽) 天才第一步,第三方的库O(∩_∩)O哈哈~ 参照转发的是这位大佬的博客:https://blog.csdn.net/c ...
- 「Vue To Words」 - 教你在Vue项目中导出Word文档(包含表格合并,图片修改大小)
前言:最近在项目中遇到了,vue页面需要导出word文档,今日就进行记录一下,如有不对的地方,还请见谅 ^^ 简单说一下需求:需要导出的页面是表格页面,因为包含表格的嵌套和合并,其实最主要的就是导出页 ...
- java word替换图片_Java 替换word文档文字并指定位置插入图片
先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...
- Word处理控件Aspose.Words功能演示:使用 Java 在 MS Word 文档中进行邮件合并
Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...
- Word处理控件Aspose.Words功能演示:使用Java在MS Word文档中进行邮件合并
邮件合并是一种动态生成信件,信封,发票,报告和其他类型文档的便捷方法.使用邮件合并,您可以创建一个包含合并字段的模板文件,然后使用数据源中的数据填充这些字段. 假设您必须向20个不同的人发送一封信,并 ...
- C# 如何给Word文档设置背景颜色和背景图片
C# 如何给Word文档设置背景颜色和背景图片 Word文档在创建时,背景颜色都是白色的,这样的背景色比较单一,看久了以后也非常容易视觉疲劳,给文档设置一个合适的背景颜色或者添加好看的背景图片,不仅可 ...
- Word文档中实现:点击图片双击放大
Word文档中实现:点击图片双击放大 跌娣 2020-03-04 16:59:09 7895 已收藏 2 分类专栏: 其他 版权 忍不住来转载下文章,功能太好用了: 文章来源:脚本之家 文章网址: ...
最新文章
- oracle decode一个值对应多个值,如何使用Oracle的Decode函数进行多值判断
- [洛谷P4721]【模板】分治 FFT
- 软件开发者的最佳实践
- python最小二乘法拟合_Python 普通最小二乘法(OLS)进行多项式拟合
- Nginx使用upstream实现动静分离
- 3大细节让新站SEO更有竞争优势
- 为什么计算机报名无法选择福建,2020年9月福建计算机考试如何报名
- 企业信息化战略规划方法
- 3串口多串口双串口以及2串口UART转WiFi多跳通讯实现三
- 卡方分布、卡方独立性检验和拟合性检验理论及其python实现
- Apache apollo 配置说明及用户名和密码管理
- 编写一个程序实现顺序栈(假设栈中元素类型为char)的各种基本运算
- java --help_java help
- PPIO边缘云聚焦音视频底层技术,探索元宇宙“登月工程”
- 代码重复率检查工具jsinspect 检查重复代码,去掉冗余代码。
- 点击a标签,返回上一页
- VBA编程之操作单元格
- mysql导入pet表
- 再一次打破局限:“华为云会议”和“畅连”到底连接了什么
- 如何用AML中的Designer创建一个AML pipeline来处理数据
热门文章
- 1次演讲13次提到技术,马云在阿里巴巴年会上都说了什么?
- python 未知数求解 5个方程 5个未知数
- PassFab iPhone Backup Unlocker(itunes备份密码找回神器)官方中文版V5.2.10.2 | iphone备份密码解除工具下载 | itunes备份密码忘记怎么办
- 我做过超市里的收银员
- 计算机中常用寄存器功能,(转)汇编中各寄存器的作用
- Keras 1.0 与 2.0 中 Convolution1D 的区别(其实是tf1.0 2.0 区别)
- Tribon二次开发定制开发
- python的scrapy框架----->可以使我们更加强大,为打破写许多代码而生
- 易语言5.11完全破解补丁-支持静态编译
- HZF的 AC Dream