2015-08-29 293 views
1

我正在使用此代碼從驅動器D打印myDocument.pdf文件:正在工作。從虛擬路徑打印pdf文件

Process proc = new Process(); 
    proc.StartInfo.Verb = "PrinTo"; 
    proc.StartInfo.FileName = @"C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe"; 
    proc.StartInfo.Arguments = @"/p /h D:myDocument.pdf"; 
    proc.StartInfo.UseShellExecute = false; 
    proc.StartInfo.CreateNoWindow = true; 
    proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    proc.Start(); 

    proc.WaitForInputIdle(); 
    System.Threading.Thread.Sleep(1000); 
    if (false == proc.CloseMainWindow()) 
    proc.Kill(); 

但我想從我的項目內的文件夾中打印一個文件,它是Content/report/myDocument.pdf。我試圖改變'proc.StartInfo.Arguments = @「/ p/h D:myDocument.pdf」;'到:

proc.StartInfo.Arguments = Server.MapPath("~/Content/report/myDocument.pdf"); 
proc.StartInfo.Arguments = @"Content/report/myDocument.pdf"; 
proc.StartInfo.Arguments "C:\Users\User\Documents\Visual Studio 2012\Projects\PDF\PDF\Content\report\myDocument.pdf"; 

所有這些都不工作,土坯閱讀器說,該文件無法找到。

備註:我刪除了「/ p/h」這個命令來打印和最小化adobe reader,只是爲了試試adobe reader是否會找到myDocument.pdf文件。

我的路徑有什麼問題?提前致謝。

+0

對不起,這是c# –

回答

1

你有沒有嘗試用雙引號括住文件名?

proc.StartInfo.Arguments = @"""C:\Users\User\Documents\Visual Studio 2012\Projects\PDF\PDF\Content\report\Voucher.pdf"""; 

由於文件名中包含空格,則可能是Acrobat Reader軟件嘗試加載一個名爲C:\Users\User\Documents\Visual文件,我認爲不存在。

如果你想重新引入/p/h開關,儘量

proc.StartInfo.Arguments = @"/p /h ""C:\Users\User\Documents\Visual Studio 2012\Projects\PDF\PDF\Content\report\Voucher.pdf"""; 

如果您想使用相對於Web應用程序的虛擬路徑的文件,然後嘗試

string filePath = Server.MapPath("~/Content/report/Voucher.pdf"); 
proc.StartInfo.Arguments = string.Format(@"/p /h ""{0}""", filePath); 

注但是,這將從正在運行Web應用程序的機器打印。如果您在計算機上使用Visual Studio運行它,則它將從計算機打印。但是,如果您已將Web應用程序發佈到某個服務器上的IIS並正在從另一臺計算機上查看您的Web應用程序,則PDF將嘗試從服務器而不是從您的計算機進行打印。

+0

它的工作!謝謝@Luke伍德沃德,我有另一個問題先生,因爲它是視覺工作室2012項目的路徑。如何使用Server.MapPath實現它(「〜/ Content/report/Voucher.pdf」? –

+1

@JohnLouieDelaCruz:我已經更新了我的答案以處理您的額外問題,但請記住我關於運行您的Web的意見應用程序在另一臺機器上的IIS。 –

+0

感謝您的幫助。 –