1

我需要将网页 [没有公共访问权限] 转换为 PDF 或图像 [最好是 PNG]。

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

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

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

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

如果您能提供帮助,我将不胜感激。

提前致谢,

ED

4

2 回答 2

1

您可能最适合使用 wkhtmltopdf,它是一个服务器端工具并且易于安装。

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

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

在此处查看该程序的详尽手册

wkhtmltopdf 生成 PDF, wkhtmltoimg 生成图像,默认为 PNG(如您所要求的)。

于 2013-07-17T13:45:31.080 回答
0

身份验证很困难,因为它涉及安全性。由于您所描述的操作不寻常,因此很可能导致各种警钟响起。这是完全有可能做到的,但是面对安全更新和代码更改,它是令人担忧的、容易出错和脆弱的。

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

通常,您只需要当前页面的 PDF。最简单的方法是扫描 HTML。您执行此操作的方式取决于您的环境。例如,在 ASP.NET 下,您可以使用 HttpResponse.Filter 属性或通过覆盖页面的 Render 方法来获取当前页面的 HTML。您执行此操作的方式将取决于您正在编码的内容。

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

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

这仍然留下了基于 AJAX 的问题,这是另一种蠕虫。渲染延迟方法是我们多年来一直支持的(在 AJAX 出现之前),但它并不是非常可靠,因为您只是不知道要等待多长时间。

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

于 2013-07-19T07:44:06.083 回答