Использование wkhtmltopdf в Windows
Я пытаюсь настроить отличный HTML-образ плагина с именем wkhtmltopdf, и у меня очень трудное время.
Что я сделал до сих пор:
-
Загрузили пакет wkhtmltopdf zip и удалили файл в корневой папке моих веб-сайтов
-
В качестве теста я включил следующий код в свой файл index.php, который я ожидал бы сохранить содержимое веб-сайта bbc.com в виде .jpg изображения в корневой папке моих сайтов:
..
shell_exec ('./wkhtmltopdf --quality 50 http://www.bbc.com bbc.jpg');
Ничего не происходит. PHP не работает в безопасном режиме, так что это не проблема. shell_exec выполняет, я смог создать документ .txt, используя его.
Я исследовал это в течение нескольких дней, я предлагаю 100 bounty всем, кто может придумать четкое, упрощенное пошаговое руководство по настройке wkhtmltopdf на Widows для запуска с использованием PHP.
В частности, я ищу упрощенный прохождение:
-
Настройте wkhtmltopdf для работы в Windows с помощью php (см. подробности об общих проблемах и способах их устранения).
-
При щелчке по кнопке или ссылке: распечатайте "текущую" веб-страницу в pdf, включая все заполненные значения ввода (включая пример кода для этой части). Веб-страницы с событиями, которые изменяют содержимое страницы, должны распечатать текущую версию страницы, не начальное состояние страницы.
-
Создайте ссылку для загрузки созданного .pdf, onClick той же функции, которая была упомянута выше, которая создает и печатает в pdf (включая пример кода для этой части).
Ответы
Ответ 1
Я понимаю, что это старый вопрос, но поскольку он является единственной найденной мной библиотекой, которая будет печатать из HTML в PDF и сохранять изображения и цвета фона, я использую командную строку Windows. Раньше я использовал PDF Architect, но он никогда не мог обрабатывать цвета фона.
Когда вы устанавливаете wkhtmltopdf, он переходит в c:\Program Files\wkhtmltopdf\или c:\Program Files (x86)\wkhtmltopdf.
Скажем, что у вас есть локальная среда PHP, где http://localhost/
настроена как отправная точка. Также скажем, что у вас есть файл html_invoice.html и вы хотите распечатать его в файле dev_invoice_200.pdf и поместить его в свою папку счетов-фактур внутри веб-сервера xampp. Для этого вы должны запустить командную строку Windows (т.е. Пуск → Все программы → Стандартные → Командная строка или Пуск → Выполнить → cmd) и введите:
c:\Program Files\wkhtmltopdf\bin\wkhtmltopdf http://localhost/html_invoice.html c:\xampp\htdocs\invoices\dev_invoice_200.pdf
Это создаст PDF файл в нужном месте.
Поскольку мы используем командную строку Windows, на самом деле нет причин использовать PHP. Вместо этого мы можем использовать командный файл, и если нам нужно его автоматизировать, мы можем использовать планировщик заданий Windows для вызова командного файла ( "Пуск" → "Все программы" → "Стандартные" → "Служебные" → "Планировщик заданий" ).
Если вы никогда не делали пакетные файлы, вы просто набираете команды, которые хотите сделать, в текстовый файл и сохраняете его с расширением .bat.
Итак, скажем, что мы хотим всегда печатать файл html_invoice.html в том же месте в папке счетов-фактур с именем dev_invoice.pdf и что мы собираемся изменить имя после его получения. Вы просто поместите строку выше минус "_200" в текстовый файл и сохраните ее как .bat, а затем дважды щелкните по ней в Windows или запустите ее через Task Scheduler.
Ответ 2
Трудно разобраться в том, что является актуальной проблемой здесь, но я сделал учебное пособие по выпуску wkhtmltopdf для ответа в среде Windows 7/PHP. Спросите, нужны ли вам дополнительные сведения - я уверен, что это не касается вашей проблемы.
Как я уже сказал в комментариях, ваш вызов функции shell_exec('./wkhtmltopdf --quality 50 http://www.bbc.com bbc.jpg');
завершится неудачно, потому что wkhtmltopdf и wkhtmltoimage являются разными программами и принимают разные параметры командной строки. Замените wkhtmltopdf на wkhtmltoimage в этой команде, и вы можете получить выходной файл. Я считаю, что в вашем случае наиболее интересным будет выполнение теста как shell_exec('c:\wkhtmltopdf\wkhtmltopdf www.google.com goog.pdf 2>> err3.txt 1>> out3.txt');
, так как там вы можете увидеть все разные входные/выходные данные, которые делает wkhtmltopdf.