【问题标题】:Print Word document from Asp.net c# Without MS Office Installed在没有安装 MS Office 的情况下从 Asp.net c# 打印 Word 文档
【发布时间】:2015-09-24 07:51:38
【问题描述】:

我需要在不安装 MS Office 的情况下打印 Word 文档。 我正在使用 WordprocessingDocument 来操作 Word 文件。

现在我需要打印它。

我试过了:

System.Diagnostics.Process printProcess = new System.Diagnostics.Process();
printProcess.StartInfo.FileName = "D:/testWordPad1.docx";
printProcess.StartInfo.Verb = "Print";
printProcess.StartInfo.CreateNoWindow = true;
printProcess.Start();
printProcess.WaitForExit();

它在我安装了 MS Office 的本地系统中工作。 但它在我没有安装 MS Office 的服务器上不起作用。

它告诉我:

没有应用程序与此操作的指定文件关联 - 在 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)

请给我你的建议。

【问题讨论】:

  • 根据您的示例,您传递一个文本文件作为进程名称[在您的服务器上,它可能称为“记事本”应用程序]。你确定要打印word文档吗?
  • .txt 扩展名与 Microsoft Word 无关。例如,记事本应该可以打印出来。
  • 抱歉,这是我的打印错误。实际上我在这里的代码中使用 .docx 文件。
  • 您必须使用 Aspose 或类似产品才能可靠在网络服务器上处理办公文档。
  • 您是否尝试从网站向客户打印机发送文档?这些标签表明您正在通过网站执行打印作业。

标签: c# asp.net ms-word


【解决方案1】:

为了打印文本文件 [这似乎是您尝试做的],您可以使用记事本的命令行参数 [阅读更多 here]

以下会将文档发送到默认打印机:

System.Diagnostics.Process printProcess = new System.Diagnostics.Process();
                printProcess.StartInfo.FileName = "notepad.exe";
                printProcess.StartInfo.Parameters = "/P D:\\testWordPad1.txt";
                printProcess.StartInfo.CreateNoWindow = true;
                printProcess.Start();
                printProcess.WaitForExit();

如果要定义文件将发送到的打印机,请使用以下参数:

/PT [文件名] [打印机名] [驱动程序dll] [端口]

【讨论】:

  • 感谢 Nissim,它适用于 .txt 文件。但这是我的印刷错误。实际上它在我的代码中的 .docx 文件。
  • 嗯,docx文件基本上都是open-xml格式的。您可以将文件的扩展名更改为“.zip”以从文件中提取图形和文本信息。你。请参考我的回答:stackoverflow.com/a/30860116/120391
【解决方案2】:

错误意味着动词不可用。 首先你可以像这样检查可用的动词:

    foreach (String verb in printProcess.StartInfo.Verbs)
    {
        System.Diagnostics.Debug.WriteLine(verb);
    }

您确定您的服务器上有可用的打印设备吗? 如果您在服务器上右键单击该文件,它会在上下文菜单中显示“打印”吗?

【讨论】:

  • 感谢 Bgl86,我在此循环中将“打印”作为动词。我的服务器有记事本,但没有 MS Office。我不确定这个问题是由于没有安装 MS Office 造成的。
  • 当在 printProcess.Start() 达到控制时我收到此错误
【解决方案3】:

要在未安装 MS Office 的 Web 服务器上打印 .docx 文件,第三方库可能是最佳选择。我尝试了a free component(nuget 包),对小型项目有 100 个段落和 5 个表的限制,它可以工作。

using System;
using System.Collections.Generic;
using System.Text;
using Spire.Doc;
using System.Windows.Forms;
using System.Drawing.Printing;


namespace Doc_Print
{
    class Program
    {
        static void Main(string[] args)
        {

            Document doc = new Document(); 
            doc.LoadFromFile("sample.doc");
            PrintDialog dialog = new PrintDialog();
            dialog.AllowPrintToFile = true; 
            dialog.AllowCurrentPage = true;
            dialog.AllowSomePages = true;
            dialog.UseEXDialog = true; 
            doc.PrintDialog = dialog;               
            PrintDocument printDoc = doc.PrintDocument; 
            printDoc.Print();
            if (dialog.ShowDialog() == DialogResult.OK)
            {               
                printDoc.Print();
            }            

        }
    }
}

【讨论】:

  • 我在 Windows 应用程序上尝试了这个并且它工作正常,@NOW 我需要同样的东西用于 asp.net 网络应用程序,我可以吗???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 2020-09-29
相关资源
最近更新 更多