wkhtmltopdf попытке загрузки с HTTP, а не файл



Вот странная маленькая проблема, которая заставила меня опубликовать свой первый вопрос на SO. Я использую wkhtmltopdf для преобразования HTML-документа в PDF как часть приложения Rails. Для этого я рендерингу веб-страницу Rails в статический HTML-файл во временном каталоге, копирую статический верхний и Нижний колонтитулы и изображения в тот же временный каталог, а затем выполняю wkhtmltopdf с помощью "system".



Это прекрасно работает в среде разработки и тестирования. В моей постановке env, это не так. Я подозревал разрешения на во-первых, но первые две части этого процесса (создание статических HTML-файлов и копирование их в каталог) работают. Я могу запустить wkhtmltopdf из командной строки в этом временном каталоге и получить ожидаемый результат. Наконец, я запустил wkhtmltopdf через "system" и backticks через консоль Rails в промежуточной среде, и вот что я получаю в качестве вывода:



> `wkhtmltopdf --footer-html tmp/invoices/footer.html --header-html tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in tmp/invoices/test.html tmp/invoices/this.pdf`
Loading pages (1/6)
QPainter::begin(): Returned false ] 10%
Error: Unable to write to destination
Error: Failed loading page http://tmp/invoices/test.html (sometimes it will work just to ignore this error with --load-error-handling ignore) => ""


Обратите внимание на последний бит. Я указываю на локальные файлы, но он ищет их через http. Ладно, думаю я, может быть, я ... нужно быть явным и передать ему файл: / / protocol, чтобы он не искал http. Поэтому я пытаюсь сделать следующее:



> system("wkhtmltopdf --footer-html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/footer.html --header-html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/this.pdf")
Loading pages (1/6)
Error: Failed loading page file://library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html (sometimes it will work just to ignore this error with --load-error-handling ignore)
=> false


Обратите внимание, что это не удается со строчной буквой "l" в библиотеке. Какого черта? (И нет, это не становится лучше с рекомендацией игнорировать ошибку с этим переключателем.)



Есть идеи? Существует ли параметр Rails или Ruby, который вызывает перезапись системных команд? Есть ли опция, которую я могу добавить в wkhtmltopdf, чтобы убедиться, что он загружается из локального файла? Я совершенно сбит с толку. Спасибо!

761   3  

3 ответов:

Взгляните на драгоценный камень wicked_pdf. Вы можете добавить тип PDF mime, а затем любую страницу, которую вы хотите pdf, просто прикрепите .pdf к URL-адресу.

Я использую это в prod, и это работает довольно хорошо. Нет необходимости вызывать wkhtmltopdf напрямую.

У меня был успех при использовании абсолютного пути к файлу (обратите внимание на дополнительную косую черту после file://)

wkhtmltopdf --footer-html file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/footer.html --header-html file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/this.pdf

То же самое и в windows

Unix path

file:///absolute/path/to/file

Путь к Windows

file:///C:/absolute/path/to/file

В последнем 0.11 whicked-pdf я нашел одну ошибку
Пример C:\Ruby193\lib\ruby\gems\1.9.1\gems\wicked_pdf-0.11.0\lib>wicked_pdf.rb Строка 198 я изменяю с:
options[hf] [: html] [: url] = " file:/ / #{tf.path} "to options[hf] [: html] [: url] =" file:/ / / #{tf.path} " - (изменить / / на ///)
После смены уик-ПДФ снова работал.

Comments

    Ничего не найдено.