修正

中文支持的问题,使用前如果发现乱码,需要进行一些修正:

  • 解决编码问题,PHPword 会对输入的文字进行utf8_encode编码转化,如果你使用GBK、GB2312或者utf8编码的话就会出现乱码,如果你用utf8编码,就查找类库中所有方法中的 utf8_encode 转码将其删除,如果你采用GBK或者GB2312编码,使用iconv进行编码转换。
  • 解决中文字体支持,在writer/word2007/base.php中 312行添加 $objWriter->writeAttribute('w:eastAsia',$font)
  • 启动php zip支持,windows环境下在php配置文件php.ini中,将extension=php_zip.dll前面的分号“;”去除;(如果没有,请添加extension=php_zip.dll此行并确保php_zip.dll文件存在相应的目录),然后同样在php.ini文件中,将 zlib.output_compression = Off 改为zlib.output_compression = On ; 

计量单位:缇(twips)

PHPWord最基本的计量单位:“缇”(twips),我们常常在文件中看到或使用计量单位“缇”,它是开源办公软件中最基本的计量单位,“缇”是"TWentieth of an Inch Point"的简写,意思 1/20磅,与其他常用剂量单位的换算是1缇=1/1,440英寸
1缇=1/567厘米
1缇=1/15像素

字体设置

文档默认字体是Arial,字号10号,我们可以通过以下方法设置默认字体和字号:
注,该库存在中文字体支持问题,解决方法:见文档开头

$PHPWord->setDefaultFontName('Tahoma');
$PHPWord->setDefaultFontSize(12);

文档属性设置

我们可以设置下列文档属性

CreatorString创建者
CompanyString公司
TitleString标题
DescriptionString描述
CategoryString分类
Last modified byString最后修改者
CreatedDatetime创建时间
ModifiedDatetime修改时间
SubjectString主题
KeywordsString关键词

我们可以通过以下方法设置文档属性

$properties = $PHPWord->getProperties();
$properties->setCreator('My name');
$properties->setCompany('My factory');
$properties->setTitle('My title');
$properties->setDescription('My description');
$properties->setCategory('My category');
$properties->setLastModifiedBy('My name');
$properties->setCreated( mktime(0, 0, 0, 3, 12, 2010) );
$properties->setModified( mktime(0, 0, 0, 3, 14, 2010) );
$properties->setSubject('My subject');
$properties->setKeywords('my, key, word');

新建文档

添加页面

添加默认页面(默认页面方向和页边距):

$section = $PHPWord->createSection();

页面样式

调整页面样式和布局有两种方法:
1.创建样式数组:

$sectionStyle = array('orientation' => null,
       'marginLeft' => 900,
       'marginRight' => 900,
       'marginTop' => 900,
       'marginBottom' => 900);
$section = $PHPWord->createSection($sectionStyle);

2.直接调用样式属性设置方法进行设置:

$section = $PHPWord->createSection();
$sectionStyle = $section->getSettings();
$sectionStyle->setLandscape();
$sectionStyle->setPortrait();
$sectionStyle->setMarginLeft(900);
$sectionStyle->setMarginRight(900);
$sectionStyle->setMarginTop(900);
$sectionStyle->setMarginBottom(900);

页面样式属性

注意:所有的属性对大小写敏感 !

orientation页面方向:默认竖向:null 横向:landscape
marginTop上边距,单位:twips.
marginLeft左边距,单位:twips.
marginRight右边距,单位:twips.
marginBottom下边距,单位:twips..
borderTopSize上边框尺寸,单位:twips.
borderTopColor上边框颜色
borderLeftSize左边框尺寸,单位 :twips.
borderLeftColor左边框颜色
borderRightSize右边框尺寸,单位:twips.
borderRightColor右边框颜色
borderBottomSize底边框尺寸,单位:twips.
borderBottomColor底边框颜色

页面高度和宽度是自动设置的,你可以通过以下两个属性来修改,但不推荐进行修改。

pageSizeW页面宽度,单位: twips.
pageSizeH页面高度,单位:twips.

文本

添加文本

