我正在创建一个文档管理系统,我需要单词来打开一个docx文件并转换为PDF,它工作正常但有一个恼人的问题,它不会打开文件名中包含空格的docx文件,如果我给它一个带下划线的文件名或没有空格它工作正常。
这是我的代码。
$destinationPath = 'C:/inetpub/wwwroot/approvals/'.$pdffilename.'';
$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 = false;
$fn = 'C:/inetpub/wwwroot/approvals/'.$filename.'';
$w->Documents->Open($fn);
// Save as PDF
$XlFixedFormatTypePDF = 17; $w->ActiveDocument->ExportAsFixedFormat($destinationPath, $XlFixedFormatTypePDF, false, 0, 0, 0, 0, 7, true, true, 2, true, true, true);
// close the application and release the COM object
$w->quit(false);
我得到的错误是: -
PHP致命错误:未捕获的异常' com_exception'消息' 来源: Microsoft Word
说明:抱歉,我们找不到您的文件。它是否可能被移动,重命名或删除?
我查看了变量$fn
,它给出了COM的完整路径文件名和分机,但是COM并不喜欢这些空格,我尝试了各种括号和其他一些东西但是我愿意接受建议,似乎无法找到解决方案,我已经看过微软网站上的COM处理,甚至他们只使用没有空格的文件。
https://msdn.microsoft.com/en-us/library/hhf98b5c.aspx
我尝试过PHPWord和TCPDF并且几乎有精神崩溃,引用也没有给其他人很多,而且很多人都有问题让它正常工作,所以尝试通过MS COM方式做到这一点成功了。
答案 0 :(得分:0)
我找到了一个解决方法,使用批处理文件重命名删除空格并添加下划线,然后在转换为pdf时将它们还原到另一个文件夹中,但如果有人可以解决上述问题,请如果COM不接受文件名中的空格,那么请向你致敬。