如何以 PDF 格式呈现 ASP.NET MVC 视图

2024-04-03

我正在使用 ExpertPDF 的 Html-to-PDF 转换实用程序来解决这个问题(尽管如果有足够的文档,我也愿意接受其他库)。

简而言之,我有一个以特定方式格式化的视图,我想将其呈现为用户可以保存到磁盘的 PDF 文档。

到目前为止,我拥有的是一个 PrintService(它实现了一个 IPrintService 接口),这个实现有两个 PrintToPDF() 重载,一个只接受 URL,另一个接受 HTML 字符串,两者都返回一个 byte[]。我只计算出了需要 HTML 字符串的第二个重载的详细信息。

我想从我的控制器中执行的操作如下:

public FileStreamResult Print(int id)
{
    var model = _CustomRepository.Get(id);
    string renderedView = SomethingThatRendersMyViewAsAString(model);
    Stream byteStream = _PrintService.PrintToPdf(renderedView);
    HttpContext.Response.AddHeader("content-disposition", 
        "attachment; filename=report.pdf");
    return new FileStreamResult(byteStream, "application/pdf");  
}

理论上,这会将 PDF 渲染到页面上。这是我正在寻求帮助的“SomethingThatRendersMyViewAsAString”。有没有一种快速的方法来获取视图的字符串表示形式?或者也许我应该坚持使用 URL 重载并将 URL 传递给视图...还有其他想法吗?

Thanks!


我将我的解决方案打包在 Nuget 包中:Rotativahttp://nuget.org/packages/Rotativa http://nuget.org/packages/Rotativa。它基于 wkhtmltopdf。

使用方法非常简单。

您希望将某个操作作为 Pdf,而不是 Html 页面。您可以定义一个返回 ActionAsPdf 类型的 ActionResult 的操作(RouteAsPdf 也可用)。 所以代码就是:

public ActionResult PrintIndex()
{
    return new ActionAsPdf("Index", new { name = "Giorgio" }) { FileName = "Test.pdf" };
}

name =“Giorgio”作为路由参数。

即使打印操作受到 Web 表单身份验证([Authorize] 属性)的保护,它仍然有效

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以 PDF 格式呈现 ASP.NET MVC 视图 的相关文章

  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 配置的托管模块出现 Asp.net MVC 错误

    我有自定义身份验证HttpModule这是相当困难的 但我希望它仅针对托管请求运行 而不是静态请求 Asp net MVC 自动添加 IIS7 Web 服务器的配置部分
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 私有模板函数

    我有一堂课 C h class C private template
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • Xcode 11 PDF 图像资源“保留矢量数据”在 SwiftUI 中不起作用?

    我正在尝试在 Xcode 11 中使用 SwiftUI 的应用程序中使用 Single Scale 来使用基于矢量的 PDF 图像 但当我放大图像尺寸时 图像总是看起来模糊 我在 Xcode 11 的 UIKit 中没有遇到任何问题 我创建
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi

