0

我使用 C#、asp.net 作为工具。

我正在使用以下代码在客户端传输和打开文件,并希望在客户端打开文档的同时打开任何应用程序(如 word、pdf 阅读器)的内置打印对话框。

                if (lfileFormat.ToUpper() == "Excel")
                {
                    Response.ContentType = "application/vnd.ms-excel";
                }
                else if (lfileFormat.ToUpper() == "PDF")
                {
                    Response.ContentType = "application/pdf";
                }
                else if (lfileFormat.ToUpper() == "HTML")
                {
                    Response.ContentType = "text/HTML";
                }


                Response.AddHeader("Content-Disposition", string.Format("attachment; filename = {0}", fi.Name));
                Response.AddHeader("Content-Length", fi.Length.ToString());
                Response.TransmitFile(fi.FullName);
                Response.End();
4

4 回答 4

1

你可以用一些组件来做到这一点,比如Aspose

示例:这里

于 2012-12-11T13:38:14.527 回答
0

您可以执行以下操作

String FileName = filename;
String FilePath = filepath;
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath + FileName);
response.Flush();
response.End();

例如,如果您想下载 .pdf 文件,下载后您可以通过后面的代码打开然后文件 .. 但您必须为此编写单独的代码..

于 2012-12-11T13:44:03.947 回答
0

你不能从 ASP.NET 或任何 web 平台做到这一点,浏览器是沙盒的,想象一下如果你在用户 PC 上大声执行命令会造成混乱!

您必须创建最终用户必须安装的自己的客户端应用程序。

于 2012-12-11T13:44:19.937 回答
0

没有直接的方法可以做到这一点。您正在生成文件服务器端,并将其发送到客户端。您无法控制客户端计算机上发生的事情(正如 HollyStyles 提到的,想象一下混乱)。

最好的办法是在 Excel/Word 文件中包含一个宏,以便在打开文件时显示打印对话框。避免弄乱 VBE(Visual Basic 可扩展性,它允许动态操作 Office 文档的代码模块)的最简单方法是创建一个包含该功能的模板,并使用该模板生成您的文档。

例如,在 Excel 工作簿打开事件处理程序中,您可以拥有:

Private Sub Workbook_Open()

    Application.Dialogs(xlDialogPrint).Show

End Sub

但这还有其他含义(确保您的文档已签名,或者用户允许执行宏,...)。更不用说每次用户打开文件时都会显示“打印”对话框,这可能......令人恼火。

此外,这不会解决非办公文件的问题。您可以在 JS 中使用 Window.Print来处理这些情况。

但总而言之,这将是一团糟:)

于 2012-12-11T13:50:18.580 回答