web-dev-qa-db-ja.com

ダウンロードする代わりにブラウザでPDFを開く

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();
17
Krishna Thota

変更 content-dispositionからinlineではなくattachmentへ。

スニペットの2行目は次のようになります

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

詳細は Content-Disposition: "inline"と "attachment"の違いは何ですか? を参照してください。

25
Alexis Pigeon

このコードを試してください:

アクション:

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">
3
Krunal Mevada

「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";            

私はそれがあなたを助けると思います...

0
Skull