Распечатать PDF-файл из виртуального пути

Я использую этот код для печати файла myDocument.pdf с диска D: который работает.

    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";

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

Примечание: я удалил "/p /h", которая является командой для печати и минимизации Adobe Reader, просто чтобы попытаться найти Adobe MyDocument.pdf файл.

Что не так в моих путях? Заранее спасибо.

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-файл будет пытаться печатать с сервера, а не с вашего компьютера.

Другие вопросы по тегам