phpword使用整理

news2024/11/28 14:48:59

目录

介绍

安装

创建文档

设置默认字体和字号

设置文本样式

编号标题

换行符

分页符

超链接

创建表格

添加图片

文件保护

加载word文件

内容转化为html

保存

模板替换

格式

加载模板

替换字符串

替换图片

替换表格

总结

参考


介绍

PHPWord 是一个用纯 PHP 编写的库,它提供了一组用于写入和读取不同文档文件格式的类。PHPWord 的当前版本支持 Microsoft Office Open XML (OOXML 或 OpenXML)、 OASIS Open Document Format for Office Applications (OpenDocument 或 ODF)、 Rich Text Format (RTF)、 HTML 和 PDF。

安装

composer require phpoffice/phpword

安装效果

composer.json中新增一行

"phpoffice/phpword": "^1.0",

创建文档

$phpWord = new \PhpOffice\PhpWord\PhpWord();

// 向文档添加任何元素都必须先添加 Section
$section = $phpWord->addSection();

// 添加默认字体样式Text 元素
$section->addText(
    '正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容正文内容'
);

设置默认字体和字号

文档的默认字体是Arial,字号为10号。可通过以下设置默认字体和字号:

$phpWord->setDefaultFontName('宋体');
$phpWord->setDefaultFontSize(10);

设置文本样式

可以通过三种方式自定义添加的Text元素的字体样式:

1.内联

// 设置段落样式:通过自定义内联字体
$section->addText(
    '段落1',
    array('name' => '宋体', 'size' => 30, 'bold' => true)
);

2.使用命名字体样式

将隐式创建新的字体样式对象

// 设置段落样式:通过使用命名字体样式自定义字体
$fontStyleName = 'oneUserDefinedStyle';
$phpWord->addFontStyle(
    $fontStyleName,
    array('name' => '宋体', 'size' => 20, 'color' => 'red', 'bold' => true)
);
$section->addText(
    '段落3',
    $fontStyleName
);

3.使用显式创建的字体样式对象

// 设置段落标题:使用显式创建的字体样式对象自定义字体的Text元素
$fontStyle = new \PhpOffice\PhpWord\Style\Font();
$fontStyle->setBold(true);
$fontStyle->setName('宋体');
$fontStyle->setSize(20);
$fontStyle->setColor('red');
$myTextElement = $section->addText('段落标题2');
$myTextElement->setFontStyle($fontStyle);

编号标题

定义编号样式和标题样式,并匹配两个样式,如下所示:

$phpWord->addNumberingStyle(
    'hNum',
    array('type' => 'multilevel', 'levels' => array(
        array('pStyle' => 'Heading1', 'format' => 'decimal', 'text' => '%1'),
        array('pStyle' => 'Heading2', 'format' => 'decimal', 'text' => '%1.%2'),
        array('pStyle' => 'Heading3', 'format' => 'decimal', 'text' => '%1.%2.%3'),
        )
    )
);
$phpWord->addTitleStyle(1, array('size' => 16), array('numStyle' => 'hNum', 'numLevel' => 0, 'align' => 'center'));
$phpWord->addTitleStyle(2, array('size' => 14), array('numStyle' => 'hNum', 'numLevel' => 1));
$phpWord->addTitleStyle(3, array('size' => 12), array('numStyle' => 'hNum', 'numLevel' => 2));

$section->addTitle('标题1', 1);
$section->addTitle('标题2', 2);
$section->addTitle('标题3', 3);

效果:

换行符

可设置行数

$section->addTextBreak(1);

分页符

$section->addPageBreak();

超链接

将'HeadingN'段落样式应用于TextRun或Link。

$textrun = $section->addTextRun('Heading1');
$textrun->addText('The is ');
$textrun->addLink('https://blog.csdn.net/json_ligege', 'My Blog', 'Link');
// Link
$section->addLink('https://blog.csdn.net/json_ligege', 'CSDN', 'Link', 'Heading2');

效果:

 

创建表格

表格样式

$styleTable = array('borderSize' => 6, 'borderColor' => 'red', 'cellMargin' => 80);
// 定义表格样式
$phpWord->addTableStyle('table_1', $styleTable);

文字样式

$fontStyle = array('bold' => true, 'align' => 'center');

定义表格

$table = $section->addTable('table_1');

