2009-12-04 41 views
4

我有用C#VS 2008編寫的Windows應用程序。此應用程序的目的是將任何文件轉換爲PDF文件。我發現了可以轉換文件的代碼,但是我遇到了一個小問題。C#System.Diagnostics.Process動詞問題

首先這裏是代碼:

 private void PrintToAdobePDF(string strInputFilePath) 
    { 
     ProcessStartInfo pProcInfo = new ProcessStartInfo(); 
     bool blResult; 

     blResult = SetDefaultPrinter(D2P_Adobe_Printer); 
     if (blResult) 
     { 
      pProcInfo.FileName = strInputFilePath; 
      pProcInfo.Verb = "Print"; 
      pProcInfo.CreateNoWindow = true; 
      pProcInfo.WindowStyle = ProcessWindowStyle.Hidden; 

      Process pProc = Process.Start(pProcInfo); 
      pProc.WaitForExit(1000); 
      pProc.CloseMainWindow(); 
      pProc.Close(); 
     } 

我遇到的問題是,當的Process.Start()方法是調用它是有兩個動詞,而不是一個動詞運行我指定(「打印「)。它正在運行「Open」和「PrintTo」,它使原始文件的派生應用程序打開並掛起應用程序(即jpg打開Windows傳真和圖片查看器)。 我的問題是如何在Process.Start()方法中使用「Print」動詞?

預先感謝您

回答

1

您是否嘗試過研究是否可以通過命令行參數執行Adobe Reader來完成相同的事情?有時候依靠外殼是可能的。

+0

我是一名優秀的程序員,但是我之前沒有在C#中使用過命令行參數,任何幫助都會很棒,我可以隨時使用Adobe 9 SDK。 – mattgcon 2009-12-04 19:06:19

+0

http://support.adobe.com/devsup/devsup.nsf/docs/52080.htm您應該能夠執行rea der程序,將路徑傳遞給PDF文件幷包含打印它的開關。 – kprobst 2009-12-04 20:08:00

+0

關於執行命令行參數的建議工作完美,謝謝。 – mattgcon 2009-12-15 19:19:05

1

什麼是發送在strInputFilePath?文檔說只發送文件名,所以如果你發送可能導致問題的整個路徑。

+0

我送的路徑和原始完整的文件名(包括擴展名)(需要的路徑,因爲這將最終從一個服務器拉取文件。如果我只是被髮送的文件名不帶擴展名? – mattgcon 2009-12-04 18:39:07

+0

根據該文件是如果解決方案在同一個服務器上,它應該沒問題 – ajdams 2009-12-04 20:29:34

1

不,發送沒有擴展名的文件名將會失敗。

最終使用System.Diagnostics.Process打印任何任意文件最多是不可預知的。這完全取決於您的操作系統如何處理每種類型的文件,以及您的註冊表是否已正確配置爲處理該文件。

我猜想以這種方式打印.doc文件可能工作正常,而其他文件類型可能無法很好地工作。

在我看來,你應該找到一些關於你將允許「自動」打印的文件的約束,併爲每種文件類型構建工作解決方案。否則,你會發現很多不可預知的行爲。

+0

這是非常有意義的,我確實有一種將圖像文件轉換爲PDF的方法,但是我愚蠢的刪除了它,並且沒有將代碼保存到任何地方。效率和圖像越來越混亂 – mattgcon 2009-12-04 19:10:15