向文档添加文本使用方法函数: addText.(注意PHPword 会对输入的文字进行utf8_encode编码转化,如果你使用GBK、GB2312或者utf8编码的话就会出现乱码,如果你用utf8编码,就查找类库中所有方法中的 utf8_encode 转码将其删除,如果你采用GBK或者GB2312编码,使用iconv进行编码转换。)

$section->addText( $text, [$fontStyle], [$paragraphStyle] );
参数类型描述
$textString文本内容.
$fontStyleString / Array字体样式.
$paragraphStyleString / Array段落样式

添加文本资源

文本资源可以包含文本链接,可以统一赋予段落样式,添加文本资源使用函数方法createTextrun.

参数类型描述
$paragraphStyleString / Array文本样式.

添加文本资源后,就可以添加具有独特样式的文本或链接了。

$textrun = $section->createTextRun();
$textrun->addText('I am bold', array('bold'=>true));
$textrun->addText('I am italic, array('italic'=>true));
$textrun->addText('I am colored, array('color'=>'AACC00'));

当然也可以继承使用段落或文字样式

文本样式

设置文本样式有两种方法:
1.内嵌样式:

$fontStyle = array('color'=>'006699', 'size'=>18, 'bold'=>true);
$section->addText('helloWorld', $fontStyle);

$text = $section->addText('helloWorld');
$style = $text->getStyle();
$style->setColor('006699');
$style->setSize(18);
$style->setBold();

2.或者定义一个样式定义设置文本样式,定义一种样式后,必须把第二个参数设置为样式名称,使用方法函数addFontStyle:

$PHPWord->addFontStyle( $styleName, $fontStyle);
参数类型描述
$styleNameString样式名称
$fontStyleArray样式风格.

示例:

$fontStyle = array('color'=>'006699', 'size'=>18, 'bold'=>true);
$PHPWord->addFontStyle('myOwnStyle', $fontStyle);
$text = $section->addText('helloWorld', 'myOwnStyle');

添加段落样式,使用方法函数addParagraphStyle:

参数类型描述
$styleNameString段落样式名称.
$paragraphStyleArray段落样式.

样式属性列表

属性大小写敏感 !

Font Style

size字号.
name字体
bold粗体
italic斜体
superScript上标
subScript下标
underline下划线,使用常量: PHPWord_Style_Font::UNDERLINE_...
Color字体颜色
fgColor前景色. 只能使用预定义常量:PHPWord_Style_Font::FGCOLOR_...

Paragraph Style

align水平对齐:leftrightcenterboth / justify
spaceBefore段前间距,单位: twips.
spaceAfter段后间距,单位:twips
spacing行间距,单位: twips.

换行符

添加换行符,使用方法函数 addTextBreak:

$section->addTextBreak();

添加多个换行符:

$section->addTextBreak(15);

添加分页符

添加分页符,使用方法函数:addPageBreak:

$section->addPageBreak();

列表

添加列表

添加列表使用方法函数: addListItem:

$section->addListItem( $text, [$depth], [$styleText], [$styleList], [$styleParagraph] );
参数类型描述
$textString文本内容.
$depthInteger编号
$styleTextString / Array文本样式.
$styleListArray列表样式.
$styleParagraphString / Array段落样式

列表样式

示例:

$listStyle = array('listType' => PHPWord_Style_ListItem::TYPE_NUMBER);
$section->addListItem('Listitem 1', 0, null, $listStyle);

列表样式属性列表

属性大小写敏感!

listType列表符号样式.使用常量 PHPWord_Style_ListItem::TYPE_...

超链接

添加超链接

添加超链接,使用方法函数: addLink:

$section->addLink( $linkSrc, [$linkName], [$styleFont], [$styleParagraph]);
参数类型描述
$linkSrcString链接地址
$linkNameString链接名称.
$styleFontString / Array文本样式
$styleParagraphString / Array段落样式

注意在添加链接地址时最好trim一下前后有空格很可有可能导致文档打不开

超链接样式

定义超链接风格的两种方法

  1. 内嵌样式:
$linkStyle = array('color'=>'0000FF',
    'underline'=>PHPWord_Style_Font::UNDERLINE_SINGLE);
$section->addLink('http://www.google.de', null, $linkStyle);
  1. 或者定义一个样式定义设置超链接样式,定义一种样式后,必须把第三个参数设置为样式名称
$linkStyle = array('color'=>'0000FF',
    'underline'=>PHPWord_Style_Font::UNDERLINE_SINGLE);
$PHPWord->addLinkStyle('myHyperlinkStyle', $linkStyle);
$section->addLink('http://www.google.de', null, 'myHyperlinkStyle');
参数类型描述
$styleNameString超链接样式名称.
$stylesArray链接样式.可以使用各种字体样式属性

图片

添加图片

添加图片的函数方法: addImage:

$section->addImage( $src, [$style] );
参数类型描述
$srcString图像的服务器路径,支持相对和绝对路径
$styleArray图片样式.

注意在添加图片路径时最好trim一下前后有空格很可有可能导致文档打不开

图片样式

添加图片样式只能使用数组方式 :

$imageStyle = array('width'=>350, 'height'=>350, 'align'=>'center');
$section->addImage('EARTH.jpg', $imageStyle);

图片样式属性

大小写敏感!

width图像宽度,单位像素
height图像高度,单位像素
align图像对齐方式leftrightcenter

如果没有指定图片高或宽的属性,系统将使用PHP原生函数”getimagesize”来获取相关属性。
PHPWord 支持的图片格式: gif, jpeg, png, bmp, tiff.

添加GD生成图片

你也可以添加由GD库生成的图片,使用函数方法:addMemoryImage:

$section->addMemoryImage( $link, [$style] );
参数类型描述
$linkString生成图片的php文件的路径. 注意: 应设置文件的绝对路径(就像你在浏览器中调用php文件),否则会发生错误。
$styleArray图像样式.

示例:

$section->addMemoryImage('http://localhost/image.php');

你GD图片样式的设置和本地图片一样.

PHPWord 支持的 GD 图片类型: png, jpeg, gif.

添加水印

添加水印的页面需要一个头部引用,添加水印方法函数:addWatermark

参数类型描述
$srcString水印图片的文件地址
$styleArray水印图片样式

水印图片是在页面是绝对定位的,所以水印图片至少需要两个样式属性

marginLeft左边距,单位像素
marginTop上边距,单位像素

注:图片样式并没有提供图像并排,文字环绕等功能,可以通过与表格想结合进行解决。

添加对象

我们可以使用方法函数 addObject,添加对象和链接

$section->addObject( $src, [$style] );
参数类型描述
$srcString文件的服务器,支持相对和绝对路径.
$styleArray对象样式.

对象属性是有一个样式:
属性区分大小写!

align对齐方式leftrightcenter

PHPWord 支持的对象类型: XLS, DOC, PPT.

添加标题

我们可以使用标题来为结构化文档或为文档建立目录,添加标题使用方法函数addTitleStyle 和 addTitle:

$PHPWord->addTitleStyle( $titleCount, [$fontStyle] );
参数类型描述
$srcInteger标题级别,最多支持9级标题
$fontStyleArray标题字体样式

需要添给标题添加一个样式,否则文档不会将其作为一个真正的标题来处理。

定义标题样式后,定义标题就很简单了,可以使用函数方法:addTitle;

$section->addTitle( $text, [$depth] );
参数类型描述
$textString标题文本内容
$depthInteger标题级别编号,通过该参数调用addTtileStyle()设置的标题样式

添加目录

添加目录使用方法函数: addTOC:

$styleTOC = array('tabLeader'=>PHPWord_Style_TOC::TABLEADER_DOT);
$styleFont = array('spaceAfter'=>60, 'name'=>'Tahoma', 'size'=>12);
$section->addTOC($styleFont, $styleTOC);
参数类型描述
$styleFontArray目录字体样式
$styleTOCArray目录样式

目录样式属性列表:

样式属性区分大小写 !

tabLeader标题的类型和对应页码.默认使用系统常量 PHPWord_Style_TOC::TABLEADER_...
tabPos标题与页码的位置,单位: twips.
Indent标题缩进,单位: twips.

表格

添加表格

添加表格使用函数方法:addTable:

$table = $section->addTable( [$tableStyle] );

参数 $tableStyle 是可选的. 表格样式这章有关于表格样式的详细说明。为addTable建立一个本地对象,我们需要使用这个对象来调用相关函数方法。

  • 添加行
$table->addRow( [$height] );

行的高度可以通过$height参数来设置,单位:twips.

  • 添加单元格

单元格添加前必须先添加行,添加单元格的函数方法为: addCell

$cell = $table->addCell(h, [$cellStyle] );
参数类型描述
$widthInteger单元格宽度: twips.
$cellStyleArray单元格样式

为addcell创建一个本地对象,需要使用该对象来 调用以下函数

addText添加文本
addTextBreak添加换行符
addLink添加链接
addImage添加图片
addMemoryImage添加水印
addListItem添加列表
addObject添加对象
addPreserveText添加页码,只对页眉和页脚有效

示例1:

$table = $section->addTable();
$table->addRow();
$cell = $table->addCell(2000);
$cell->addText('Cell 1');
$cell = $table->addCell(2000);
$cell->addText('Cell 2');
$cell = $table->addCell(2000);
$cell->addText('Cell 3');

示例2:

$table = $section->addTable();
$table->addRow(400);
$table->addCell(2000)->addText('Cell 1');
$table->addCell(2000)->addText('Cell 2');
$table->addCell(2000)->addText('Cell 3');

$table->addRow(1000);
$table->addCell(2000)->addText('Cell 4');
$table->addCell(2000)->addText('Cell 5');
$table->addCell(2000)->addText('Cell 6');

单元格样式

使用addCell的第二个参数来给单元格设置样式
示例:

$cellStyle = array('textDirection'=>PHPWord_Style_Cell::TEXT_DIR_BTLR,     'bgColor'=>'C0C0C0');

$table = $section->addTable();
$table->addRow(1000);
$table->addCell(2000, $cellStyle)->addText('Cell 1');
$table->addCell(2000, $cellStyle)->addText('Cell 2');
$table->addCell(2000, $cellStyle)->addText('Cell 3');
$table->addRow();
$table->addCell(2000)->addText('Cell 4');
$table->addCell(2000)->addText('Cell 5');
$table->addCell(2000)->addText('Cell 6');

单元格样式属性列表:

属性大小写敏感 !

valign单元格内容对齐方式: left, right, center
textDirection文本方向. 使用预定常量 PHPWord_Style_Cell:: TEXT_DIR_...
bgColor单元格背景色
borderTopSize单元格上边框尺寸,单位 twips.
borderTopColor单元格上边框 颜色
borderLeftSize单元格左边框尺寸,单位twips
borderLeftColor单元格左边框颜色
borderRightSize单元格右边框尺寸,单位twips
borderRightColor单元格右边框颜色
borderBottomSize单元格下边框尺寸 ,单位twips
borderBottomColor单元格下边框颜色

表格样式

我们可以设置整个表格的样式,通过创建表格函数addTable的参数$tableStyle,表格具有如下样式属性
属性名称大小写敏感!

cellMarginTop单元格上边距,单位: twips.
cellMarginLeft单元格左边距,单位: twips.
cellMarginRight单元格右边距,单位: twips.
cellMarginBottom单元格下边距,单位: twips.

示例:

$tableStyle = array('cellMarginTop'=>80,
     'cellMarginLeft'=>80,
     'cellMarginRight'=>80,
     'cellMarginBottom'=>80);
$table = $section->addTable($tableStyle);

我们可以使用函数方法: addTableStyle,为表格定义一个完整的样式。

$PHPWord->addTableStyle($styleName,  $styleTable, [$styleFirstRow] );
参数类型描述
$styleNameString表样式名称
$styleTableArray这个表的样式
$styleFirstRowArray表头样式(第一行)

示例:

$styleTable = array('borderColor'=>'006699',
     'borderSize'=>6,
     'cellMargin'=>50);
$styleFirstRow = array('bgColor'=>'66BBFF');
$PHPWord->addTableStyle('myTable', $styleTable, $styleFirstRow);

$table = $section->addTable('myTable');
$table->addRow(400);
$table->addCell(2000)->addText('Cell 1');
$table->addCell(2000)->addText('Cell 2');
$table->addCell(2000)->addText('Cell 3');
$table->addRow(1000);
$table->addCell(2000)->addText('Cell 4');
$table->addCell(2000)->addText('Cell 5');
$table->addCell(2000)->addText('Cell 6');

表格样式属性,注意属性名称大小写敏感!

cellMarginTop单元格上边距,单位:twips.
cellMarginLeft单元格左边距,单位:twips.
cellMarginRight单元格右边距,单位:twips.
cellMarginBottom单元格下边距,单位:twips.
cellMargin单元格间距,单位:twips.
bgColor表格背景色
borderTopSize表格上边框尺寸,单位:twips.
borderTopColor表格上边框颜色
borderLeftSize表格左边框尺寸,单位:twips.
borderLeftColor表格左边框颜色
borderRightSize表格右边框尺寸,单位:twips.
borderRightColor表格右边框颜色
borderBottomSize表格下边框尺寸,单位:twips..
borderBottomColor表格下边框颜色
borderInsideHSize表格内水平网格尺寸,单位: twips.
borderInsideHColor表格内水平网格颜色
borderInsideVSize表格内垂直网格尺寸,单位: twips.
borderInsideVColor表格内垂直网格颜色
borderSize表格边框尺寸,单位:twips.
borderColor表格边框颜色

注意:表格在word布局中的功能可以进行体现,例如进行图片,对象等的布局可以考虑与表格结合进行处理

页脚

添加文档页脚使用函数方法: createFooter:

$footer = $section->createFooter();

确保在本地对象中保存页脚,并使用下列函数

addText添加文本
addTextBreak添加换行符
addImage添加图像
addMemoryImage添加GD生成图像
addListItem添加列表
addPreserveText添加页码,只能在页眉或页脚使用
addTable添加表格
createTextrun添加文本资源

向页脚(页眉)添加页码使用函数方法:addPreserveText:

addPreserveText( $text, [$style] );
参数类型描述
$textString页脚(页眉)的文本内容
$styleArray文字样式.

示例:

$footer->addPreserveText('Page {PAGE} of {NUMPAGES}.');

页眉

添加页眉,使用函数方法: createHeader:

$header = $section->createHeader();

确保页眉是建立在一个文档中,页眉和页脚使用相同的属性和函数,详见页脚章节 。
注意:只用添加了页眉的页面,才能添加和使用图片水印

模版

我们可以利用搜索替换功能创建一个docx格式的模版文档,来替换文档中你想替换的文本. 但是要注意,只有文本或链接可以被替换。加载模版文档使用函数方法:loadTemplate function.

参数方法描述
$strFilenameString模版文件路径和名称

加载完成模版文档后,你可以使用函数方法: setValue 来搜索替换相关内容

参数TypeDescription
$searchMixed搜索的值
$replaceMixed替换的值
$template = $PHPWord->loadTemplate('Template.docx');
$template->setValue('Name', 'Somebody someone');
$template->setValue('Street', 'Coming-Undone-Street 32');

被搜索替换的标签格式为: ${YOUR_SEARCH_PATTERN}
不能添加新的PHPWORD元素到加载的模版文档中
模版使用的几个注意事项:

  • 从模板生成word文档,支持在word模板文档里写替换标签,标签格式为${xxx},不过一定要注意,不要直接在word里编辑这些标签,一定要在文本文档里先写好标签,直接拷贝粘贴上去,千万不要编辑,否则无法替换,原因也很简单,把word文档另存为xml,然后看xml里标签的位置,会发现标签中间被插入了很多没用的xml节点,还有中文字体的节点。。。
  • 模版文档要一次性完成在保存,否则会出现替换失败问题。
  • 中文乱码问题,这个一定是存在的,如果php环境已经是utf8了,要找到关键地方,转utf8的代码,去掉,否则就是转两次编码了,典型的是phpwordtemplate.php文件,把这行注释掉:$replace = utf8_encode($replace);
  • linux下报“Could not close zip file.”错误,这个你永远想不到,要将模板文件所在目录权限改为可写,因为要在那个目录下生成临时文件
  • 引用模板文件和另存文件路径什么的,最好用绝对路径

声明:本文内容来自网络文件,部分未测试,后面有机会整个实例出来,目前整理成一份适合在网页阅读的文档,供参考。
官方实例:https://github.com/PHPOffice/...
官网:https://phpword.readthedocs.i...

03-05 15:54