Во-первых, техническое примечание: поскольку вы хотите использовать wkhtmltopdf в веб-проекте, если и когда вы развертываете на сервер Linux, который вы используете через ssh (то есть по сети), вам нужно будет либо использовать исправленный Версия Qt или запустить X-сервер, например фиктивный X-сервер xvfb. (Я не знаю, что произойдет, если вы развернете на сервер под управлением операционной системы, отличной от Linux.)
Во-вторых, очень просто использовать wkhtmltopdf с любого языка в веб-проекте.
Если вы просто хотите сохранить сгенерированную сервером версию текущей страницы, т.е. без каких-либо изменений, которые могли бы быть сделаны, например, при заполнении форм пользователем или добавлении новых элементов DOM в Javascript, вы просто в конце вашего URL-адреса необходимо указать дополнительный необязательный аргумент, например ?generate=pdf
, что приведет к созданию этой страницы в формате PDF, после чего кнопка PDF будет ссылаться на этот URL-адрес. Это может быть много работы для добавления на каждую страницу вручную, если вы просто используете простой JSP или что-то, но в зависимости от того, какую веб-платформу вы используете, веб-платформа может предложить некоторую помощь для реализации того же действия на каждой странице, если вам нужно реализовать это.
Чтобы реализовать этот подход, вы, вероятно, захотите захватить ответ, обернув объект ответа и переопределив его методы getWriter()
и getOutputStream()
.
Другой подход заключается в том, чтобы иметь кнопку «отправить и сгенерировать PDF», которая будет генерировать следующую страницу в виде PDF. Это может иметь больше смысла, если у вас есть форма, которую пользователь должен заполнить - я не знаю. Это действительно дизайнерское решение.
Третий подход заключается в использовании Javascript для загрузки текущего состояния страницы обратно на сервер и обработки этого с помощью wkhtmltopdf. Это будет работать на любой странице. (Это может даже использоваться на любом сайте, не только на вашем, если вы сделаете его букмарклетом. Просто идея, которая пришла мне в голову - это может быть не очень хорошая идея.)
Четвертый подход заключается в том, что wkhtmltopdf может извлекать URL-адреса, чтобы передавать URL-адрес вашей страницы вместо содержимого страницы (который будет работать только в том случае, если запрос был HTTP GET или эквивалентен HTTP GET для тот же URL). Это приводит к небольшим накладным расходам по сравнению с записью ваших собственных выходных ответов, но, вероятно, будет незначительным. При таком подходе вам также, скорее всего, потребуется скопировать cookie-файлы в jar-файл 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 доступен здесь , который объясняет аргументы командной строки.
Это просто набросок ответа, в котором даются некоторые указания. Если вам нужна дополнительная информация, сообщите нам, что конкретно вам нужно знать.