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, чтобы убедиться, что он загружается из локального файла? Я совершенно сбит с толку. Спасибо!
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