// 定义表格宽度
$width = 1000;
$table->addRow(40);
$table->addCell($width)->addText("ID", $fontStyle);
$table->addCell($width)->addText("名称", $fontStyle);
$table->addCell($width)->addText("性别", $fontStyle);
$table->addCell($width)->addText("年龄", $fontStyle);
$table->addCell($width)->addText("爱好", $fontStyle);

$arr = [
    ['id' => 1, 'name' => '张三', 'gender' => '男', 'age' => 18, 'hobby' => '足球'],
    ['id' => 2, 'name' => '张四', 'gender' => '女', 'age' => 18, 'hobby' => '跑步'],
    ['id' => 3, 'name' => '账务', 'gender' => '男', 'age' => 18, 'hobby' => '羽毛球'],
];

foreach ($arr as $k => $v) {
    $table->addRow();
    $table->addCell($width)->addText($v['id']);
    $table->addCell($width)->addText($v['name']);
    $table->addCell($width)->addText($v['gender']);
    $table->addCell($width)->addText($v['age']);
    $table->addCell($width)->addText($v['hobby']);
}

效果:

 

添加图片

$section->addImage('./images/word1.jpg', array(
    'width'         => 100,
    'height'        => 100,
    'marginTop'     => 100,
    'marginLeft'    => 100,
    'wrappingStyle' => 'behind'
));

添加水印图

$header = $section->addHeader();
$header->addWatermark('./images/word1.jpg');

添加文件对象

$section->addOLEObject('./test.cls');

效果:

 点击可打开excel文件

文件保护

文档(或其中的一部分)可以受密码保护。

$documentProtection = $phpWord->getSettings()->getDocumentProtection();
$documentProtection->setEditing(\PhpOffice\PhpWord\SimpleType\DocProtect::READ_ONLY);
$documentProtection->setPassword('123456');

加载word文件

可用来读取word文档内容,或者加载word模板
注意:只能读取docx文件,doc格式的文件无法读取。

$file = './uploads/contract/test.docx';
// 加载word文档,使用phpword处理
$phpWord = \PhpOffice\PhpWord\IOFactory::load($file);

内容转化为html

$xmlWriter  = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "HTML");
$path = pathinfo($file);
$fileName =  './uploads/tmp/' . $path['filename'] . '.html';
$xmlWriter->save($fileName);

保存

保存为DOCX

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('test.docx');

保存为ODF

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'ODText');
$objWriter->save('test.odt');

保存为HTML

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'HTML');
$objWriter->save('test.html');

直接下载

使用php://output作为文件名。

// 创建新的文档...
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->addSection();
$section->addText('文章正文文章正文文章正文文章正文');


$file = 'test.doc';
header("Content-Description: File Transfer");
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$xmlWriter->save("php://output");

效果:

模板替换

通过固定格式的字符串,来占位,通过加载模板后,进行变量替换。

格式

${XX}

加载模板

加载docx文档模板

// 模板的路径
$path = 'template.docx';
// 声明一个模板对象、读取模板
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($path);

替换字符串

模板内容

替换并保存

// 模板的路径
$path = 'template.docx';
// 声明一个模板对象、读取模板
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($path);

// 替换模板中的变量,对应word里的 ${title}
$templateProcessor->setValue('title','简历');
$templateProcessor->setValue('name','张三');
$templateProcessor->setValue('gender','男');

// 生成word路径,根据自己的目录调整
$filePath= './test.docx';
// 生成新的word
$templateProcessor->saveAs($filePath);

效果:

并不更改模板的样式,只是根据固定格式进行替换。

替换图片

设置模板

简单替换

只是简单替换,其他为图片默认。

$templateProcessor->setImageValue('img', ['path' => 'cover.jpg']);

效果

设置图片属性

可以在替换图片的基础上,设置一些图片属性。

$templateProcessor->setImageValue('img', [
    'path' => 'cover.jpg',
    'width'=>200,
    'height'=>200
]);

效果

 

替换表格

设置模板

设置表格数据

$arr = [
    ['id' => 1, 'name' => '龙傲天','class' => '一班', 'age' => '19', 'score' => 100],
    ['id' => 2, 'name' => '张武','class' => '二班', 'age' => '19', 'score' => 100],
    ['id' => 3, 'name' => '李云','class' => '三班', 'age' => '19', 'score' => 100],
    ['id' => 4, 'name' => '宋清','class' => '四班', 'age' => '19', 'score' => 100],
];

实现替换

