gpt4 book ai didi

c# - 创建 PDF 服务器端并在新的浏览器窗口或选项卡中打开

转载 作者:行者123 更新时间:2023-12-01 02:52:56 25 4
gpt4 key购买 nike

我正在尝试在服务器上创建 PDF,然后单击按钮时在浏览器的新选项卡中打开它。 PDF 生成得很好,但我无法让浏览器在不下载的情况下打开它。在 IE 中,它无法识别该文件,而在 Chrome 中,它会提示用户下载。任何帮助表示赞赏。我的代码如下:

C# Controller

public string CreateCustomReport()
{
var doc = new Document();
MemoryStream m = new MemoryStream();

try
{
string query = "";
PdfWriter.GetInstance(doc, m).CloseStream = false;

SqlConnection conn = new SqlConnection(conn);
conn.Open();

SqlCommand cmd = new SqlCommand(query, conn);
cmd.CommandType = CommandType.Text;
SqlDataReader sqdr = cmd.ExecuteReader();

doc.Open();
PdfPTable table = new PdfPTable(4);
PdfPCell cell = new PdfPCell(new Phrase(customTitle));
cell.Colspan = 4;
table.AddCell(cell);
table.AddCell(groupBy);
table.AddCell(col1);
table.AddCell(col2);
table.AddCell("Event");
while (sqdr.Read())
{
table.AddCell(Convert.ToString(sqdr["GroupBy"].ToString()));
table.AddCell(Convert.ToString(sqdr["Col1"].ToString()));
table.AddCell(Convert.ToString(sqdr["Col2"].ToString()));
table.AddCell(Convert.ToString(sqdr["Events"].ToString()));
}

doc.Add(table);
doc.Close();
}
catch (Exception)
{

}
return System.Convert.ToBase64String(m.ToArray());
}

jQuery

  $.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(params),
url: '@Url.Action("CreateCustomReport")',
error: function(error) {
debugger;
alert("Search failed.");
},

success: function(data) {
var openpdf = $('<a id="openpdf" download="Report.pdf" href="data:application/pdf;base64,' + data + '" target="new">');
$('body').append(openpdf);
document.getElementById("openpdf").click();
$("#openpdf").remove();


}
});

最佳答案

您将返回生成的 PDF 的 Base-64 编码表示形式,然后使用该字符串创建链接并设置 href 内联。然后您触发链接的点击。看起来很复杂。

我会采取不同的方法......

让服务器返回 PDF 字节(我假设 PdfWriter 有办法访问 byte[]):

public ActionResult CreateCustomReport()
{
byte[] contents = doc.GetBytes(); //?????
return File(contents, "application/pdf", "test.pdf");
}

然后,不要使用 AJAX 调用,而是将用户重定向到以下网址:

<a href="@Url.Action("CreateCustomReport")" target="_blank">Download PDF</a>

此方法不依赖于 JavaScript,并且可以在 IE 或 Chrome 上运行,而不会提示用户下载/保存文件。 PDF 将显示在新的浏览器窗口/选项卡中。

关于c# - 创建 PDF 服务器端并在新的浏览器窗口或选项卡中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com