如何在 ASP.Net MVC 中使用 PdfSharp 显示 PDF?

2023-11-26

我们正在制作一个 ASP.Net MVC 应用程序,它需要能够生成 PDF 并将其显示到屏幕上或将其保存在用户易于访问的位置。我们使用 PdfSharp 生成文档。完成后,我们如何让用户保存文档或在阅读器中打开它?我特别困惑,因为 PDF 是在服务器端生成的,但我们希望它显示在客户端。


这是用于创建我们迄今为止编写的报告的 MVC 控制器:

public class ReportController : ApiController
{
    private static readonly string filename = "report.pdf";

    [HttpGet]
    public void GenerateReport()
    {
        ReportPdfInput input = new ReportPdfInput()
        {
            //Empty for now
        };

        var manager = new ReportPdfManagerFactory().GetReportPdfManager();
        var documentRenderer = manager.GenerateReport(input);
        documentRenderer.PdfDocument.Save(filename); //Returns a PdfDocumentRenderer
        Process.Start(filename);
    }
}

当它运行时,我得到一个UnauthorizedAccessException at documentRenderer.PdfDocument.Save(filename);说的是,Access to the path 'C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\report.pdf' is denied.我也不确定当线路上线时会发生什么Process.Start(filename);被执行。

这是代码中的manager.GenerateReport(input):

public class ReportPdfManager : IReportPdfManager
{
    public PdfDocumentRenderer GenerateReport(ReportPdfInput input)
    {
        var document = CreateDocument(input);
        var renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
        renderer.Document = document;
        renderer.RenderDocument();

        return renderer;
    }

    private Document CreateDocument(ReportPdfInput input)
    {
        //Put content into the document
    }
}

使用 Yarx 的建议和 PDFsharp 团队的教程,这是我们最终得到的代码:

控制器:

[HttpGet]
public ActionResult GenerateReport(ReportPdfInput input)
{
    using (MemoryStream stream = new MemoryStream())
    {
        var manager = new ReportPdfManagerFactory().GetReportPdfManager();
        var document = manager.GenerateReport(input);
        document.Save(stream, false);
        return File(stream.ToArray(), "application/pdf");
    }
}

报告Pdf管理器:

public PdfDocument GenerateReport(ReportPdfInput input)
{
    var document = CreateDocument(input);
    var renderer = new PdfDocumentRenderer(true,
        PdfSharp.Pdf.PdfFontEmbedding.Always);
    renderer.Document = document;
    renderer.RenderDocument();

    return renderer.PdfDocument;
}