// 模板的路径
$path = 'template.docx';
// 声明一个模板对象、读取模板
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($path);
// 复制行
$templateProcessor->cloneRow('id', count($arr));
// 替换变量
foreach ($arr as $k =>  $v) {
    $templateProcessor->setValue('id#' . ($k + 1), $v['id']);
    $templateProcessor->setValue('name#' . ($k + 1), $v['name']);
    $templateProcessor->setValue('class#' . ($k + 1), $v['class']);
    $templateProcessor->setValue('age#' . ($k + 1), $v['age']);
    $templateProcessor->setValue('score#' . ($k + 1), $v['score']);
}

// 生成word路径,根据自己的目录调整
$filePath = './test.docx';
// 生成新的word
$templateProcessor->saveAs($filePath);

 效果

总结

phpword功能很强大,无论是用来创建word文档还是使用word来做模板替换变量都可以很好的完成。可以用来做一些自动化的操作。

注意:对支持读取doc文档有些问题,需要一些配置还没有弄清楚。

参考

PHPWord插件创建表格及模板替换技术记录说明(含PHPWord文件及中文技术文档下载)-码代码-李雷博客

Welcome to PHPWord’s documentation — PHPWord 0.18.2 documentation

PHP使用phpword生成word文档 - 简

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 过渡动画效果

文章目录 Vue3 过渡动画效果概述<Transition>组件简单使用为过渡效果命名自定义过渡classJavaScript动画效果元素间过渡 <transition-group>组件列表动画状态动画 Vue3 过渡动画效果 概述 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和…

中服云设备全生命周期管理系统4.0全新升级,震撼登场!

6月2日&#xff0c;中服云设备全生命周期管理系统4.0将在中服云官方视频号线上直播震撼发布。在此次线上直播发布会上&#xff0c;中服云将详细地介绍设备全生命周期管理系统4.0版本的全新特性和创新功能。同时邀请了业内权威售前顾问、设备管理工程师和合作伙伴&#xff0c;共…

降低FTP服务器速度的解决方案(Filezilla等)

我最近发现&#xff0c;尽管有70Mbps&#xff08;8.75MB / s&#xff09;的互联网连接和1Gbps&#xff08;125MB / s&#xff09;的专用服务器可以从中下载&#xff0c;但我似乎只能从FTP服务器上以大约16.8Mbps&#xff08;2.1MB / s&#xff09;的速度下载。在一个线程上。但…

深入篇【Linux】学习必备:理解文件权限

深入篇【Linux】学习必备&#xff1a;理解文件权限 Ⅰ.Linux权限的概念Ⅱ.Linux权限管理①.文件访问者的分类(访问者的身份)②.文件类型和访问权限(文件本身的事物属性)1.文件类型&#xff1a;2.基本权限: ③.文件权限值的表示方法1.字符表示方法2.八进制数值表示法 ④.文件访问…

【活动回顾】Databend 数据库表达式框架设计与实现 @GOTC

5月28日&#xff0c;“全球开源技术峰会 GOTC 2023 ”圆满落幕。在本次会上&#xff0c;Databend 数据库的 优化器 研发工程师 骆迪安作为嘉宾中的一员&#xff0c;在 rust 专题专区分会场进行了一次主题为《 Rust 实现的先进 SQL Parser 与高效表达式执行框架 — Databend 数…

多语言跨境商城源码,出海跨境商城软件开发模式平台

一、多语言跨境商城模式 多商家模式&#xff1a;容纳不同的商家 多用户模式&#xff1a;用户之社区&#xff0c;用户交互&#xff0c;分享和推广 支持扩展&#xff1a;使用现代化的技术架构和设计&#xff0c;包括支持并发访问、分布式数据存储等功能。 采用常用技术&#x…

合工大Java大作业1:货物进销管理系统

问题描述 编写一个Inventory.java完成以下功能&#xff08;没有学过Java文件处理之前&#xff0c;各位同学可以使用硬编码将数据放进两个Vector变量里。等学过Java文件处理之后&#xff0c;再补充数据文件读取部分&#xff09;&#xff1a; 1&#xff0e;程序首先打开并读取In…

SpringMVC源码分析:SpringMVC九大组件分析(三)

一、概述 SpringMVC九大组件如下图&#xff0c;我将一个个进行介绍。各个组件使用的入口DispatcherServlet.doDispatch是各个组件使用的入口&#xff0c;我们大部分代码都是从这里开始进入的。 二、MultipartResolver 下面是MultipartResolver组件具体的使用流程&#xff0c;…

【UE打包apk过程遇到的报错】

