2

我已经构建了为用户查看的报告生成 pdf 文件的功能。

所以它当前所做的是当用户点击打印 pdf 按钮时

  1. 获取需要打印的div的html内容
  2. 使用带有 POST 的 jquery ajax 方法将此内容发送到控制器的方法
  3. 在控制器中,它使用 html 文档字符串等包装内容<html><body>此外我还在那里添加了一些样式。
  4. 然后这个 html 字符串被传递给我正在使用的工具之一,它返回这个字符串的 pdf 字节
  5. 然后它将这些字节保存为文件夹中的 pdf 文件并返回该文件的路径。
  6. Jquery 然后在成功方法上打开此文件路径的窗口。

这一切都很好。

问题是

  1. 它不会立即打开窗口,因为它会执行所有处理,然后在成功时打开窗口
  2. 另外,我想知道我是否正确地执行了这一切或执行了一些额外的不必要的步骤,从这里我的意思是有没有更好的方法或短的方法来做到这一点。

像在获取 div 的内容后对字符串进行一些更改以直接在新窗口中将其显示为 pdf 内容等以避免服务器处理,这可能吗?

到目前为止,我一直试图直接显示内容,data:application/pdf但没有奏效。

如果那不可能,我想避免保存 pdf 文件,而只是显示将以 pdf 格式打开的视图,可能是通过设置它content-type,这可能吗?

4

1 回答 1

2

你所做的是最好的方法。(所有)浏览器不具备将 html 转换为 pdf 的功能,因此您不能只命令它们以 pdf 格式打开页面。您必须从服务器提供 pdf 文件。为了获得更多控制,您可以从指定 url 的脚本中提供文件并添加适当的标题:

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"'); // second parameter is the name of the file

内容类型意味着浏览器将尝试使用适合此 MIME 类型的程序打开它。内联内容处置意味着浏览器将尝试在浏览器中打开它。

当服务器正在工作时,只需向用户显示“加载”图像。这样用户就会知道正在发生某些事情并且他需要等待。

于 2013-04-19T15:15:18.297 回答