0

私は使っている:

  • オフィス 2007
  • VC# Express 2010
  • Windows 7 ラップトップ ホストを介してアクセスされる 1x Citrix 仮想 XP ネットワーク環境
  • 特定のネットワークにマップされたドライブで .prn に出力するように設定された 1x プリンター

C# と Word Interop を使用して、特定のファイル セットを自動的にサイレント モードで印刷しています。アプリケーションは、.doc / .docx ファイルのみについて 10 分ごとに入力フォルダーをスキャンし、それらのパスとファイル名をリストに入力します。見つかったファイルごとに、次のコードを使用して印刷を試みます。

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() の参照出力を参照)、出力ディレクトリはまったく更新または印刷されません。出力を提供すると、0kb の空のファイルですが、.prn が作成されます。

プリンターはデフォルトのプリンターとして設定されており、上記の出力フォルダーに自動的に出力するように構成されています。自動的に印刷しようとしているのと同じファイルを使用して Word を手動で開いて [印刷] をクリックすると、出力ディレクトリに 6kb の .prn ファイルが作成されます。CTRL + P 以外の操作は必要ありません。

「Word.Document doc = wordApp.Documents.Open()」を介してファイルが正常に開かれていると確信しています。これは、doc.FullName を実行し、問題の入力 Word ドキュメントの完全なパスを取得したためです。私の人生では、.prnを出力フォルダーに正しく出力することはできません。

4

1 に答える 1

1

Word (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

Word が行ったことを反映するように PrintOut を変更し、問題が解決するかどうかを確認します。

「かなり自信がある」という理由はありません。削除するだけです

wordApp.Visible = false

プログラムをデバッグして、問題がないことを確認します。

于 2013-10-01T13:21:52.190 に答える