18

我正在使用 iTextSharp 在单击按钮时将面板打印到 PDF 中。单击按钮后,PDF 正在下载到客户的计算机上。而不是这个,我需要在浏览器中打开 PDF 而不是下载。用户可以从浏览器将 PDF 下载到他的 PC 上。

我正在使用以下代码:

Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnl_print.RenderControl(hw);

StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();

sr.Close();
hw.Close();
sw.Close();
4

3 回答 3

27

content-disposition改为inline代替attachment

您的代码段的第二行将是

Response.AddHeader("content-disposition", "inline;filename=" + filename + ".pdf");

请参阅Content-Disposition:“内联”和“附件”有什么区别?了解更多详情。

于 2012-08-23T07:12:04.457 回答
3

试试这个代码:

行动:

Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");

要在新选项卡/窗口中打开:

@Html.ActionLink("view pdf", "getpdf", "somecontroller", null, 
                  new { target = "_blank" })

或者

<a href="GeneratePdf.ashx?somekey=10" target="_blank">
于 2012-08-23T08:01:25.077 回答
1

您应该查看“Content-Disposition”标题;例如,将“Content-Disposition”设置为“attachment; filename=FileName.pdf”将提示用户(通常)使用“另存为:FileName.pdf”对话框,而不是打开它。但是,这需要来自正在下载的请求,因此您不能在重定向期间执行此操作。但是,ASP.NET 为此提供了 Response.TransmitFile。例如(假设您没有使用 MVC,它有其他首选选项):

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf");
Response.TransmitFile(Server.MapPath("~/folder/Sample.pdf"));
Response.End(); 

如果您尝试打开然后 apicontroller 中的文件将流转换为字节数组,然后填充内容

HttpResponseMessage result = null;
result = Request.CreateResponse(HttpStatusCode.OK);
FileStream stream = File.OpenRead(path);
byte[] fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();           
result.Content = new ByteArrayContent(fileBytes);
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "FileName.pdf";            

我想它会帮助你...

于 2015-12-17T12:44:30.857 回答