Ich versuche, eine PDF auf dem Server zu erstellen und öffnen Sie dann in einem neuen Tab im Browser, wenn eine Schaltfläche geklickt wird. Die PDF-Datei wird korrekt erstellt, aber ich kann den Browser nicht öffnen, ohne sie herunterzuladen. In IE erkennt es die Datei nicht und in Chrome fordert es den Benutzer zum Herunterladen auf. Jede Hilfe wird geschätzt. Mein Code ist unten:PDF-Server-Seite erstellen und in einem neuen Browserfenster oder Tab öffnen
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();
}
});
Dies ist viel sauberer, aber der Grund, warum ich es so mache, ist, weil das PDF basierend auf Benutzereingaben generiert wird und es zurückgeschickt werden muss, wenn der Benutzer auf eine Schaltfläche klickt, um es zu senden. Ich habe die Argumente für die CreateCustomReport-Methode ausgeschlossen, weil ich sie nicht für relevant hielt. –