我们使用PHP中的application.word COM对象在后台将word文件转换为PDF。
这与以下代码配合得很好:
$this->com = new COM('word.application');
$this->com->Visible = false;
$this->com->DisplayAlerts = false;
$this->com->Documents->Open($from /* Filename */, false /* ConfirmConversions */,
true /* ReadOnly */, false /* AddToRecentFiles */,
'' /* PasswordDocument */, '' /* PasswordTemplate */,
false /* Revert */, '' /* WritePasswordDocument */,
'' /* WritePasswordTemplate */, 0 /* Format */,
NULL /* Encoding */, true /* Visible */,
false /* OpenAndRepair */, NULL /* DocumentDirection */,
true /* NoEncodingDialog */, '' /* XMLTransform */);
(为简洁起见,省略了异常处理)
然而,如果word无法识别文件类型,它会打开一个对话框询问格式,从而阻止我们的php脚本。据我所知,这里的文档:
http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.documents.open%28v=Office.11%29.aspx
第二个参数设置为false,应该禁止显示此对话框。
有没有什么方法可以抑制这个对话框,让word在打开文件时失败,例如出现异常?
我们在虚拟机的服务器上使用Word2007,脚本是由web应用程序触发的,所以简单地手动按对话框上的取消不是最好的选择。。。
编辑:按照第一个答案中的建议,改为com调用。但不起作用。
我认为您需要进一步阅读该页。您可能需要NoEncodingDialog
参数。在您抑制对话框后,我不确定Open是否抛出异常。可能是它返回了null,所以一定要测试它是哪一个。