none
Windows10、IE11の環境にて、ASP.NET(C#)のコードよりPDF出力 RRS feed

  • 質問

  • Windows10、IE11の環境にて、ASP.NET(C#)よりPDFファイルを「Adobe Acrobat Reader DC」で起動したいのですが、
    以下のコードを処理してもPDF出力がされず、タスクマネージャーのバッググラウンドプロセスに「Adobe Acrobat Reader DC」が2プロセス発生します。
    何が原因でしょうか?

    ===ソースコード====
        Response.Clear();
        Response.ContentType = "application/pdf";
        Response.WriteFile("c:\\temp\\test.pdf");
        Response.End();
    ===ソースコード====

    ※ちなみに、MicrosoftEdgeでは、Edge画面にPDF出力しています。
    また、Windows7、IE11の環境では、「Adobe Acrobat Reader DC」でPDF出力されます。

    また、Windows10、IE11の環境にて、ASP.NET(C#)の以下のコードを処理した場合、EXCEL出力されます。

    ===ソースコード====
        Response.Clear();
        Response.ContentType = "application/vnd.ms-excel";
        Response.WriteFile("c:\\temp\\test.xlsx");
        Response.End();
    ===ソースコード====

    2017年7月5日 2:00

すべての返信

  • 質問者さんの win10 ie11 の addon に adobe reader がないということはありませんか?

    自分の環境で、以下の記事の私(ハンドル名同じ)の回答の「out.aspx.vb に該当するもの・・・ 」以下の .aspx ページをブラウザから呼び出せは、pdf は問題なく表示されました。

    ASP.NETでのストリーム経由でのPDF出力について
    https://teratail.com/questions/81787

    同様なコードで試してみてください。(content-disposition の設定に注意)


    #その記事の話の流れから .aspx ページを利用していますが、HTTP ハンドラを使うのがお勧めです。理由は以下の記事を見てください。

    ダウンロードは HTTP ハンドラで
    http://surferonwww.info/BlogEngine/post/2013/02/16/use-http-handler-for-downloading-files.aspx


    • 編集済み SurferOnWww 2017年7月5日 2:25 タイポ訂正
    2017年7月5日 2:24
  • 回答ありがとうございます。
    adobe readerは、addonされております。

    base.aspxから以下のコードを処理してみましたが、PDF出力されませんでした。
    また、直接以下のコードを処理してもPDF出力されませんでした。
    ===ソースコード====
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();

        Response.ClearHeaders();
        Response.ClearContent();
        Response.ContentType = "Application/pdf";
        Response.AddHeader("content-disposition", "inline; filename=sample.pdf");
    ===ソースコード====

    2017年7月5日 7:56
  • ここで Q&A を続けたいというご希望があれば他のポスト先はクローズ願います。(その場合は、マナーとして、クローズするポスト先では、ここで Q&A を行うのでクローズする旨書いていただければと思います)
    2017年7月5日 8:16
  • SurferOnWwwさん、

    ほかのポスト先ですが、MSDNフォーラムで同じ質問をしている旨を書いて、クローズいたしました。

    今後ともよろしくお願いいたします。

    2017年7月5日 8:35
  • > base.aspxから以下のコードを処理してみましたが、PDF出力されませんでした。
    > また、直接以下のコードを処理してもPDF出力されませんでした。

    そのあたりの意味が理解できていませんが、Edge, Chrome, Firefox など他のブラウザでは問題なく表示されるなら .aspx ページからダウンロードはできていて、問題はやはり質問者さんの環境の IE11 にありそうですね。

    ググって調べて分かるようなことはすでに実施済みでしょうか? 例えば下記:

    Windows 10でWebブラウザー上でPDFファイルが開けない場合の対処方法
    https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=019029

    (1)最新のAdobe Acrobat Readerをインストールする
    (2)アドオンが有効になっているか確認する
    (3)アドオンを無効にする
    (4)インターネット一時ファイルを削除する
    (5)Internet Explorerの設定をリセットする

    他にも「IEリセットで正常になり、確認したところアドオンのTrendツールバーが影響していた」という話もありました。

    もし、ググって調べる等のことはまだしていないということでしたら、windows 10 ie11 pdf などをキーワードにググるといろいろヒットしますのでご自分でもやってみてください。

    あと、質問者さんの環境固有の問題か否かを切り分けるため、可能であれば他の PC の IE10 でも確認してください。


    • 編集済み SurferOnWww 2017年7月5日 10:53 一部追記
    2017年7月5日 10:51
  • >ググって調べて分かるようなことはすでに実施済みでしょうか? 

    できる限りを尽くして、実施済です。
    念のため、IEリセットして、設定し直してから実行しましたが、同じ結果となりました。

    >あと、質問者さんの環境固有の問題か否かを切り分けるため、可能であれば他の PC の IE10 でも確認してください。

    Windows10、IE11が標準らしく、他に変更不可能なようです。
    Windows7、IE11ではPDF出力はできることを確認しております。

    2017年7月6日 0:25
  • > Windows10、IE11が標準らしく、他に変更不可能なようです。

    「らしく」という言葉から想像すると、質問者さんの手元にない客の PC で問題が起こっているということのように思えるのですが、そうなんでしょうか? そうだとすると、質問者さんの PC では再現できないということなのですか?

    とにかく、特定の環境、PC 固有の問題か否かを切り分けられませんか?

    少なくとも私のが持っている Win10 IE11 では pdf が表示できないという問題は起こってないです。なので、特定の環境、PC 固有の問題ではないかと思っているのですが。


    > Windows7、IE11ではPDF出力はできることを確認しております。

    私の一番最初のレスで紹介した Teratail の話と同じ状況のようですね・・・

    そのスレッドはクローズされてますが、残念ながら Terateil の質問者さんがどのように解決したか不明です。分かったら連絡します。

    2017年7月6日 2:41
  • >「らしく」という言葉から想像すると、質問者さんの手元にない客の PC で問題が起こっているということのように思えるのですが、そうなんでしょうか? そうだとすると、質問者さんの PC では再現できないということなのですか?

    ネット情報からWindows10はIE11以外には変更不可能とのことですが。
    また、自身のPCで再現しております。


    >とにかく、特定の環境、PC 固有の問題か否かを切り分けられませんか?

    Teratailのudonさんと同じ状況のようです。
    SurferOnWwwさんの環境との違いがわかればいいのですが・・・

    何か思いついたら、連絡をお願いいたします。
    今後ともよろしくお願いいたします。

    2017年7月6日 4:06
  • help-hg さんの環境でも再現するのであれば、コードを実行して PDF のダウンロードを行わせる際の History や HTTP ヘッダー情報を F12 開発者ツールや Fiddler で採取して、表示できる環境とそうでない環境で差異が出るのか確認するのは有効なトラブルシュートでしょう。

    またコードからの出力ではなく静的な PDF のダウンロードでの挙動とその際の History や HTTP ヘッダー情報も確認し、問題が起きるばあいと比較するのも有効でしょう。


    hebikuzure

    2017年7月6日 6:25
    モデレータ
  • 先に私がお願いした、

    > とにかく、特定の環境、PC 固有の問題か否かを切り分けられませんか?

    はできないのでしょうか?

    社内の LAN 内につながっている Win10 IE10 の PC が複数あって、物理的に異なる複数の PC からアクセスして試すというようなことはできないのですか?

    2017年7月6日 7:20
  • hebikuzureさんのおっしゃっている事はわかりました。
    ありがとうございます。


    >社内の LAN 内につながっている Win10 IE10 の PC が複数あって、物理的に異なる複数の PC からアクセスして試すというようなことはできないのですか?
    PCに余裕がなく、Windows10、IE10のPCが無いので、確認できません。

    2017年7月6日 23:37
  • > PCに余裕がなく、Windows10、IE10のPCが無いので、確認できません。

    そうすると、切り分けはなかなか難しそうですね。

    Win7 IE11 は問題ないというとこは、Win7 IE11 の PC はあるのですよね。

    であれば、Win10 IE11 と Win7 IE11 とでの要求・応答の違いを Fiddler などのキャプチャツールで比較してみてはいかがでしょう? 期待した要求が出ているか、応答が返ってきているか、応答の内容はどうなっているかがわかると、何かヒントが得られるかもしれません。

    F12 開発者ツールでもキャプチャはできますが、自分的には Fiddler がその目的には使いやすいのでお勧めです。

    Fiddler のお勧め
    http://surferonwww.info/BlogEngine/post/2011/05/25/Recommendation-of-Fiddler.aspx

    どのような要求・応答を見ることができるかの例は、私の最初のレスで紹介した Teratail のスレッドの私の回答欄の「2017/6/29 16:34 追記」にありますので見てください。

    たぶん、コンテンツを含めて全く同じ応答になるのではないかと想像していますが、そうだとすると質問者さんの Win10 IE11 固有の問題というところに戻ってしまうのですが・・・

    2017年7月7日 1:14
  • Win10 IE11 と Win7 IE11 の要求・応答の違いを確認しました。

    User-Agentに違いがありましたが、それ以外で比較できるところは同じでした。
    Win10:Mozilla/5.0
    Win7:Mozilla/4.0
    ちなみに、User-Agentを変更して試しましたが、PDF出力されませんでした。
    逆にWin7の環境でUser-AgentをMozilla/5.0にして試しましたが、PDF出力されました。

    2017年7月7日 9:51
  • 応答のコンテンツ(pdf ファイルの内容のバイト列)も比較されたでしょうか? 多分同じだったのではないかとは想像していますが。

    応答はコンテンツも含めて同じ、でも、Win10 IE11 はダメで、Win7 IE11 は問題なしということですと、やはり質問者さんの Win10 IE11 固有の問題というところに戻ってしまって、第三者には(少なくとも自分には)他人の固有の問題は分からないということで、どうにも原因が分かりません・・・

    2017年7月7日 10:02
  • >応答のコンテンツ(pdf ファイルの内容のバイト列)も比較されたでしょうか?

    とは、Content-Lengthの事でしょうか?

    Content-Lengthならば、違います。

    2017年7月7日 10:13
  • 上のレスにも書いたように pdf ファイルの内容のバイト列のことを言ってます。話が通じているでしょうか?

    ただ、Content-Length が異なるということは、バイト列も異なっていて、チェックするまでもないかもしれませんが・・・

    2017年7月7日 10:24
  • Content-Lengthとpdf ファイルの内容のバイト列は違うよということですね。

    それで、応答コンテンツのバイト列が異なるということは?
    異なるのならば、PDFは出力されなくても仕方がないということになるのでしょうか?
    何が原因で異なることがあるのでしょうか?

    2017年7月7日 23:13
  • > Content-Lengthとpdf ファイルの内容のバイト列は違うよということですね。

    Content-Length はコンテンツのバイト数です。コンテンツが pdf ファイルなら、pdf ファイルのバイト数です。

    同じ pdf ファイルをダウンロードしたなら Content-Length は同じになるはずです。Content-Length が違う(すなわちファイルのバイト数が違う)ということはファイルの中身が何か違うということです。

    やはり話が通じてないようです。ここのような掲示板でやり取りをして話が通じる程度には基本的なことを勉強して知識を付けていただくようお願いします。(話はそれからだという感じがしています)


    • 編集済み SurferOnWww 2017年7月8日 10:55 誤字訂正
    2017年7月8日 10:46
  • ダウンロードするファイルのサイズ(バイト数)と Content-Length の関係およびコンテンツとは何かを書いておきます。

    エクスプローラーで当該 pdf ファイルのプロパティを表示。サイズが 73,552 バイトであることに注目。

    その pdf ファイルを以下のコードでダウンロード。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _0008_out : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Cache.SetNoStore();
    
            Response.ClearHeaders();
            Response.ClearContent();
            Response.ContentType = "Application/pdf";
            Response.AddHeader("content-disposition", "inline; filename=sample.pdf");
            string path = Server.MapPath("~/app_data/sample.pdf");
            Response.TransmitFile(path);
            Response.End();
        }
    }


    Fiddler を使って要求・応答をキャプチャ。応答ヘッダの Contett-Length(赤枠で示した部分)の値 73552 がファイルサイズと一致することに注目。コンテンツ(pdf ファイルの本体)は青枠の部分。

    Fiddler の表示を HexView に切り替えるとバイト列の内容が表示される。コンテンツは黒文字の部分。


    2017年7月10日 3:30