2009-08-18 43 views
3

是否可以自動執行以下操作: 引用MS Word Viewer以編程方式打開文檔,然後將其打印出來? C#最好是MS Word Viewer C#.NET自動化

我猜如果可以打開它,那麼很可能打印它。

我已經嘗試在Visual Studio中添加對COM對象的引用。MS Office 11/12對象庫但MS Word庫未列出?有任何想法嗎?

我沒有辦公室200X安裝

歡呼

+0

「M $」 - 我把它.NET開發是不是你的日常工作:-) – 2009-08-18 01:12:30

+2

http://www.penny-arcade.com/comic/2002/ 7/22/ – Domenic 2009-08-18 01:12:50

+0

如果您沒有安裝Office,那麼您爲什麼會期望安裝Office Automation? – 2009-08-18 01:55:12

回答

5

我們這樣做是通過使用Word Interop程序集。這需要安裝Word(在scenese後面啓動一個WINWORD進程),並且interop允許您在代碼中與它進行交互。

據我所知,這是做到這一點的唯一方法。

1

指的是免費的Microsoft Word Viewer,它允許您在沒有安裝Word的情況下查看Word文檔?如果是這樣,我不相信有一種方法可以自動查看器,因爲它不會安裝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 2009-08-18 01:37:52

3

嘗試Aspose.Words,它的設計,讓辦公自動化,而不在具有安裝Word的依賴。它提供了一個很好的API來打開文檔,然後執行一系列操作,例如打印,導出到PDF和許多其他結果。

1

這是如何使用文字自動化服務

使用互操作程序集始終是一個糟糕的主意,如果它是一個使用的SharePoint這不是每個人都有服務器 Word Automation Services

上運行。您還可以通過WebRequestMethod將文件發送到網頁,並將頁面打印到可愛的pdf編寫器或其他驅動程序。只需發送MIME類型的文件的字節。您將在asp.net網頁的頁面加載中打印。

2

以下代碼會打開Word視圖並將其傳遞給它。

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

試圖弄亂參數以及通過命令行打印(我不知道你是否可以)。

是的,在耗盡了每條大道之後,我發現Interop與Microsoft Viewer之間沒有辦法,這是非常令人沮喪的。

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)); 
    } 
}