随机推荐

  • C++ - 检测超出范围的访问

    我想分析我的 C 代码以查找向量和数组中的错误访问 超出范围访问 是否有工具可以实现这一点 提前致谢 如果您使用的是 gcc 则可以使用定义的 GLIBCXX DEBUG 和 GLIBXX DEBUG PEDATIC 进行编译 如果请求越界
  • 如何修改此 sed awk 命令以便输出到所选文件?

    我正在使用这个答案中的最后一个命令https stackoverflow com a 54818581 80353 https stackoverflow com a 54818581 80353 cap cd tmp rm f vtt y
  • 对 AngularJS 依赖注入不一致感到困惑

    我是新来的angular js 并浏览了几个教程 包括此处的所有教程代码学校 http campus codeschool com courses shaping up with angular js intro 我发现它们非常有用 并且学
  • Google Play 开发者控制台:支持的 Android 设备:0

    我尝试过多次上传 我还查看了有关同一问题的许多其他问题 在我的物理设备上运行良好 但上传到 google play 时显示它支持 0 个设备
  • 为什么我会在 .NET 的 StartsWith 中看到这种意外行为?

    这一定是一个 NET 错误 对吧 KonNy StartsWith Kon 返回 false 同时 KonNy StartsWith Ko and KonN StartsWith Kon 返回真 我在这里缺少什么吗 重复评论 我不太了解 N
  • 使用 fql 检查 Facebook 用户是否喜欢某个页面

    我想检查登录用户是否喜欢指定的页面 下面是我的代码 fql pageid SELECT url site id FROM object url WHERE url IN http developers facebook com api pa
  • 将本地分支合并到远程分支而不是master?

    我有一个本地分支 A 但远程存储库中尚不存在 我在远程仓库中还有一个远程分支 B 如何将本地更改合并到远程分支 如果分支 B 在本地 您可以在本地合并 A 到 B 然后将 B 推送到远程 git checkout B git merge A
  • ASP.NET 中的简单 Web 部件显示为空白页

    我正在尝试开发 Web 部件VS 2008 WinXP 我创建了一个网站项目 并在默认表单中添加了几个 Web 部件default aspx
  • 无法通过curl访问github

    尝试使用以下命令访问 github 失败 并出现验证失败错误 我应该怎么做才能解决这个问题 C software curl 7 23 1 win64 ssl sspi gt curl i https api github com curl
  • 在 Bash 中分割逗号分隔的字符串

    我有这个文件 里面有 20k IP 104 20 15 220 104 20 61 219 104 20 62 219 104 20 73 221 104 20 74 221 104 20 14 220 104 20 15 220 104
  • C# 奇怪的 WPF 组合框行为

    I have simple window This is what happens when I click ComboBox List appears in upper left corner of screen instead of u
  • 构建 Erlang 服务器场(用于业余爱好项目)最便宜的方法是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 假设我们有一个 本质上并行 的问题需要用 Erlang 软件来解决 我们有很多并行进程 每个进程都执行顺序代码 不是数字运算 并且我们向它们投入的 C
  • C++ 元编程中的 typedef 与公共继承

    免责声明 这个问题与继承而不是 typedef https stackoverflow com questions 441744 inheritance instead of typedef到目前为止我找不到任何类似的问题 我喜欢玩 C 模
  • 在 iPhone 中显示图库中的图像

    我是 iPhone 新手 现在正处于学习阶段 实际上我想实现读取存储在 iPhone PHOTO Gallery 中的图像 然后将其显示到我的应用程序上 我在很多搜索引擎中进行了搜索 但找不到任何东西 你们这里都是专业人士 请指导我完成一些
  • 使用 PHP 反向抓取图像

    我需要使用 google 反向图像搜索来获取一些图像 API 不支持该搜索 但幸运的是 您可以通过图像的直接链接查询 google 它仍然显示结果 因此 googleURL https www google com searchbyimag
  • 我应该使用哪个版本的 iOS SDK?

    请告诉我应该使用哪个版本的 iOS SDK 以便我的应用程序可以在 iPhone 3 0 或更高版本上运行 您应该注意两个不同的概念 基础 SDK 这是您用来构建应用程序的内容 最新版本是 4 2 因此您应该使用它来构建您的应用程序 iOS
  • 自动在输入框中填写数据

    我有四个输入框 如果用户填充第一个框并单击按钮 那么它应该使用用户在第一个框中输入的值自动填充剩余的输入框 可以使用javascript来完成吗 或者我应该说用用户输入的最后数据预先填充文本框 单击按钮时 调用此函数 function fi
  • 为什么“notifyDatasetChanged()”不通知所有可见项目?

    背景 注意 我已经使用listViews很多年了 所以我非常熟悉如何使用适配器 ViewHolders等 所以这个问题对我来说没有意义 这次我遇到了一个非常奇怪的行为 由于某种原因只发生在 2 台设备上 LG G2 搭载 Android 4
  • 即使图像没有改变,如何更新数据库记录

    我使用 localDB 作为我的数据库 我有一个员工表 员工图像存储在另一个表中 这是我用于创建和更新的存储过程 IF NOT EXISTS SELECT FROM dbo Employee WHERE employee id employ
  • 如何以 PDF 格式呈现 ASP.NET MVC 视图

    我正在使用 ExpertPDF 的 Html to PDF 转换实用程序来解决这个问题 尽管如果有足够的文档 我也愿意接受其他库 简而言之 我有一个以特定方式格式化的视图 我想将其呈现为用户可以保存到磁盘的 PDF 文档 到目前为止 我拥有