如何为 .net core MVC Web 应用程序创建和显示 PDF 文件?

2024-02-08

我有一个能够创建和显示 PDF 文件的 asp 应用程序。我需要为 .net core 应用程序复制相同的功能。我对 .net core MVC 不太有经验,所以我不知道如何实现这一点。

DisplayPDF.aspx.cs

public partial class DisplayPDF : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // get application id from query string
        string strFile = Request.QueryString["File"];

        if (!string.IsNullOrEmpty(strFile))
        {
            string fileToOpen = string.Empty;

            // get file path to requested application id's pdf file
            string filePath = System.IO.Path.GetDirectoryName(Request.PhysicalApplicationPath) +
                "\\Sessions\\" + Session.SessionID + "\\" + strFile;

            fileToOpen = "sessions/" + Session.SessionID + "/" + strFile;
            if (!System.IO.File.Exists(filePath))
            {
                LabelError.Visible = true;
                LabelError.Text = "The pdf was not generated.  Try the action again.  If the problem persists contact website support.";
            }

            Response.Redirect(fileToOpen);
        }
        else
        {
            // need to have query string parameter
            throw new ApplicationException("Query string parameter is missing");
        }

    }
}

显示PDF.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DisplayPDF.aspx.cs" Inherits="Test.WS.App.DisplayPDF" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Display PDF</title>
    <meta name="robots" content="noindex,nofollow" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="LabelError" runat="server" Visible="false"></asp:Label>
    </div>
    </form>
</body>
</html>

重定向到 DisplayPDF 页面

if(System.IO.File.Exists(filePath)){
    ScriptManager.RegisterClientScriptBlock(
        Page,
        Page.GetType(),
        "ShowPDF",
        "window.open('DisplayPDF.aspx?file=" + System.IO.GetFileName(filePath) + "?dt=" + DateTime.Now.Ticks.ToString() + "');",
        true);
}
else
{
    MessageBox.Show("Report was not generated.");
}

基于此webform代码,您可以在core mvc中显示pdf,如下所示:

请注意,我的 pdf 文件位于核心的“wwwroot”文件夹下 项目。

DisplayPDFController.cs:

 public class DisplayPDFController : Controller
{
    private IWebHostEnvironment _hostingEnvironment;

    public DisplayPDFController(IWebHostEnvironment environment)
    {
        _hostingEnvironment = environment;
    }
    public IActionResult Index()
    {

        return View();
    }
    [HttpPost]
    public string Index(string fileName)
    {
        string filePath = Path.Combine(_hostingEnvironment.WebRootPath, @"Files\" + fileName);
        if (System.IO.File.Exists(filePath))
        {
            return filePath;
        }
        else
        {
            return "Report was not generated.";
        }
    }
    public FileResult ShowPDF(string path)
    {
        var fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
        return File(fileStream, "application/pdf");
    }
}

Index.cshtml视图:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script>
        $(function () {
            $("#show").click(function () {
                event.preventDefault();
                $.ajax({
                    type: 'POST',
                    data: { fileName: $("#Text1").val() },
                    url: "/DisplayPDF/Index",
                    success: function (response) {
                        if (response == 'Report was not generated.') {
                            alert(response);
                        } else {
                            window.open("/DisplayPDF/ShowPDF?path=" + response, "_blank");
                        }
                    },
                });
            })
        })
    </script>
</head>
<body>
    <form>
        <input id="Text1" type="text" placeholder="FileName" />
        <input id="show" type="submit" value="show pdf" />
    </form>

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

如何为 .net core MVC Web 应用程序创建和显示 PDF 文件? 的相关文章

随机推荐

  • Android:重叠两个视图(故意的!)

    只是想知道是否可以重叠两个元素 这是我试图实现的目标的说明 基本上它是一个圆形的 ImageButton 其中心位于矩形的角上 我应该如何定位它 我可以使用RelativeLayout或其他东西吗 您可以对蓝色框使用相对布局 将 Image
  • Decimal.TryParse 不解析我的十进制值

    当我尝试转换类似 0 1 的值 来自文本框中的用户 时 我的值 b 始终为 false bool b Decimal TryParse 0 1 out value 怎么会来这里工作呢 指定解析的区域性 您当前的文化可能使用某种不同的数字格式
  • Scala 中闭包的内存管理是如何工作的?

    Scala 允许像这样的闭包 def newCounter var a 0 gt a 1 a 它定义了一个函数 每次调用时都会返回一个新的独立计数器函数 从1 scala gt val counter1 newCounter counter
  • 如何实现低通滤波器?

    我正在对陀螺仪和加速度计数据进行一些数学运算 我想对结果数据进行低通滤波 那么有人可以发布一些低通滤波器的通用代码吗 一阶 IIR 低通滤波器可以采用以下形式 output value rate input value 1 0 rate p
  • 在 iPad/iOS6.0 上使用“应用程序锁定”配置文件设置(又名“信息亭模式”)时出错

