【问题标题】:Word Interop 2007 silent printing issueWord Interop 2007 静默打印问题
【发布时间】:2013-10-07 14:03:30
【问题描述】:

我正在使用:

  • Office 2007
  • VC# Express 2010
  • 1x Citrix 虚拟 XP 网络环境通过 Windows 7 笔记本电脑主机访问
  • 1x 打印机设置为输出到给定网络映射驱动器中的 .prn

我正在使用 C# 和 Word Interop 以静默方式自动打印一组给定的文件。该应用程序每 10 分钟扫描一次输入文件夹中的 .doc / .docx 文件,并将它们的路径和文件名输入到列表中。 Foreach 找到文件,尝试通过以下代码打印:

public static Boolean PrintFoundFiles(List<string> foundFiles)
    {
        successful = false;
        foreach (string file in foundFiles)
        {
            object fileAndPath = file;              //declare my objects here, since methods want an object passed
            object boolTrue = true;                 //
            object boolFalse = false;               //
            object output = FormatOutputName(file); //
            object missing = System.Type.Missing;   //
            object copies = "1";                    //
            object pages = "";                      //
            object items = Word.WdPrintOutItem.wdPrintDocumentContent; //
            object range = Word.WdPrintOutRange.wdPrintAllDocument;    //
            object pageType = Word.WdPrintOutPages.wdPrintAllPages;    //

            Word.Application wordApp = new Word.Application(); //open word application
            wordApp.Visible = false; //invisible
            Word.Document doc = wordApp.Documents.Open(ref fileAndPath, ref missing, ref missing, ref missing, ref missing, ref missing,
                                                       ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
                                                       ref missing, ref missing, ref missing); //opens the word document into application behind the scenes
            doc.Activate(); //activates document, else when I print the system will throw an exception
            wordApp.ActivePrinter = "my printer name"; //Specify printer I will print from
            doc.PrintOut(ref boolTrue, ref boolFalse, ref range, ref output, ref missing, ref missing,
                ref items, ref copies, ref pages, ref pageType, ref boolTrue, ref boolTrue,
                ref missing, ref boolFalse, ref missing, ref missing, ref missing, ref missing);
            doc.Close(SaveChanges: false);
            doc = null;
            ((Word._Application)wordApp).Quit(SaveChanges: false); //kill word process the right way
            wordApp = null; //reset to null
            successful = true;
        }
        return successful;
    }

收到“成功”的真正布尔值后,我会自动将文件备份到备份文件夹中,在输入文件夹中将其删除,并在输出文件夹中查找.prn(它只是坐在这里进行处理稍后)。

如果我不提供输出(请参阅 doc.PrintOut() 上的参考输出),则输出目录根本不会更新或打印到。如果我确实提供了输出,则会创建 .prn,尽管它是一个 0kb 的空文件。

打印机设置为默认打印机,并已配置为自动输出到所述输出文件夹。如果我用我试图自动打印的同一个文件手动打开 Word,点击打印,它将在输出目录中创建一个 6kb .prn 文件,而无需点击 CTRL + P 以外的任何东西,OK。

我相当有信心通过“Word.Document doc = wordApp.Documents.Open()”打开该文件,因为我做了一个 doc.FullName 并获得了输入 word 文档的完整路径。我只是无法让 .prn 正确输出到输出文件夹。

【问题讨论】:

    标签: c# ms-word interop


    【解决方案1】:

    如果我开始我的词 (2010) 并记录我按下 Ctrl+P 并点击打印的宏 - 我得到了

    Application.PrintOut fileName:="", Range:=wdPrintAllDocument, Item:= _
        wdPrintDocumentWithMarkup, Copies:=1, Pages:="", PageType:= _
        wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _
        PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
        PrintZoomPaperHeight:=0
    

    更改您的 PrintOut 以反映 Word 所做的事情,看看它是否能解决您的问题。

    没有理由“相当自信”,只需删除

    wordApp.Visible = false
    

    调试您的程序并确保它正常。

    【讨论】:

    • 你的第二个建议是最有用的。为了调试目的,我使我的程序可见,并看到程序在打印方法之后立即退出。我在 print 方法和 quit 方法之间放了一个Thread.Sleep(5000);,当然效果很好。多么愚蠢的错误。嗯,谢谢。 TIL(再次)假设在编程中不起作用。
    猜你喜欢
    • 2012-07-06
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多