1

Я использую этот код для печати файла myDocument.pdf с диска D: который работает.Печать файла 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/отчет/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"; 

Все это не работает, и Adobe Reader говорит, что файл не найден.

Примечание: Я удалил «/ 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"""; 

Если вы хотите использовать файл относительно виртуального пути веб-приложения, то попробуйте

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

Примечание однако это приведет к печати с компьютера, на котором запущено веб-приложение. Если вы используете его на Visual Studio на своем компьютере, он будет печататься с вашего компьютера. Если, однако, вы опубликовали свое веб-приложение в IIS на каком-либо сервере и просматриваете свое веб-приложение с другого компьютера, PDF будет пытаться печатать с сервера, а не с вашего компьютера.

+0

Это работает! спасибо @Luke Woodward, у меня есть еще один вопрос сэр, потому что это путь, на котором работает проект visual studio 2012. Как реализовать его с помощью Server.MapPath («~/Content/report/Voucher.pdf»? –

+1

@JohnLouieDelaCruz: Я обновил свой ответ, чтобы обработать ваш дополнительный вопрос. Однако, пожалуйста, помните мои комментарии о работе в Интернете приложение на IIS на другой машине. –

+0

благодарю вас за помощь. –