2009-08-18 14 views
3

MS Wordビューアーを参照してプログラムをプログラムで開き、印刷することは可能ですか? C#理想的にはMS WordビューアーC#.NETオートメーション

それを開くことが可能かどうかを推測しています。

Visual StudioでCOMオブジェクトへの参照を追加しようとしました。MS Office 11/12オブジェクトライブラリがMS Wordライブラリにリストされていませんか?何か案は?

私が持っていないオフィス200Xは、Wordの相互運用機能アセンブリを使用することにより

歓声

+0

"Mの$" - 私はそれを取る.NET開発がhttp://www.penny-arcade.com/comic/2002/ –

+2

:-)あなたの一日の仕事ではありません7/22/ – Domenic

+0

Officeをインストールしていない場合は、なぜOffice Automationがインストールされると思われますか? –

答えて

5

我々はそれをしなかったがインストールされています。これには、Wordをインストールする必要があります(WINWORDプロセスを起動します)。interopを使用すると、コード内で相互作用することができます。

私が知る限り、これがこれを行う唯一の方法です。

1

実際にWordをインストールせずにWord文書を表示できる無料のMicrosoft Word Viewerを指していますか?もしそうなら、あなたが必要とするであろうWord COMオートメーションライブラリをインストールしないので、ビューアを自動化する方法はないと私は信じています。

+0

時々プログラムは別の方法をサポートします。DDEまたはコマンドラインパラメータを使用して、何かを印刷するように指示します。レジストリには、たとえば「HKEY_CLASSES_ROOT \ AcroExch.acrobatsecuritysettings.1 \ shell \ Print \ command'」C:\ Program Files \ Adob​​e \ Reader 9.0 \ Reader \ AcroRd32.exe "/ p/h"%1 "という値があります。 ../pパラメータがおそらくそれを印刷するように指示しています。 – ChrisW

3

Aspose.Wordsを試してみて、Wordがインストールされたに依存せずにオフィスオートメーションのためにできるように設計されています。ドキュメントを開いて、印刷、pdfへのエクスポートなどのさまざまなアクションを実行する素晴らしいAPIを提供します。

1

これは誰もが持っているのSharePointを使用するサーバー Word Automation Services

上で実行されます場合は、常に悪い考えである相互運用機能アセンブリを使用した単語の自動化サービス

を使用する方法です。あなたはまた、WebRequestMethodを介してWebページにファイルを配信し、かわいいPDFライターまたは他のドライバにページを印刷します。 MIMEタイプのファイルのバイトを送信するだけです。 asp.netのWebページのページ・ロードで印刷します。

2

次のコードは、渡されたファイルでWordビューを開きます。

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("WORDVIEW.exe", fileName.ToString()); 
System.Diagnostics.Process.Start(info); 

(あなたができる場合、私は知らない)コマンドライン印刷を渡すだけでなく、引数の周り混乱してみてください。

はい、すべての方法を使い果たした後、私はMicrosoft ViewerとのInteropには非常にイライラしています。多分このような

2

class Program 
{ 
    static void Main(string[] args) 
    { 
     PrintDocument(@"C:\test.docx", 2); 
     Console.ReadKey(); 
    } 

    [DllImport("USER32.DLL")] 
    public static extern bool SetForegroundWindow(IntPtr hWnd); 

    private static void PrintDocument(string name, int copies) 
    { 
     var process = System.Diagnostics.Process.Start(new ProcessStartInfo 
     { 
      FileName = name, 
      UseShellExecute = true 
     }); 

     process.WaitForInputIdle(); 
     SetForegroundWindow(process.MainWindowHandle); 

     SendKeys.SendWait("^p"); // send CTRL+P 
     SendKeys.SendWait(copies.ToString()); // send number of copies 
     SendKeys.SendWait("~"); // send ENTER 

     // -- or send all in one 
     //SendKeys.SendWait(string.Format("^p{0}~", copies)); 
    } 
} 
関連する問題