- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 wkhtmltopdf 的新手。我想知道如何在 Eclipse 中将 wkhtmltopdf 与我的动态 Web 项目 一起使用?如何将 wkhtmltopdf 与我的 Java 动态 Web 应用程序集成?
有没有适合 wkhtmltopdf 初学者的教程?
(基本上,我想在我的 Web 应用程序中使用 wkhtmltopdf,这样当用户单击保存按钮时,当前的页面 将保存为 PDF 文件)。
最佳答案
首先,一个技术说明:因为您想在 Web 项目中使用 wkhtmltopdf,如果您部署到通过 ssh(即通过网络)访问的 Linux 服务器计算机时,您将需要使用已打补丁的Qt 版本,或运行 X 服务器,例如虚拟 X 服务器 xvfb。 (我不知道如果部署到运行非 Linux 操作系统的服务器上会发生什么情况。)
其次,在 Web 项目中使用任何语言的 wkhtmltopdf 应该非常简单。
如果您只想保存当前页面的服务器生成的版本,即没有任何可能已进行的更改,例如用户填写表单或 Javascript 添加新的 DOM 元素,您只需要在您的 URL 末尾有一个额外的可选参数,例如 ?generate=pdf
,这将使该页面生成为 PDF,然后 PDF 按钮将链接到该 URL。如果您只是使用简单的 JSP 或其他东西,手动添加到每个页面可能会有很多工作,但是根据您使用的 Web 框架,Web 框架可能会提供一些帮助以在每个页面上实现相同的操作,如果你需要实现它。
要实现此方法,您可能希望通过包装响应对象并覆盖其 getWriter()
和 getOutputStream()
方法来捕获响应。
另一种方法是使用“提交并生成 PDF”按钮,该按钮会将下 页面生成为 PDF。如果您有用户需要填写的表格,这可能更有意义——我不知道。这确实是一个设计决定。
第三种方法是使用 Javascript 将页面的当前状态上传回服务器,然后使用 wkhtmltopdf 进行处理。这将适用于任何页面。 (这甚至可以用在任何网站上,而不仅仅是你的网站,如果你把它做成书签的话。这只是我想到的一个想法 - 它可能不是一个好主意。)
第四种方法是,因为 wkhtmltopdf 可以获取 URL,所以传递页面的 URL 而不是页面的内容(只有当请求是 HTTP GET 时才有效,或者如果它等同于 HTTP GET相同的网址)。这比捕获您自己的响应输出有一些开销,但它可能可以忽略不计。您也很可能需要使用这种方法将 cookie 复制到 cookie jar 中,因为您的用户可能已登录或有一个隐式 session 。
如您所见,有很多选择!
现在,问题仍然存在:当您的服务器拥有必要的 HTML 时,通过上述任何方法,如何将其提供给 wkhtmltopdf?这很简单。您将需要使用 Runtime.getRuntime().exec()
或名为 ProcessBuilder
的较新 API 生成外部进程 - 请参阅 http://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html进行比较。如果您对此很聪明,您应该能够在不需要创建任何临时文件的情况下执行此操作。
其中一个 wkhtmltopdf 网站目前已关闭,但主要的 README 可用 here ,其中解释了命令行参数。
这只是一个提供一些指示的大纲答案。如果您需要更多详细信息,请告诉我们您具体需要了解的内容。
关于java - 如何在 Java Web 应用程序中使用 wkhtmltopdf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5688585/
我是一名优秀的程序员,十分优秀!