PHP编程:在Windows系统下使用PHP生成Word文档的教程
《在Windows系统下使用PHP生成Word文档的教程》要点: PHP编程准备工作 PHP编程首先,请确保在你的Windows系统中已经安装并配置好了一个典型的WAMP环境.由于Interop纯粹是一个Windows的特性,我们将在Windows平台下搭建Apache和PHP.在这个实例中,我使用了EasyPHP 14.1,这款软件安装和配置都十分容易. PHP编程接下来,我们要安装Microsoft Office.版本不是严格要求的.我正在使用的是Office2013专业版,但是任何2007之后的Office版本都应该可以使用. PHP编程我们然后需要去确保开发Interop应用(又被称作PIA,优先交互组件)的库是安装好的.为了确保这个,我们可以打开资源管理器,然后找到<Windows目录>assembly,我们将会看到下面安装好的PIAs分支: PHP编程 PHP编程我们可以看到一个 Microsoft.Office.Interop.Word 条目(在这个截图中有下划线). 这就是我们在这个示例中将要使用的 PIA.请特别注意它的“名称”,“版本”和“公钥标记”.我们将要在PHP脚本中用到它们. PHP编程在这个目录中,我们还可以看到其它用于编程(不仅是PHP,还有VB.net,C#等)的PIAs(包含整个Office家族). PHP编程如果这个列表没有包括 Microsoft.Office.Interop 的整个包,我们可以重新安装Office并且在安装中包括PIA;我们也可以手动下载安装这个包.安装的详细步骤可以查阅这个MSDN页面. PHP编程注意:只有Microsoft Office 2010 PIA Redistributable 可以被单独下载安装.这个包中的 PIA 版本是14.0.0.版本15只能通过安装Office获得. PHP编程最后,我们需要在文件 php.ini 中启用 PHP 扩展 php_com_dotnet.dll,并且重启服务器. PHP编程现在我们可以开始编程了. PHP编程HTML表单 PHP编程由于该demo主要关注与后台的处理,所以我们这里就用一个简单的HTML表单做前台的展示,看起来应该是这样的: PHP编程 PHP编程我们有一个文本框用于输入“Name”,一个“Gender”的单选按钮组,一个“Age”的域值控制还有一个文本域来写“Message”,最后,还需要一个“Submit”按钮. PHP编程将该文件命名为“index.html”,保存在虚拟主机的根目录下,这样我们可以直接通过URL拜访该文件,例如:http://test/test/interop PHP编程后台 PHP编程后台的PHP文件是我们所要讨论的核心部分.我先将代码贴到下面,接下来在一步一步的进行解释 PHP编程
<?php
$inputs = $_POST;
$inputs['printdate']='';
// A dummy value to avoid a PHP notice as we don't have "printdate" in the POST variables.
$assembly = 'Microsoft.Office.Interop.Word,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c';
$class = 'Microsoft.Office.Interop.Word.ApplicationClass';
$w = new DOTNET($assembly,$class);
$w->visible = true;
$fn = __DIR__ . 'template.docx';
$d = $w->Documents->Open($fn);
echo "Document opened.<br><hr>";
$flds = $d->Fields;
$count = $flds->Count;
echo "There are $count fields in this document.<br>";
echo "<ul>";
$mapping = setupfields();
foreach ($flds as $index => $f)
{
$f->Select();
$key = $mapping[$index];
$value = $inputs[$key];
if ($key == 'gender')
{
if ($value == 'm')
$value = 'Mr.';
else
$value = 'Ms.';
}
if($key=='printdate')
$value= date ('Y-m-d H:i:s');
$w->Selection->TypeText($value);
echo "<li>Mappig field $index: $key with value $value</li>";
}
echo "</ul>";
echo "Mapping done!<br><hr>";
echo "Printing. Please wait...<br>";
$d->PrintOut();
sleep(3);
echo "Done!";
$w->Quit(false);
$w=null;
function setupfields()
{
$mapping = array();
$mapping[0] = 'gender';
$mapping[1] = 'name';
$mapping[2] = 'age';
$mapping[3] = 'msg';
$mapping[4] = 'printdate';
return $mapping;
}
PHP编程在设置完用来获取表单中传过来的值的变量$inputs之后,我们要创建一个虚拟值用来存放printdate――我们稍后会讨论为何需要这个变量――现在,我们看到这4行比拟关键的代码: PHP编程
$assembly = 'Microsoft.Office.Interop.Word,$class);
$w->visible = true;
PHP编程在PHP中的COM操纵需要在一个assembly里哀求一个class的实例.在我们的案例中,我见将要操作Word.如果考虑到我们上一个截图中展示的代码,我们将能够构造出一个完整签名的Word PIA:
PHP编程 PHP编程通过设置下面两个步骤,我们可以初始化一个word对象: PHP编程首先,word对象可以保留在后台或者通过将visible属性设置为true,使它在前台展示出来. PHP编程然后,我们打开将要处理的文档,把它实例化为一个$d变量. PHP编程在文档对象中,基于html表单的文原来添加文档的内容,这里可以设置一些参数. PHP编程1 代码没有灵活性,php内容的任何变化都需要重新修改脚本; PHP编程 PHP编程
{{name}}
PHP编程在PHP中,我们只需使用从表单提交中获取的“Name”值来替换.这种方式避免了第一选项中的那些缺点.我们只需要找到正确的分隔符,在这个例子中,除了使用的模板是word文档,我们更像是做一个模板渲染. PHP编程 PHP编程这种办法灵活,快速,符合Word的最佳实践.这也避免了文件的全文搜索,这有助于提高性能.请注意,此选项有它的缺点了.? PHP编程总之,自从首次亮相,Word从来没有支持命名索引的字段.尽管我们对于我们在Word文档中创建的字段提供了一个名字,我们还是要用数字下标来拜访每个字段.这也解释了为什么我们要使用专用的功能(setupfields)做表单字段的字段索引和名之间的映射手册 PHP编程 PHP编程请注意,printdate字段并没有一个相应的窗体字段.这就是为什么我们要在$inputs数组中添加一个假的printdate作为key.没有这个key,脚本依然可以执行,但是会有提示说明$inputs数组中不存在索引printdate. PHP编程在使用表单数据更新完字段的值之后,我们将会使用下面的命令打印文档: PHP编程
$d->PrintOut();
PHP编程PrintOut办法有几个可选参数,这里,我们使用最简单的格式.这将会给链接到我们Windows机器的默认打印机打印一份副本. PHP编程 PHP编程在退出word应用程序之前,我们还需要稍作等待,因为打印工作需要时间来完全退出后台.如果没有delay(3),$w->Quit将会立刻得到执行,并且打印工作立刻被终止. PHP编程最终,我们调用 $w->Quit(false) 来选择通过我们的PHP脚本调用关闭word应用程序.这里提供的唯一参数是用来指明我们是否希望在退出前保留更改.我们确实对文档进行了更改,但是我们不希望保留它们,因为我们希望能为其他用户的输入提供一份干净的模板. PHP编程当我们完成编码之后,我们可以加载表单页面,输入一些内容并提交表单.下面的截图展示了PHP脚本的输出,同时更新了Word文档: PHP编程 PHP编程 PHP编程提高编码速度并更好的理解PIA PHP编程PHP是一种弱类型的语言.一个COM对象是一种Object类型.在我们的PHP编码过程中,在一个对象中我们无法使用代码自动提示和完成功能,在一个Word应用,一个文档甚至一个字段中同样如此.我们不知道它有哪些特性,或者它支持哪些办法. PHP编程 PHP编程C#代码迁移至PHP一点也不吓人.先让我展示一些C#的代码:
代码如下:
Word.Application w=new Word.Application(); w.Visible=true; ???????????? String path=Application.StartupPath+"template.docx"; ???????????? Word.Document d=w.Documents.Open(path) as Word.Document; ???????????? Word.Fields flds=d.Fields; int len=flds.Count; ???????????? foreach (Word.Field f in flds) { ??? f.Select(); ??? int i=f.Index; ??? w.Selection.TypeText("..."); } PHP编程我们可以看到,C#的代码和我们之前展示的PHP的代码基础一模一样.由于C#是一种强类型语言,所以我们可以看到有些类型转换的语句,我们不得不显性的给我们的变量赋一种类型. PHP编程有了代码的类型,我们可以尽情的享受代码的自动提示和代码自动完成功能,这样我们开发的速度将有大幅度提高. PHP编程 PHP编程最重要的是,Office PIA微软官方文档,特别是文档中对于每个Office应用的命名空间,总会是我们所需要的最想进的参考.比拟常用的3个应用如下:
PHP编程结语 PHP编程在这篇文章中,我们演示了如何使用PHP COM库和Microsoft Office Interop功能来倩影一个Word文档. PHP编程Windows和Office在我们的日常生活中可以说是被广泛的使用.能够知道和了解Office或者Windows的强大之处还有PHP,对于任何一个在Windows平台上进行PHP开发的程序员都是十分必要的. PHP编程使用PHP的COM扩展,掌握这一组合的大门就被打开了. PHP编程如果你对于这部分的编程比拟感兴趣,请留下你的评论,我们将会考虑在这个话题上写更多的文章.我十分期待更多现实生活的应用开发能使用这种方式. 《在Windows系统下使用PHP生成Word文档的教程》是否对您有启发,欢迎查看更多与《在Windows系统下使用PHP生成Word文档的教程》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |