您的当前位置:首页>全部文章>文章详情

PHP中的word文档生成与处理库PHPWord的基本使用

发表于:2025-01-16 16:23:09浏览:34次TAG: #PHP #word文档 #PhpWord

PHPWord是一个强大的PHP库,用于创建和操作Microsoft Word文档,它提供了丰富的功能,开发人员可轻松生成复杂的文档,包括文本格式化、表格、图像插入等,本文将详细介绍 PHPWord 的功能、安装方法、基本使用以及一些高级用法,帮助您快速上手并充分利用这一工具。

一、PHPWord 简介
PHPWord 是用纯 PHP 编写的,不依赖于任何外部库或程序,适合在各种服务器环境中使用,支持多种文字格式、样式和布局,能够生成高质量的 Word 文档,PHPWord 还支持模板功能,可以方便地生成具有一致格式的文档。

二、安装 PHPWord
要开始使用 PHPWord,首先需要将其安装在您的项目中,您可以使用 Composer 来安装 PHPWord,这是最推荐的方式,因为它可以自动处理依赖关系,打开终端并运行以下命令:

composer require phpoffice/phpword

如果您还没有安装 Composer,可以从 Composer 官方网站 下载并按照说明进行安装。

三、基本使用

  1. 创建新文档

安装完成后,就可以开始创建新的 Word 文档,以下是一个简单的示例,演示如何创建一个包含一些文本的新文档:

<?php
require 'vendor/autoload.php';
use PhpOfficePhpWordPhpWord;
// 创建一个新的 PhpWord 对象
$phpWord = new PhpWord();
// 添加一个新段落
$section = $phpWord->addSection();
$section->addText('Hello, this is a sample text.');
// 保存文档到文件
$writer = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'Word2007');
$writer->save('helloWorld.docx');
  1. 添加样式和格式

PHPWord 可以为文本添加各种样式和格式,可更改字体、大小、颜色以及应用加粗、斜体等效果:

<?php
require 'vendor/autoload.php';
use PhpOfficePhpWordPhpWord;
$phpWord = new PhpWord();
$section = $phpWord->addSection();
// 创建一个带有样式的文本
$text = $section->createTextRun();
$text->addText('This is bold text.', array('name' => 'Arial', 'size' => 14, 'bold' => true));
$text->addText(' This is italic text.', array('italic' => true));
// 保存文档
$writer = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'Word2007');
$writer->save('styledText.docx');
  1. 插入表格

PHPWord 也支持在文档中插入表格,可以指定行数和列数,并为每个单元格设置内容和样式:

<?php
require 'vendor/autoload.php';
use PhpOfficePhpWordPhpWord;
$phpWord = new PhpWord();
$section = $phpWord->addSection();
// 插入一个 3x3 的表格
$table = $section->addTable();
$table->addRow();
$table->addCell(1500)->addText('Header 1');
$table->addCell(1500)->addText('Header 2');
$table->addCell(1500)->addText('Header 3');
$table->addRow();
$table->addCell(1500)->addText('Cell 1');
$table->addCell(1500)->addText('Cell 2');
$table->addCell(1500)->addText('Cell 3');
// 保存文档
$writer = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'Word2007');
$writer->save('tableExample.docx');

四、高级用法

  1. 使用模板

PHPWord 支持使用模板来生成文档,您可以创建一个包含占位符的模板文件,然后使用 PHPWord 填充这些占位符:

<?php
require 'vendor/autoload.php';
use PhpOfficePhpWordPhpWord;
use PhpOfficePhpWordTemplateProcessor;
$templateProcessor = new TemplateProcessor('path/to/template.docx');
$templateProcessor->setValue('placeholder', 'Replace with actual value');
// 保存替换后的文档
$writer = PhpOfficePhpWordIOFactory::createWriter($templateProcessor->getDocument(), 'Word2007');
$writer->save('filledTemplate.docx');

如下案例是生成一个准考证的案例:
图片alt

//模板文件
$save_path = dirname(dirname(__FILE__)) . '/images/demo.docx';
//1.创建模板对象
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($save_path);
//2.插入数据
//插入文字
$templateProcessor->setValue('hao', '123123');
$templateProcessor->setValue('time', '2023年7月11日10:00--18:00');
$templateProcessor->setValue('name', '王某某');
$templateProcessor->setValue('sex', '男');
$templateProcessor->setValue('butime', '2023-12-30');
$templateProcessor->setValue('leixing', '特种作业人员');
$templateProcessor->setValue('gsname', '西藏某某');
$templateProcessor->setValue('kemu', '金属某某');
$templateProcessor->setValue('addr', '拉萨市某某考场');
$templateProcessor->setValue('sfleixing', '身份证');
$templateProcessor->setValue('sfhao', '11111111111111');
//插入图片,宽200像素,高300像素
$picParam = ['path' => dirname(dirname(__FILE__)) . '/image/20230720/baabe44df21da27830d7745a8f10c413.jpg', 'width' => 150, 'height' => 200];
$templateProcessor->setImageValue('picurl', $picParam);

$imageSrc = '/image/download/' . date("Ymd") . '/';
//检测目录,没有则创建
uploadDirectory(dirname(dirname(__FILE__)) . $imageSrc);
$url = dirname(dirname(__FILE__)) . $imageSrc . build_order_no() . '.docx';
try {
    //图片保存到服务器
    $templateProcessor->saveAs($url);
} catch (Exception $e) {
    echo '保存出错,请联系管理员';
}
  1. 添加图片和图表

PHPWord 还支持在文档中插入图片和图表,以下是一个简单的示例,演示如何在文档中插入一张图片:

<?php
require 'vendor/autoload.php';
use PhpOfficePhpWordPhpWord;
$phpWord = new PhpWord();
$section = $phpWord->addSection();
// 插入一张图片
$image = $section->addImage('path/to/image.jpg');
$image->setWidth(100); // 设置图片宽度,单位为 EMU (English Metric Units)
$image->setHeight(100); // 设置图片高度,单位为 EMU (English Metric Units)
// 保存文档
$writer = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'Word2007');
$writer->save('imageExample.docx');

PHPWord中的目录和书签生成,在PHPWord中生成目录和书签可以通过以下步骤实现:

生成目录:在PHPWord中生成目录可以使用addTOC方法。该方法可以接受一些可选参数,如标题的级别,格式等。以下是一个示例代码:

$section = $phpWord->addSection();
$section->addTitle('Table of Contents', 1);
$section->addTOC(array('tocTitle' => 'Table of Contents', 'setdepth' => 1));

生成书签:在PHPWord中生成书签可以使用addBookmark方法。该方法接受两个参数,第一个是书签的名称,第二个是书签所在位置的标识符。以下是一个示例代码:

$section->addText('This is some text before the bookmark.', array('name' => 'bookmark1'));
$section->addBookmark('bookmark1', 'bookmark1');
$section->addText('This is some text after the bookmark.');

以上是生成目录和书签的简单示例,根据实际需求可以进一步定制和增强功能。

五、总结
PHPWord 主要支持较新版本的 Microsoft Word,包括 .docx 格式,对于较旧的 .doc 格式,支持可能有限,建议使用最新版本的 Microsoft Word 来查看和编辑由 PHPWord 生成的文档。
PHPWord 的性能取决于多个因素,包括服务器配置、文档的复杂性以及 PHP 的版本,PHPWord 在现代服务器上表现良好,但在处理非常大的文档或复杂的模板时可能会遇到性能问题,为了提高性能,可以尝试优化代码并使用更高效的数据处理方式。