    背景 作为 iOS6 的一部分 Apple 为其 iPad 提供了一种 信息亭模式 该模式将设备锁定到一个应用程序中 甚至也可以直接启动到该应用程序中 非常适合在零售店 餐厅 等场所使用 iPad 为了使用此功能 首先必须使用 Apple
  • NoSQL:从表 DynamoDB/Azure 表存储获取最新值

    我有一个小问题需要一些建议 假设我们有几百个数据表 每个数据表有几千万行 数据表是时间戳 键 值 数据表每秒写入一次 每个表的最新条目应该可以快速获取 并且很可能被查询最多 有点像 实时跟踪数据 由于缺少 Last 或类似的内容 我正在考虑
  • 如何在左侧对 UITableViewCell 进行重新排序控制?

    我正在做一个新闻阅读器应用程序 我想让用户可以选择显示 隐藏新闻类别 例如热门新闻 商业 技术 体育等 并像 Android 中的 BBC 新闻应用程序一样重新排序 见下图 我的问题是 如何在单元格左侧进行重新排序控制 编辑模式下默认位置在
  • 将 d3.js 气泡转换为基于强制/重力的布局

    我有一组数据 正在使用 d3 js 进行可视化 我以气泡的形式表示数据点 其中气泡的配置如下 var dot svg selectAll g data data enter append g dot append circle attr c
  • 如何使用 Instagram API 获取图像

    如何获取用户图片Instagram API https api instagram com v1 users self access token 4049241557 1677ed0 5324ad17d9314645b528ad112da8
  • 为什么 .forEach 返回未定义?

    我知道这个主题已经有多个问题https stackoverflow com search q 5Bjavascript 5D return forEach undefined https stackoverflow com search q
  • 是否可以配置 Dozer,以便默认情况下可以通过 setter-/getter 方法直接访问字段

    我必须映射 Java 类的复杂结构 这些类通常不会通过 set get methods 公开其字段 这是给定的并且无法更改 因此映射只能在直接字段访问上执行 Dozer 允许访问各个字段 但我还没有找到一个设置来使其成为一般行为 因此 我不
  • WinHttpSendRequest 返回 ERROR_INVALID_PARAMETER

    我正在尝试获取必发API http docs developer betfair com docs display 使用 Windows API 我在尝试使用以下代码登录时遇到困难 用户名和密码已更改 char headers X Appl
  • 查找具有特定 git note 的提交

    我在我的存储库中使用 git Notes 有时我需要找到包含给定字符串的注释的提交 到目前为止我正在使用这个命令 git log show notes grep PATTERN format format H 这里的问题是 这会打印带有 P
  • ImageView 的 Cardview 阴影

    1 个屏幕截图 ImageView 可见性可见 2 个屏幕截图 消失 使用时ImageView with CardView我们可以说阴影根本不可见 尤其是在智能手机显示屏上
  • 如何使用 Semantic 的 React Table 组件从表行单击获取数据

    我试图从使用 Semantic UI 和 React 渲染的表中获取点击值 我使用不可变列表生成行 并且我想要一个 onclick 来访问唯一的 id 值 当我记录在回调中提取值的尝试时 我得到 bff3a3e9 489e 0e19 c27
  • 错误:MySQL 意外关闭 XAMPP [已关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 mysql Error MySQL shutdown unexpectedly mysql This may be due to a blo
  • 如何解决 TypeError: cv.Mat 不是构造函数 opencv.js?

    当我想从相机中检测 aruco 标记时 我在使用 opencv js 时遇到问题 每次我尝试使用该方法时 let image new cv imread img 我收到以下错误 TypeError cv Mat is not a const
  • Android 中已弃用的 AbsoluteLayout 有什么替代方案?

    我有一个 Xamarin 项目 我为 IOS Android 和 UWP 进行开发 在我的应用程序中 我有 UI 元素的手动布局逻辑 在 IOS 中 我可以使用frame 属性来设置视图的渲染位置 我可以在 UWP 中执行相同的操作 方法是
  • 从 favicon.ico 中删除 Etag

    在项目上使用 yslow 我遇到了一个无法解决的 问题 伊斯洛不断抱怨 有 1 个组件的 ETag 配置错误http www domain com favicon ico http www domain com favicon ico 我的
  • 如何为 .net core MVC Web 应用程序创建和显示 PDF 文件?

    我有一个能够创建和显示 PDF 文件的 asp 应用程序 我需要为 net core 应用程序复制相同的功能 我对 net core MVC 不太有经验 所以我不知道如何实现这一点 DisplayPDF aspx cs public par