1

このコードを使用して、動作しているドライブ D: から myDocument.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";

そのすべてが機能しておらず、Adobe Reader はファイルが見つからないと言っています。

注: Adobe ReaderがmyDocument.pdfファイルを見つけるかどうかを試すためだけに、Adobe Readerを印刷して最小化するコマンドである「/ p / h」を削除しました。

私のパスで何が間違っていますか?前もって感謝します。

4

1 に答える 1

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 から実行している場合は、コンピューターから印刷されます。ただし、どこかのサーバー上の IIS に Web アプリを公開し、別のコンピューターから Web アプリを表示している場合、PDF はコンピューターからではなく、サーバーから印刷しようとします。

于 2015-08-29T10:55:38.120 に答える