Я хотел бы автоматизировать экспорт .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.
Я бы добавил это как комментарий вместо этого, но недостаточно реп …
У меня была эта проблема при переходе с сервера WAMP на IIS, и, как вы сказали, это была проблема с разрешениями.
Оказывается, я должен был предоставить пользователю «IUSR» и группе «IIS_IUSRS» полные разрешения для его выполнения.
Позже я столкнулся с чем-то похожим, и я считаю, что решил просто изменить пользовательский запуск IIS на Администратор, но это, вероятно, не рекомендуется.
Конечно, это не имеет значения, если вы не используете IIS, но я оставлю это здесь на всякий случай.
При тестировании экзотического кода файл 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");