2009-05-13 6 views
8

データベースからデータを取得し、iTextSharpを使用してPDFファイルを作成し、PDFをブラウザにストリームするASP.NET ashxクラスがあります。ブラウザー(少なくともIEとFirefox)は、Acrobat Readerを別のウィンドウとして起動してファイルを開きます。私はそれがブラウザ内でインラインで表示されるようにしたいと思います。別のAcrobat Readerウィンドウの代わりにPDFをインラインで表示する

これはサーバー側から完全に制御できるものですか?私はすでにContent-Typeヘッダーをapplication/pdfに設定していますが、Content-DispositionとContent-Lengthを設定しようとしました。これまでのところ何も働いていません。

もう1つのヘッダーがありますか?ブラウザに表示方法を教えるPDF自体には何かがありますか?他のアイデア?

+1

いいえ、いいえ、いいえ、私のブラウザであり、私はそれらを閲覧したい場所でPDFを表示します。さて、これは内部の企業のウェブサイトのためのものだと確信しています。それでも、私はこれが迷惑であると感じます。 – jmucchiello

答えて

9

それを行う必要があり、コンテンツ・処分およびコンテンツタイプヘッダの設定を見て、あなたも呼び出す必要がありますResponse.ClearHeaders()を使用して、設定されている他のヘッダーをクリアします。

また、Fiddlerを使用してレスポンスの実際のヘッダーとコンテンツを確認し、好きなように動作するサイトのものと比較してみてください。

+2

+1を渡して表示する方法をFiddlerに指示します。 – bmb

1

html OBJECTを使用してページにそれらを生成してみてください。あなたの代わりにASPXを返すことができるというASHXで応答をストリーミングする必要がある場合は

<OBJECT WIDTH=640 HEIGHT=480> 
    <PARAM NAME="SRC" VALUE="<%=filePath%>"> 
    <EMBED SRC=<%=filename.pdf%> WIDTH=1000 HEIGHT=680> 
     <NOEMBED> PDF should have displayed here!</NOEMBED> 
     </EMBED> 
</OBJECT> 

、私はあなたが運の外かもしれないと思います。

そうでなければ、ブラウザで表示するかどうかの設定は、完全にクライアント主導であり、あなたの手からはずされていると思います。

+0

提案していただきありがとうございます。 PDFを保存するオプションが必要です。そのための埋め込みですか? –

+0

@jmgant - PDFが埋め込まれると、Acrobat ActiveXのツールバーに「保存」アイコンが表示されます。 – ichiban

+0

正直言って、私はテストなしで肯定的ではありません。たとえそうでなくても、ページにダウンロードリンクやボタンを簡単に追加することができます。 – Serapth

0

は、私はその後、私はそれは、クライアント側の構成設定である疑いがある、このヘッダは、あなたはそれが機能していないと言うので、あなたが

Content-type: application/pdf 

をやりたいと思います。

インストールされているAdobe Acrobatのバージョンを確認してください。 「インターネット」の設定には「ブラウザにPDFを表示」というチェックボックスがあります。

- ここ
BMB

+0

お返事ありがとうございます。インラインで表示するようにAcrobat Readerを設定しましたが、違いはありません。私はブラウザにインラインで表示される他のPDFページに行ってきましたが、私が提供しているものはありません。だから私は厳密にクライアントの問題だとは思わない。 –

-1

あなたは予算を持っている場合は、私の会社は、その意志AJAX based image viewerが含まれた製品のセットを販売しますAcrobatなしでPDFページを一列に並べて表示できます。最も単純な形式では、それは単なるビューアですが、必要に応じてインタラクティビティを組み込むことができます。

5

あなたがASHX(ウェブハンドラ)を使用している場合は、これを試してください: -

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

+1インラインコンテンツ - 処分はトリックを行うべきである –

+0

私はそれもうまくいくと思ったが、それはしなかった。私もコンテンツの長さを設定しようとしました。 –

+0

IIS6、IE7、ASP.NET3.5で動作しています。うーん...あなたはいくつかのブラウザで最小のケースを試しましたか?もしそうなら、答えに私の完全なソースを追加します。 –

1

をだから、私は私の作品の一つでサンプルを持っているあなたが必要なものである:

<cc1:ShowPdf ID="ShowPdf1" runat="server" BorderStyle="None" BorderWidth="0px" 
     Height="750px" Style="z-index: 103; " 
     Width="750px"/> 

とサーバ側で:

ShowPdf1.FilePath = String.Format("~/Handlers/Pdf.ashx?id={0}#view=FitH&page=1&pagemode=none&navpanes=1", myPublicationId); 

私は私のPDFハンドラからも、ここでいくつかのコードを配置します。

とにかく
Response.ContentType = "application/pdf"; 
    byte[] bytes = YourBinaryContent; 

    using (BinaryWriter writer = new BinaryWriter(context.Response.OutputStream)) 
    { 
     writer.Write(bytes, 0, bytes.Length); 
    } 

私のポストはあなたに明確に見えるしていない場合は、このサンプルHow to Display PDF documents with ASP.NET

+0

ShowPdfはカスタムコントロールですか? FilePathプロパティの設定は何をしますか? –

+0

はい。 FilePathは、どのPDFファイル(データベースに保存されている)を表示するか、必要なパラメータ – DaDa

4

OK、それは愚かな質問でしたが、私はFiddlerのことを聞いたことがないので、私はそれを聞いてうれしく思います(これは私をtspauldの答えを受け入れる理由です)。 PDFは、複数の異なるフロントエンドサイトにファイルを提供するWebサービスによって生成されます。私はコンテンツの処分をサービス内でinlineに設定していましたが、それは問題ではありませんでした。フロントエンドサイトのヘッダー(attachment)を取得しました。私はフロントエンドのサイトでそれを変更し、それを修正しました。

その答えは、Content-Type=application/pdfContent-Disposition=inline; filename=Something.pdfを持っている必要があるということです。

関連する問題