Команда wkhtmltopdf не работает

Я пытаюсь преобразовать HTML файл в PDF с помощью wkhtmltopdf.

Для этой цели я установил wkhtmltopdf в поле Debian и пытаюсь запустить эту команду:

/usr/bin/xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf /path/convert.1303714349.4961.html.tmp /path/convert.1303714349.4961.pdf.tmp

Я получаю следующую ошибку:

Loading page (1/2)
Error: Failed loading page file:///path/convert.1303714349.4961.html.tmp (sometimes it will work just to ignore this error with --ignore-load-errors)

Файл существует в /path/convert.1303714349.4961.html.tmp, и разрешения установлены правильно. Может ли это иметь какое-либо отношение к тому, что путь был добавлен с помощью file://?

Ответ 2

Еще один полезный совет - заменить пробелы в имени файла некоторым char похожим на "_", из-за того, что имя файла имеет пробелы, процесс не загружается страницы

Ответ 3

У меня не было проблем с путями "file://" в моем окне Windows 7.

Пробовал ли вы совет в сообщении об ошибке, --igonore-load-errors?

Ответ 4

Ваша проблема вызвана согласованием разрешения пользователя между файловой системой, xvfb-run wkhtmltopdf и безголовым сервером X11.

Пользователь запускает эту команду:

cd /home/user;
touch somehtml.html;
/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" 
     wkhtmltopdf somehtml.html preview.pdf;

wkhtmltopdf выдает предупреждение:

Предупреждение: не удалось загрузить файл страницы:///home/user/somehtml.html (игнорируется)

Целевой файл PDF не существует, в нем отсутствует содержимое файла somefile.html или он пуст.

Как воспроизвести проблему, sscce:

условия:

64 bit Fedora Linux 17, PC Desktop
Install via a 'sudo yum install wkhtmltopdf'
wkhtmltopdf has version 0.10.0
From a terminal, using xvfb-run

Оскорбительный HTML-код в somehtml.html:

<html>
<head>head tag</head>
  <body>
    <h1>this should be H1<h1>
    Words words words in a paragraph.
  </body>
</html>

Быть в каталоге пользователя и запустить

cd /home/user;
/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf /home/user/somehtml.html /home/user/preview.pdf

wkhtmltopdf выдает предупреждение

Предупреждение: не удалось загрузить файл страницы:///home/user/somehtml.html (игнорируется)

/home/user/preview.pdf отсутствует или пусто.

Что является причиной проблемы:

Ваш xvfb-run wkhtmlpdf пользователю и не имеет права на чтение и запись в /home/user/somehtml.pdf или /home/user/preview.pdf

Чтобы узнать, является ли это вашей проблемой, спросите у xvfb-run какие у нас есть разрешения?

/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" whoami > /tmp/secret.txt; cat /tmp/secret.txt

Временное решение:

/tmp обычно имеет более слабые права доступа, чем /home/user/, поэтому выполняйте всю свою работу внутри /tmp

cd /tmp;
touch /tmp/somehtml.html;
#put above html in somehtml.html
cat /tmp/somehtml.html
    <html>
    <head>head tag</head>
      <body>
        <h1>this should be H1<h1>
        Words words words in a paragraph.
      </body>
    </html>
/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf /tmp/somehtml.html /tmp/preview.pdf

И вы должны получить этот стандартный вывод:

loaded the Generic plugin 
Loading page (1/2)
Printing pages (2/2)
Done

И превью .pdf

chrome_wkhtmltopdf_and_xvfb-run

Почему wkhtmltopdf не умнее и не решает эту проблему для меня?

Это сложнее, чем кажется, потому что wkhtmltopdf приходится бороться с враждебным сторонним проприетарным программным обеспечением для рендеринга PDF (сделанным Adobe?), И они работают совместно с разработчиками браузеров, чтобы запутать и затруднить доступ к своим движкам, потому что многие крупные корпорации за их деньги за их совершенно секретный исходный код. wkhtmltopdf проникает в этот мир, чтобы люди с открытым исходным кодом могли иметь его, не оплачивая костюмы в высоких офисных зданиях наличными деньгами. Поэтому Adobe платит деньги разработчикам браузеров, чтобы нам было сложно. Мы ослабляем их механизм прибыли, поэтому они наносят ответный удар, бросая в нас стоп-джойстки, где могут. Это то, что.