【问题标题】:Writing string content as PDF将字符串内容写入 PDF
【发布时间】:2013-04-19 13:03:42
【问题描述】:

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

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

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

一切正常。

问题是

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

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

到目前为止,我一直尝试使用data:application/pdf 直接显示内容,但没有成功。

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

【问题讨论】:

    标签: javascript asp.net-mvc-3 pdf-generation


    【解决方案1】:

    您所做的是最好的方法。 (所有)浏览器不具备将 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 类型的程序打开它。 Content Disposition inline 意味着浏览器会尝试在浏览器中打开它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      相关资源
      最近更新 更多