Ответ 1
Во-первых, техническое примечание. Поскольку вы хотите использовать wkhtmltopdf в веб-проекте, если и когда вы развертываете на машине Linux-сервера, к которой вы обращаетесь через ssh (то есть по сети), вам нужно либо использовать исправленную Qt или запустить X-сервер, например фиктивный X-сервер xvfb. (Я не знаю, что произойдет, если вы развернете сервер, на котором установлена операционная система, отличная от Linux.)
Во-вторых, очень просто использовать wkhtmltopdf с любого языка в веб-проекте.
Если вы просто хотите сохранить серверную версию текущей страницы, то есть без каких-либо изменений, которые могли бы быть сделаны как заполнение пользователем форм, или Javascript, добавляющий новые элементы DOM, вам просто нужно иметь дополнительный дополнительный аргумент типа ?generate=pdf
в конце вашего URL-адреса, что приведет к созданию этой страницы в виде PDF файла, а затем кнопка PDF будет ссылаться на этот URL-адрес. Это может быть большой проблемой для добавления каждой страницы вручную, если вы просто используете простой JSP или что-то в этом роде, но в зависимости от того, какую веб-инфраструктуру вы используете, веб-инфраструктура может предложить некоторую помощь для реализации того же действия на каждой странице, если вам нужно реализовать это.
Чтобы реализовать этот подход, вы, вероятно, захотите захватить ответ, обернув объект ответа и переопределив его методы getWriter()
и getOutputStream()
.
Другой подход заключается в том, чтобы кнопка "отправить и создать PDF", которая сгенерирует следующую страницу как PDF. Это может иметь смысл, если у вас есть форма, которую пользователь должен заполнить - я не знаю. Это действительно дизайнерское решение.
Третий подход заключается в использовании Javascript для загрузки текущего состояния страницы на сервер и обработки с помощью wkhtmltopdf. Это будет работать на любой странице. (Это может даже использоваться на любом сайте, а не только на вашем, если вы делаете это букмарклет. Просто идея, которая пришла мне в голову - это может быть не очень хорошая идея.)
Четвертый подход заключается в том, что wkhtmltopdf может извлекать URL-адреса, чтобы передавать URL-адрес вашей страницы, а не содержимое страницы (что будет работать только в том случае, если запрос был HTTP GET, или если он эквивалентен HTTP GET on тот же URL). У этого есть небольшое количество накладных расходов над захватом вашего собственного ответа, но это, вероятно, будет незначительным. Скорее всего, вам понадобится скопировать файлы cookie в банку cookie с таким подходом, так как предположительно ваш пользователь может войти в систему или иметь неявный сеанс.
Итак, вы видите, что есть много вариантов!
Теперь остается вопрос: когда на вашем сервере есть необходимый HTML-код, из любого из приведенных выше подходов, как подать его в wkhtmltopdf? Это довольно просто. Вам нужно будет создать внешний процесс, используя Runtime.getRuntime().exec()
, или новый API под названием ProcessBuilder
- см. http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html для сравнения. Если вы умны, вы должны сделать это, не создавая временных файлов.
Один из сайтов wkhtmltopdf в настоящее время недоступен, но главная README доступна здесь, в которой объясняются аргументы командной строки.
Это всего лишь контурный ответ, который дает некоторые указатели. Если вам нужна дополнительная информация, сообщите нам, что конкретно вам нужно знать.