将网页转换为PDF或图像

时间:2013-07-17 03:04:39

标签: java image pdf png

我需要将网页[无法公开访问]转换为PDF或图像[最好转换为PNG]。

网页包含一组图表和图片。大多数图表都是通过Ajax调用填充的,因此页面加载和图表加载之间存在延迟。

我正在寻找以下任何问题的答案:

1-我发现了一组快照api,但没有一个支持访问我的内部页面。由于我试图导出的网页不公开,我需要进行身份验证。最大的问题是我无法发送请求标头[例如session-id,cookie或其他变量]以及这些API。它们似乎不支持这种功能。

2-我不确定是否可以执行以下操作:使用HTTP客户端登录我的网页,添加http标头,发送get调用并获取HTML字符串。然后使用其中一个转换器将其转换为PDF。我不确定是否可以从http客户端获取的HTML字符串中获取正确的PDF,因为资源[css,js等]将丢失。我希望我的pdf / image看起来与网站上的完全一致。

如果你能提供帮助我真的很感激。

提前致谢,

ED

2 个答案:

答案 0 :(得分:1)

你可能最好使用wkhtmltopdf,这是一个服务器端工具,很容易安装。

您可以使用两个参数来等待Ajax完成,请尝试:

  • javascript-delay影响程序等待JavaScript完成的时间
  • window-status等待窗口的某个返回码

请参阅此计划的详尽手册here

wkhtmltopdf生成PDF并且wkhtmltoimg生成图像,默认情况下为PNG(如您所请求的)。

答案 1 :(得分:0)

身份验证很困难,因为它涉及安全性。因为你描述的操作很不寻常,所以可能会导致各种警报响起。完全有可能这样做,但面对安全更新和代码更改,它很容易出错,容易出错和脆弱。

因此,我将建议一种替代方法,这是我们经常推荐的ABCpdf(我工作的方法)。是的,我们支持标准的身份验证方法,但这种方法的优点在于它非常强大,适用于其他解决方案(例如基于Java)和新的身份验证方法。

通常,您只需要当前页面的PDF。最简单的方法是麻烦HTML。你这样做的方式取决于你的环境。例如,在ASP.NET下,您可以使用HttpResponse.Filter属性或通过覆盖页面的Render方法获取当前页面的HTML。你这样做的方式将取决于你编写的内容。

然后,您需要将此HTML保存到文件中,并通过“file://”协议URL将其呈现给您的解决方案。现在很明显,此时任何相对链接都将被破坏,但可以通过放入引用它们所在位置的BASE标记来轻松修复。

通常,服务器端页面引用的资源类型是静态的。因此,如果您可以创建引用实际文件而不是网站的标记,则可以绕过任何身份验证以访问这些资源。

这仍然是基于AJAX的问题,这是另一种蠕虫病毒。渲染延迟方法是我们多年来一直支持的(从AJAX开始之前),但它并不十分可靠,因为你只知道要等多久。

通过可用于确定页面是否已加载的回调更紧密地链接到JavaScript。我认为ABCpdf不适合你,因为它是.NET,但我当然鼓励你寻找一种使用这种更复杂方法的基于Java的解决方案。