ITextSharpを使用してパネルをPDF on button clickで印刷します。ボタンをクリックすると、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();
変更 content-disposition
からinline
ではなくattachment
へ。
スニペットの2行目は次のようになります
Response.AddHeader("content-disposition", "inline;filename=" + filename + ".pdf");
詳細は Content-Disposition: "inline"と "attachment"の違いは何ですか? を参照してください。
このコードを試してください:
アクション:
Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
新しいタブ/ウィンドウで開くには:
@Html.ActionLink("view pdf", "getpdf", "somecontroller", null,
new { target = "_blank" })
OR
<a href="GeneratePdf.ashx?somekey=10" target="_blank">
「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のファイルがストリームをbytesarrayに変換してから、コンテンツを入力します
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";
私はそれがあなたを助けると思います...