繁体   English   中英

在C#中打开文件

[英]Open file in C#

在我的Aspx页面中,我有两个按钮,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按钮后,第二个按钮的单击功能不会触发。
  3. 如何生成并打开PDF文件而不是Word文档?

任何想法?

服务器发送的内容由Web浏览器处理。 默认情况下,您无法从服务器端代码控制浏览器是否打开,保存或询问用户,因为这是浏览器设置。

编辑
关于生成PDF的第二个问题:有很多库可以生成PDF。 但是,如果您已经准备好Word文件,一种解决方案是将Word文档打印到PDF打印机,然后发送生成的PDF。

可以使用ShellExecute或带有动词printProcess类来实现文档的print ,然后可以使用PDF打印机(例如PDF-Creator或Bullzip)来生成PDF文件。

这是我要尝试的方法,而不是“手动”生成PDF文件。

我需要Word文档自动打开而不显示对话框。

有关@Thorsten Dittmar答案的答案。

单击btnGenerateReceipt按钮后,第二个按钮的单击功能不会触发。

Asp.net使用无状态连接,因此您认为书面内容将保留在内存中。 我认为按照我的理解,它不起作用。 创建响应内容,然后将其写入响应并刷新。

如何生成并打开PDF文件而不是Word文档?

要生成pdf,请参考this 使用iTextSharp之类的库来生成pdf,然后将其导出/保存为pdf。

参考: ASP.NET 4:在新浏览器中打开HttpResponse吗?

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

您需要设置Response对象的Content Type,并在标头中添加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,而不显示下载提示?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM