Команда 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://
?
Ответы
Ответ 1
Я считаю, что wkhtmtopdf
не обрабатывает локальные файлы с нестандартными расширениями. Попробуйте переименовать входной файл в *.html
.
См. вопрос и комментарии в https://web.archive.org/web/20131124022426/http://code.google.com/p/wkhtmltopdf/issues/detail?id=486.
Ответ 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 платит деньги разработчикам браузеров, чтобы нам было сложно. Мы ослабляем их механизм прибыли, поэтому они наносят ответный удар, бросая в нас стоп-джойстки, где могут. Это то, что.