我需要将网页[无法公开访问]转换为PDF或图像[最好转换为PNG]。
网页包含一组图表和图片。大多数图表都是通过Ajax调用填充的,因此页面加载和图表加载之间存在延迟。
我正在寻找以下任何问题的答案:
1-我发现了一组快照api,但没有一个支持访问我的内部页面。由于我试图导出的网页不公开,我需要进行身份验证。最大的问题是我无法发送请求标头[例如session-id,cookie或其他变量]以及这些API。它们似乎不支持这种功能。
2-我不确定是否可以执行以下操作:使用HTTP客户端登录我的网页,添加http标头,发送get调用并获取HTML字符串。然后使用其中一个转换器将其转换为PDF。我不确定是否可以从http客户端获取的HTML字符串中获取正确的PDF,因为资源[css,js等]将丢失。我希望我的pdf / image看起来与网站上的完全一致。
如果你能提供帮助我真的很感激。
提前致谢,
ED
答案 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的解决方案。