2012-10-04 165 views
2

我試圖使用控制檯應用程序在後臺打印PDF文檔。我使用這個過程來做到這一點。控制檯應用程序將PDF文件發送到打印機,但在最小化模式下在後臺打開的adobe閱讀器出現以下錯誤:「打開此文檔時出錯,無法找到該文件」。由於這一次打印多次,我無法殺死這個過程。有沒有可能擺脫這個錯誤? 我的要求是使用過程打印PDF文件,同時這樣做的PDF文件必須以最小化模式打開,一旦完成打印閱讀器需要自動關閉。我曾嘗試下面的代碼,但仍引發錯誤..嘗試打印PDF文件時出錯

string file = "D:\\hat.pdf"; 
PrinterSettings ps = new PrinterSettings(); 
string printer = ps.PrinterName; 
Process.Start(Registry.LocalMachine.OpenSubKe(@"SOFTWARE\Microsoft\Windows\CurrentVersion"[email protected]"\App Paths\AcroRd32.exe").GetValue("").ToString(),string.Format("/h /t \"{0}\" \"{1}\"", file, printer)); 

回答

0

,因爲你想擁有的Acrobat閱讀器在後臺打開,當你要打印的文檔,你可以使用類似:

private static void RunExecutable(string executable, string arguments) 
{ 
    ProcessStartInfo starter = new ProcessStartInfo(executable, arguments); 
    starter.CreateNoWindow = true; 
    starter.RedirectStandardOutput = true; 
    starter.UseShellExecute = false; 

    Process process = new Process(); 
    process.StartInfo = starter; 
    process.Start(); 

    StringBuilder buffer = new StringBuilder(); 
    using (StreamReader reader = process.StandardOutput) 
    { 
    string line = reader.ReadLine(); 
    while (line != null) 
    { 
     buffer.Append(line); 
     buffer.Append(Environment.NewLine); 
     line = reader.ReadLine(); 
     Thread.Sleep(100); 
    } 
    } 
    if (process.ExitCode != 0) 
{ 
    throw new Exception(string.Format(@"""{0}"" exited with ExitCode {1}. Output: {2}", 
executable, process.ExitCode, buffer.ToString()); 
} 

}

您可以將上面的代碼到你的項目,並使用它作爲打印PDF如下:

string pathToExecutable = "c:\...\acrord32.exe"; 
RunExecutable(pathToExecutable, @"/t ""mytest.pdf"" ""My Windows PrinterName"""); 

這段代碼是從http://aspalliance.com/514_CodeSnip_Printing_PDF_from_NET.all

採取如果你並不需要有Acrobat Reader軟件在後臺打開,而只是打印像任何其他文件的PDF格式,你可以看看PrintDocument類:

http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.print.aspx