2015-09-03 2 views
3

Я пытаюсь преобразовать текстовые документы в PDF, используя командную строку, используя unoconv через PHP.Преобразование DOC в PDF с использованием unoconv через Symfony Component

Я использую команду Symfony Process Component для запуска команды через командную строку.

public function run() 
{ 
    $cmd = 'unoconv --listener & unoconv ' . $this->path; 

    //Tested this to check for permissions and this worked. 
    //$cmd = 'touch /vagrant/public/testfile.pdf'; 

    $process = new Process($cmd); 
    $process->run(); 

    return $process->getOutput(); 
} 

Это не дает выхода, и не преобразует файл. Однако, если я повторяю $cmd и вставляю его в CLI, он преобразует файл, как ожидалось, и записывает выходные данные по мере его поступления.

Любые идеи в чем проблема?

Edit: Я так пробовал: вызов mustRun() & start() методы класса фреймворка.

mustRun() дает следующее сообщение об ошибке:

"The command '//command//' failed. Exit Code: 251(Unknown error) Output: ================ Error Output: ================

После добавления кода журнала, как предложил Диего Ферри, я получаю в файле журнала Error: Unable to connect or start own listener. Aborting.; но я не могу найти много онлайн, что полезно для этого.

+0

Попробуйте в этом порядке: (1) указать полный путь к unoconv, (2) экранировать путь с помощью 'escapeshellarg' и (3) экранировать' & '. Полная команда может выглядеть так: '/ usr/bin/unoconv --listener \ & unoconv '. escapeshellarg ($ this-> path); ' – bishop

+0

Вспомните, я уже пробовал # 1. # 2 и # 3 без изменений. – Kiee

+0

Является ли ошибка выходным литералом? Или вы заменили команду '' // command // ''на фактическую команду, показанную в ошибке? Во всяком случае, на основе [man page] (http://linux.die.net/man/1/unoconv) может возникнуть проблема с использованием процесса с фоновым процессом. Попробуйте одноразовую версию: '$ cmd = sprintf ('/ usr/bin/unoconv -f pdf% s', escapeshellcmd ($ this-> path));'. – bishop

ответ

0

Пожалуйста, ознакомьтесь с this section, а также проверьте troubleshooting section.

Возможно, в оболочке отсутствуют некоторые важные переменные среды для работы unoconv/LibreOffice (PATH, HOME, ...). И рекомендуется вызывать двоичный код libreOffice python с помощью unoconv, а не оставлять его до unoconv, чтобы определить местоположение LibreOffice и python.

Смежные вопросы