【问题标题】:Open file in C#在 C# 中打开文件
【发布时间】:2012-04-16 19:09:49
【问题描述】:

在我的 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 Doc?

有什么想法吗?

【问题讨论】:

  • 1.您正在编写服务器端代码...您想在哪里打开文档?我看不到该任务的任何代码。请改进您的示例。
  • 2. >单击 btnGenerateReceipt 按钮后,我的第二个按钮的单击功能没有触发。
  • 天气打开或保存(有或没有对话框)是用户(浏览器)的偏好,您不能强制打开它。恕我直言。
  • 3.您(想要)使用任何外部库来生成/生成 pdf 吗?
  • 您无法在浏览器中打开 word 文档(除非浏览器本身能够打开),因此您的用户必须下载文件才能查看它。根据浏览器和用户设置,下载完成后可能会直接在 word 中打开文档。您希望向用户显示信息(为什么 word 文档那么重要?)还是希望用户能够下载文档?

标签: c# asp.net


【解决方案1】:

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

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

可以使用ShellExecute 或带有动词printProcess 类来打印文档,然后您可以使用PDF-Creator 或Bullzip 等PDF 打印机生成PDF 文件。

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

【讨论】:

  • 谢谢,你对我的第二个问题有什么想法吗?
  • 在一定程度上您可以控制消息的显示方式。 Content-Disposition 如果设置为内联将显示内联,如果设置为附件将提示另存为对话框 - “en.wikipedia.org/wiki/MIME#Content-Disposition”。但它并非在所有浏览器中都实现一致。
  • 嗨 Ramesh - 谢谢,我的第二个问题是关于在我通过单击我的第一个按钮成功打开文档后,我在同一页面上的第二个按钮没有触发,您能否建议任何解决方案这个问题?
【解决方案2】:

我需要word文档在没有对话框的情况下自动打开。

@Thorsten Dittmar 的答案是答案。

我的第二个按钮的点击功能在我点击 btnGenerateReceipt 按钮后没有触发。

Asp.net 使用无状态连接,所以你认为你写的内容会留在内存中吗?我认为根据我的理解它不应该起作用。创建响应内容,然后将其写入响应并刷新。

如何生成和打开 PDF 文件而不是 word Doc?

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

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

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

需要设置Response对象的Content Type,并在header中添加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?

【讨论】:

  • 谢谢@Niranjan - 我认为用这种方法我无法实现第二个按钮。是这样吗?
  • 是的..您的第一个按钮生成回发,然后您的另一个按钮生成回发。因为我认为它不应该包含另一个按钮回发之间的数据。把它们放在同一个按钮上。
  • 其实我连续有 3 个按钮。还有另一个用于不同的实现,所以不能一键点击。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多