5

我想自动将.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')

我也试图以不同的方式逃避\或使用'and ,"但我的测试都没有定论。

$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 可以访问所有文件夹。

4

2 回答 2

0

通过测试外来代码,python.exe 被覆盖且无法使用。最初帖子中的代码几乎是正确的。我的错。

对于好奇的人,这是我的最终代码,具有易于使用的功能

创建PDF.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%

创建PDF.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 时,我只需要执行以下操作

测试.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");
于 2015-12-14T15:38:38.470 回答
0

我会将其添加为评论,但没有足够的代表...

从 WAMP 服务器更改为 IIS 时,我遇到了这个问题,正如你所说,这是一个权限问题。事实证明,我必须授予“IUSR”用户和“IIS_IUSRS”组完全权限才能执行它。

后来我遇到了类似的事情,我相信我决定简单地将 IIS 运行的用户更改为管理员,但这可能不推荐。

当然,如果您不使用 IIS,这将无关紧要,但我将把它留在这里以防万一其他人使用。

于 2015-12-14T11:52:17.897 回答