0

私の Aspx ページには 2 つのボタンがあります。btnGenerateReceipt はレシートを生成するためのもので、btnAddNew は新しいレコードを追加するためのものです。btnGenerateReceipt の OnClick イベント 以下のようにレシートを生成して開きます。

 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. ダイアログボックスなしでWord文書を自動的に開く必要があります。
  2. btnGenerateReceipt ボタンをクリックした後、2 番目のボタンのクリック機能が起動しません。
  3. Word Doc の代わりに PDF ファイルを生成して開くにはどうすればよいですか?

何か案が?

4

2 に答える 2

4

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

編集
PDF の生成に関する 2 番目の質問については、PDF を生成するためのライブラリが多数あります。ただし、既に Word ファイルの準備ができている場合は、Word ドキュメントを PDF プリンターで印刷し、結果の PDF を送信することが 1 つの解決策になります。

ドキュメントの印刷は、動詞を含むクラスを使用ShellExecuteして実現できます。その後、PDF-Creator や Bullzip などの PDF プリンターを使用して PDF ファイルを生成できます。Processprint

これは、PDFファイルを「手動で」生成する代わりに試したいことです。

于 2012-04-16T09:21:08.770 に答える
1

ダイアログボックスなしでWord文書を自動的に開く必要があります。

@Thorsten Dittmarの回答で行くの回答について。

btnGenerateReceipt ボタンをクリックした後、2 番目のボタンのクリック機能が起動しません。

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

Word Doc の代わりに PDF ファイルを生成して開くにはどうすればよいですか?

PDF参照を生成するには、これを参照してください。ライブラリのようなiTextSharpを使用してpdfを生成し、それらをpdfとしてエクスポート/保存します。

参照: ASP.NET 4: 新しいブラウザーで HttpResponse を開く?

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

Response オブジェクトのコンテンツ タイプを設定し、バイナリ形式の pdf をヘッダーに追加する必要があります。詳細については、この投稿を参照してください: 参照: Asp.net ページから PDF ファイルを開く

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 は新しいブラウザーで開きますか?
情報を取得した後に PDF ファイルを生成する
ASP.NET MVC: ダウンロード プロンプトを表示する代わりに、ブラウザーで PDF を開いて表示するにはどうすればよいですか?

于 2012-04-16T09:42:30.077 に答える