教程遇到的问题UE5 打包android提示 sdk未设置解决方案 UE5打包apk 报错 ERROR: cmd.exe failed with args :app:assembleDebug解决方案 我在打包的时候&#xff0c;日志中的报错信息如下&#xff08;每个人的报错信息可能不一样&#xff0c;根据报错日志找对应的解决方案&…

扼流圈天线是如何解决RTK的误差源

扼流圈天线是一种用于GPS定位的天线&#xff0c;它将电流流过一圈线圈来产生电磁场&#xff0c;这个电磁场可以用来接收卫星信号。扼流圈天线的优势在于它可以有效地减少多径干扰和多路传播所造成的误差&#xff0c;从而提高定位精度。 对于RTK定位来说&#xff0c;扼流圈天线可…

__LINE__打印出来的值与source insight不一致

一个project里面有几百个文件&#xff0c;有些&#xff0c;__LINE__ 和pc上看到的值总是不一致 在这个函数前重新定义一下line

h5调用微信支付报错,商家存在未配置的参数,请联系商家解决

报错&#xff1a; 商家存在未配置的参数&#xff0c;请联系商家解决 原因&#xff1a; 发起微信支付的域名和项目域名不一致 确认原因&#xff1a; 发起微信支付的域名是需要在微信支付平台&#xff08;微信商户&#xff09;进行h5域名的添加配置 项目的域名是 发送请求的…

VS code使用及插件(python、vue)

VS code使用及插件&#xff08;python、vue&#xff09; 说明一、下载及安装二、vs code 常规设置三、 pyhton插件四、 vue相关插件 说明 本教程主要内宅vs code使用及vue、python插件vs code 常规设置pyhton插件vue相关插件 一、下载及安装 二、vs code 常规设置 注&#…

vscode配置nodejs

文章目录 前言Nodejs在vscode中的配置1、扩展插件Code RunnerJavaScript(ES6) code snippetLive Server 2、创建配置文件3、调整配置文件内容 前言 npm ERR! enoent This is related to npm not being able to find a file. ‘vue-cli-service’ 不是内部或外部命令&#xff…

内网安全:域内信息收集

目录 环境搭建 域基础知识 工作组和域 现实背景 常规信息收集 方式一&#xff1a;操作系统命令执行 常用总结 方式二&#xff1a;使用CS插件 关键信息收集 密码抓取测试 自动化信息收集工具 ADFind BloodHound域分析使用(渗透流程信息) 从今天开始&#xff0c;将…

第七章 文件和数据格式化

文章目录 第七章 文件和数据格式化7.1 文件的使用7.1.1 文件的类型7.1.2 文件的打开和关闭7.1.3 文件的读写 7.2 数据组织的维度7.2.1 一维数据7.2.2 二维数据7.2.3 高维数据 7.3 一维数据的处理7.3.1 一维数据的表示7.3.2 一维数据的存储7.3.3 一维数据的处理 7.4 二维数据的处…

VS2019 WPF制作OTA上位机(四)串口收发数据

首先说一下&#xff0c;这个上位机是模拟服务器对嵌入式设备发起通信进行OTA升级。如下图所示 上位机发送过程&#xff1a;服务器将数据发送到云端&#xff0c;云端是通信模块的&#xff0c;比如移动/电信的云平台&#xff0c;云端将数据传给通信模块&#xff0c;比如NB模块&a…

【PCIE701】基于PCIE总线架构的高性能数据预处理平台

板卡概述 PCIE701是北京青翼科技的一款基于PCI Express总线架构的高性能数据预处理FMC载板&#xff0c;板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1个X8 PCIe主机接口&#xff0c;板卡采用Xilinx的高性能Kintex-7系列FPGA作为实时处理器&#xff0c;实现…

知识付费小程序搭建 为有价值的知识买单

以前我们学习写作遇到难题的时候&#xff0c;总喜欢上网搜一下参考资料&#xff0c;但是不知具体从何时起&#xff0c;很多平台内容查看都要钱了。这说明知识付费已经深入到我们的生活中了。再加上疫情爆发这几年&#xff0c;很多教育培训机构都抓住风口&#xff0c;开发了线上…

知乎运营分析平台 — 舰桥平台如何通过 Apache Doris 实现查询速度 10+ 倍提升?

导读&#xff1a;知乎为实现精细化运营&#xff0c;提高运营效率&#xff0c;依赖 Apache Doris 构建了内部统一的运营分析平台——舰桥平台&#xff0c;主要应用于事实接入层、事实建模层和事实运算层等架构核心层的建设&#xff0c;并持续对导入、查询等方面进行性能调优&…