2012-04-16 15 views
0

私のAspxページには、2つのボタンがあり、btnGenerateReceiptはレシートを生成し、btnAddNewは新しいレシーバーを追加します。 btnGenerateReceiptのOnClickイベント以下のように領収書を生成して開きます。C#でファイルを開く

protected void onGenerateReceipt(object sender, EventArgs e) 
    { 
      try 
      { 
        byte[] document = receiptByte; 
        Response.ClearContent(); 
        Response.ClearHeaders(); 
        Response.Buffer = true; 
        Response.ContentType = "application/vnd.ms-word"; 
        Response.AddHeader("content-disposition", "inline;filename=" + "Receipt" + ".doc"); 
        Response.Charset = ""; 
        Response.Cache.SetCacheability(HttpCacheability.NoCache); 
        Response.BinaryWrite(document); 
        //Response.Flush(); 
       } 

      } 
      catch (Exception ex) 
      { 

      } 
      finally 
      { 
       //Response.End(); 
      } 
     } 
    } 

これは、開く/保存/ダイアログボックスをキャンセル開き、以下の

  1. 、私の問題です私はワード文書がダイアログボックスなしで自動的に開く必要があります。
  2. btnGenerateReceiptボタンをクリックすると、私の2番目のボタンのクリック機能が起動しません。
  3. どのように生成できますか& Wordの代わりにPDFファイルを開くDoc?

+1

1.あなたが開きたい行う場所...サーバー側のコードを書いていますドキュメント?私はその仕事のためのコードを見ることができません。サンプルを改善してください。 – Beachwalker

+0

2. btnGenerateReceiptボタンをクリックすると、2番目のボタンのクリック機能が起動しません。 – Beachwalker

+3

開くか、保存するか(ダイアログボックスの有無にかかわらず)は、ユーザー(ブラウザ)の設定であり、強制的に開くことはできません。私見では。 – Oybek

答えて

4

サーバーから送信されるコンテンツは、Webブラウザによって処理されます。これはブラウザ設定であるため、ブラウザが開くか、保存するか、またはデフォルトでユーザーに確認するかどうかは、サーバー側のコードから制御できません。

EDIT PDFの生成について2番目の質問については
:多くのライブラリは、PDFを生成するためにそこにあります。ただし、既にWordファイルを準備している場合は、Word文書をPDFプリンタに印刷し、結果のPDFを送信することをお勧めします。動詞printShellExecuteを用いて達成することができる文書またはProcessクラスの印刷

は、その後、あなたはPDFファイルを生成するPDF-作成者またはBullzipなどのPDFプリンタを使用することができます。

これは、私が「手動で」PDFファイルを生成するのではなく、私が試してみたいことです。

+0

ありがとう、私の2番目の質問はありますか? – Roshe

+0

ある程度、メッセージの表示方法を制御できます。インラインに設定されている場合はContent-Dispositionがインラインで表示され、添付ファイルに設定されている場合はダイアログとして保存されますか - "http://ja.wikipedia.org/wiki/MIME#Content-Disposition"しかし、すべてのブラウザで一貫して実装されているわけではありません。 – Ramesh

+0

こんにちはRamesh - ありがとう、私の最初のボタンをクリックして文書を正常に開いた後、私の2番目の質問は同じページの私の2番目のボタンですが、この問題の解決策を提案できますか? – Roshe

1

ダイアログボックスなしで自動的に開くには、文書が必要です。

@Thorsten Dittmarと答えてください。

[btnGenerateReceipt]ボタンをクリックすると、2番目のボタンのクリック機能が起動しません。

Asp.netはステートレス接続を使用しているため、書かれた内容はメモリ内に残ると思いますか?私はそれが私の理解ごとにうまくいかないと思う。応答内容を作成し、それを応答に書き込んでそれをフラッシュします。

どのように生成できますか& Wordの代わりにPDFファイルを開きます。Doc?

pdfリファレンスthisを生成します。 pdfを生成してpdfとしてエクスポート/保存するために、iTextSharpライブラリを使用します。

参考:ASP.NET 4: HttpResponse open in NEW Browser?

Response.AppendHeader("Content-Disposition", "inline; filename=foo.pdf"); 

あなたはResponseオブジェクトのコンテンツタイプを設定し、ヘッダー内のPDFのバイナリ形式を追加する必要があります。詳細については、この記事を参照してください: 参考:Opening a PDF File from Asp.net page

private void ReadPdfFile() 
    { 
     string path = @"C:\Swift3D.pdf"; 
     WebClient client = new WebClient(); 
     Byte[] buffer = client.DownloadData(path); 

     if (buffer != null) 
     { 
      Response.ContentType = "application/pdf"; 
      Response.AddHeader("content-length",buffer.Length.ToString()); 
      Response.BinaryWrite(buffer); 
     } 

    } 

参考リンク:
ASP.NET 4: HttpResponse open in NEW Browser?
Generate pdf file after retrieving the information
ASP.NET MVC: How can I get the browser to open and display a PDF instead of displaying a download prompt?

+0

ありがとう@Niranjan - 私はこのメソッドで私は2番目のボタンを実装することはできませんと思います。そうですか? – Roshe

+0

はい。最初のボタンはポストバックを生成し、もう1つのボタンはポストバックを生成します。私はそれが別のボタンのポストバックの間にデータを含むべきではないと思うので。これらを同じボタンに置​​きます。 –

+0

実際には3つのボタンが連続しています。異なる実装のために別のものがありますので、ボタンをクリックするだけですべてのことができます。ありがとう。 – Roshe

関連する問題