private Document CreateDocument(ReportPdfInput input)
{
    //Creates a Document and puts content into it
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ASP.Net MVC 中使用 PdfSharp 显示 PDF? 的相关文章

  • 当checked属性为false时,单选按钮默认被选中?

    我正在尝试生成单选按钮 有条件地检查检查的属性 如果该值存在于数据库中 则应选择它 否则检查的属性为 false 所以最初数据库中没有行 所有单选按钮的检查属性也为 false 但仍然在 UI 上选择 请参见下图 所以不知道这是默认行为还是
  • ASP.NET MVC 4 中的 Toast 通知

    我想在用户使用 Toastr 插件单击 添加到购物车 按钮时显示通知 基本上 当用户单击按钮时 它会执行 AddToCart 操作 然后重定向到索引页面 当页面显示时 它会检查 TempData 值 然后显示通知 这是控制器 public
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • 禁用视图中所需的验证特定字段 ASP.NET MVC 4

    如果有人能给我一些提示 我将不胜感激 我搜索了一段时间 我什至找到了一个帖子 我认为它可以解决我的问题 但它没有 在某些情况下禁用必需的验证属性 https stackoverflow com questions 5367287 disab
  • 如何在 C# 中将 ListView 与目录和文件绑定

    我想在 C 的 ListView 中绑定 C 驱动器中的所有目录和文件 我的代码是 protected void Page Load object sender EventArgs e DirectoryInfo di new Direct
  • SimpleMemership CreateUserAndAccount 自定义

    我正在尝试添加一个新属性UserProfile我的模型中的类 public class UserProfile Key DatabaseGeneratedAttribute DatabaseGeneratedOption Identity
  • 在选中的复选框中发布表单时 ModelState 无效

    我遇到以下问题 如果我通过 AJAX 向 api 控制器提交包含复选框中选中值的表单 ModelState 对象会说它无效 先决条件 视觉工作室2012 ASP NET MVC 4 最终版 最新的 jQuery 和 jQuery 不显眼的验
  • Jquery 对话框部分视图服务器端验证“保存”按钮单击

    我有一个显示数据的表格 表格的每一行都有编辑按钮 单击编辑按钮时 将出现一个 jquery 对话框 其中包含用于编辑用户信息的表单以及保存和取消按钮 表单只不过是部分视图 按钮是部分视图的一部分
  • 在 Asp.net MVC4 中访问 ViewBag 时出现 NullReferenceException

    我正在尝试访问ViewBag我认为的数据如下 span class small ViewBag BreadCrumb span 我正在发送那个ViewBag来自代码的数据 例如 ViewBag BreadCrumb topic Catego
  • Err_Response_Headers_Multiple_Content_Disposition

    我需要导出 2csv单击一个按钮即可打开文件 下面是我生成2的代码csv files using System Data using System Data SqlClient using System Text using System
  • 基本类型的 ASP.NET MVC 4 编辑器模板

    我已经创建了一个用于数字输入的模板 如果我这样做 Html EditorFor model gt model SomeValue Number 它工作正常并且使用了模板 但这不起作用 Html EditorFor model gt mode
  • mvc 4下拉默认值选择

    我想在下拉列表中选择默认值 其中policyId 7 但它没有选择该值 我做错了什么 控制器 var pm new ManagerClass IEnumerable
  • 演示如何在 C# 4.0 中使用新的“dynamic”关键字

    这是 4 0 版本中新的 C 未来 称为动态 告诉我如何在我的代码中使用它以及这个未来可以如何帮助我 相关问题 新的 dynamic C 4 0 关键字是否弃用了 var 关键字 https stackoverflow com questi
  • 任务.wait 和 continueWIth

    我有一个如下的任务 var task Task
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • ModelBinder 验证在使用反射的 getter 上中断

    我遇到了一个似乎与反射和模型绑定验证有关的问题 并且FormatterParameterBinding ExecuteBindingAsync 特别是 虽然我可以使用方法来做我想做的事情 但如果我可以使用属性 我会更喜欢它 在这里 我正在寻
  • 在 C# 中将平面数据库结果集转换为分层对象集合

    我有一个数据库查询 它以平面格式返回分层数据 例如客户 订单和订单项目 只是一个例子 我的数据不同 如何将其转换为分层对象集合 即客户对象的集合 其中每个客户对象都有订单对象的集合 每个订单对象都有订单项目对象的集合 这只是循环遍历每个项目
  • ServerManager 构造函数在测试环境中崩溃

    我正在 MVC 4 中构建一个控制应用程序 遇到了一个非常烦人的问题 当我在本地调试项目时 它工作正常 但是 当我将项目部署到测试服务器 Windows Server 2008 R2 时 出现以下换行符 ServerManager mana
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi

随机推荐

  • 使用 Angular CLI 和 Angular 5 在运行时动态加载新模块

    目前我正在开发一个托管在客户端服务器上的项目 对于新的 模块 有无意重新编译整个应用程序 也就是说 客户想要在运行时更新路由器 延 迟加载模块 我已经尝试了几种方法 但无法使其发挥作用 我想知道你们中是否有人知道我还可以尝试什么或我错过了什
  • 如何使用 jQuery 发出指定 contentType 的 jsonp POST 请求?

    我需要使用内容类型 application json 发出 jsonp POST 请求 我可以像这样向服务器发出 POST 请求 jQuery ajax type POST url url data data success success
  • Swift 中的#pragma 标记?

    在 Objective C 中 我可以使用 pragma mark在符号导航器中标记我的代码部分 由于这是一个 C 预处理器命令 因此它在 Swift 中不可用 Swift 中是否有替代方案 或者我是否必须使用丑陋的注释 您可以使用 MAR
  • 在scrapy中抓取后发送电子邮件

    pipeline py代码 class Examplepipeline object def init self dispatcher connect self spider opened signal signals spider ope
  • 是否可以使用 Linkedin Api 获取所有 Linkedin 个人资料帖子

    我正在尝试使用 linkedin API 来显示我的个人资料的提要 我从第一天开始就发布了这些内容 帖子包括媒体 图像 视频等 我想知道是否有可用的 Api 我可以在其中传递一些参数并获取我的 linkedin 个人资料的所有帖子 如果有人
  • 是否有必要在 return 语句中使用 std::move ,并且应该返回右值引用吗?

    我试图理解 C 11 的右值引用和移动语义 这些示例之间有什么区别 哪些示例不进行矢量复制 第一个例子 std vector
  • 如何在控制器中不使用 Rails 操作参数

    我正在 Rails 服务器中为 Shipworks 实现第三方 API 并且 Shipworks 客户端应用程序正在发布action具有 Shipworks 特定语义的参数 然而 Rails 路由逻辑会将此参数覆盖为控制器方法的名称 我是否
  • 如何更新 pandas 中的现有数据框?

    给定这两个数据框 gt gt gt df1 pd DataFrame c1 a a b b c2 x y x y val 0 gt gt gt df1 c1 c2 val 0 a x 0 1 a y 0 2 b x 0 3 b y 0 gt
  • Unity3D,从Unity.UI面板构建PNG?

    考虑任何 Unity UICanvas你可能有 想象一个典型的Panel在那张画布上 假设它恰好包含一些图像 也许一些文本等等 如果您可以将该面板 仅面板 转换为屏幕截图 Texture2D 或 PNG 那将非常方便 我唯一能想到的就是使用
  • 更改 Forge 中的材料

    目前 我们正在让客户端在页面加载时检索对象状态 这将导致模型中的 待处理 对象变成不同的颜色 然后我们轮询更改以更新着色 首先 当查看器加载时 挂起的对象会着色 然后我们继续轮询以再次检查和更改状态 以使 Forge 以不同的颜色渲染它们并
  • 编辑QTableView单元格后如何更改背景颜色?

    我有这个带有自定义模型和委托的 QTableView 编辑后如何更改单元格的背景颜色 我应该在代表处这样做吗setModelData index model setData index QVariant True Qt UserRole 然
  • 将 ActionBar 主页按钮设置在右侧

    我可以将 ActionBar 中的主页按钮设置在右侧吗 android R id home 我想更改主页按钮的位置 因为该语言使用从右到左的打字方式 是否可以 如果是 请告诉我该怎么做 如果没有 如何将 ActionBarDrawerTog
  • Python 会在赋值时创建对象的副本吗?

    当我尝试这段代码时 dict a dict b dict c dict c hello goodbye print dict a print dict b print dict c 我预计它只会初始化dict a dict b and di
  • 媒体播放器、打瞌睡模式、唤醒锁和前台服务

    我读过几篇关于 Android M 中新的 打瞌睡 模式的文章 还有 Android 开发者网站上的文章 https developer android com training monitoring device state doze s
  • PHP正则表达式用于强密码验证[重复]

    这个问题在这里已经有答案了 我在网上看到过以下正则表达式 8 d W n A Z a z 仅当字符串满足以下条件时才验证 contain at least 1 upper case letter contain at least 1 low
  • Github级联合并的做法是怎样的?

    github上是否有任何选项或实践可以提供像bitbucket这样的自动PR级联 https confluence atlassian com bitbucketserver automatic branch merging 7766399
  • ES6 Arrow 函数正在改变 Meteor.publish 中的 this 范围 [重复]

    这个问题在这里已经有答案了 所以我开始使用ES6Meteor 但显然如果你尝试使用Meteor publish带有箭头函数的语法 this userId是未定义的 而如果你将它与常规一起使用function this userId工作完美
  • C++ 中对象的静态和动态内存分配

    在C 程序中 对于一个类 如何获取任意时刻静态创建和动态创建的活动对象的数量 可悲的是你不能 斯科特 迈耶 Scott Meyer 的一本书中有整整一个章节 他继续讲述试图实现这一目标的挑战 但缺点是这是不可能的 更有效的 C 第 27 条
  • 当用户终止应用程序时,我可以进行 api 调用吗?

    当用户终止应用程序 强制关闭 时 我需要进行 API 调用 我所做的直接实施如下 在应用程序委托中 我添加了以下代码 func applicationWillTerminate application UIApplication print
  • 如何在 ASP.Net MVC 中使用 PdfSharp 显示 PDF?

    我们正在制作一个 ASP Net MVC 应用程序 它需要能够生成 PDF 并将其显示到屏幕上或将其保存在用户易于访问的位置 我们使用 PdfSharp 生成文档 完成后 我们如何让用户保存文档或在阅读器中打开它 我特别困惑 因为 PDF