我想自动将.odf
文件导出到.pdf
。
我尝试了一种名为unoconv的内容。
在Windows命令提示符下输入时,一切正常。
>"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt
一旦在PHP脚本中使用,就不再有用了。没有错误。
exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt');
//or
shell_exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt')
我还试图以\
或'
和"
的方式逃避,但我的测试都没有确定结果。
$test = exec($cmd, $output, $return);
echo var_dump($test);
echo var_dump($output);
echo var_dump($return);
给我
//echo var_dump($test)give nothing
//echo var_dump($ouput);
array (size=0)
empty
//echo var_dump($return);
int 1
这听起来像是一个权限问题,但我也检查了这个,所有文件夹都可以通过PHP访问。
答案 0 :(得分:0)
我会将此添加为评论,但不足以代表......
从WAMP服务器更改为IIS时出现此问题,正如您所说,这是一个权限问题。 事实证明,我必须为“IUSR”用户和“IIS_IUSRS”组授予其执行权限。
后来我遇到了类似的东西,我相信我决定只更改用户IIS运行的管理员,但可能不建议这样做。
当然,如果您不使用IIS,这将无关紧要,但我会将此留在此处,以防万一其他人。
答案 1 :(得分:0)
通过测试异国情调的代码,python.exe被覆盖并且无法使用。 初始帖子中的代码几乎是正确的。我的坏。
对于好奇的人来说,这是我的最终代码,其中包含易于使用的功能
<强> createPDF.bat 强>
@echo off
set arg1=%1
set arg2=%2
cd "C:\Program Files (x86)\OpenOffice 4\program\"
python.exe "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf -o %arg2% %arg1%
<强> createPDF.php来强>
function createPDF($from, $to)
{
//Launch the .bat, do not forget the double backslash
$handle = popen("start /B path\\to\\createPDF.bat ".$from." ".$to, "r");
//Debug if needed
//echo "'$handle'; " . gettype($handle) . "\n";
//$read = fread($handle, 2096);
//echo $read;
//Close the socket
pclose($handle);
}
现在,当我必须将odt文件转换为pdf时,我只需要执行以下操作
<强> test.php的强>
include_once($_SERVER['DOCUMENT_ROOT']."path\to\createPDF.php");
//createPDF(source, destination), do not forget the double backslash (\\)
createPDF("E:\\A\\strange\\path\\to\\Report.odt" , "D:\\Final_report");