3

特定のフォルダにあるすべての PDF ファイルを開いて印刷したいと考えています。ファイルは、次のパターンに従って名前が付けられます。

NameOfThePrinter_Timestamp.pdf

次に、対応するプリンターを使用してこれらのファイルを印刷します。

static void Main(string[] args)
{
    string pdf = @"C:\PathToFolder";
    if (Directory.GetFiles(pdf).Length > 0)
    {
        string[] files = Directory.GetFiles(pdf);
        var adobe = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("App Paths").OpenSubKey("AcroRd32.exe");
        var path = adobe.GetValue("");
        string acrobat = path.ToString();
        for (int i = 0; i < files.Length; i++)
        {
            Process process = new Process();
            process.StartInfo.FileName = acrobat;
            process.StartInfo.Verb = "printto";
            process.StartInfo.Arguments = "/p /s /h \"" + files[i] + "\"";
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.UseShellExecute = false;
            process.Start();

            DateTime start = DateTime.Now;
            IntPtr handle = IntPtr.Zero;

            while (handle == IntPtr.Zero && DateTime.Now - start <= TimeSpan.FromSeconds(2))
            {
                try
                {
                    System.Threading.Thread.Sleep(50);
                    handle = process.MainWindowHandle;
                } catch (Exception) { }
            }
            foreach (String verb in process.StartInfo.Verbs)
            {
                // Display the possible verbs.
                Console.WriteLine("  {0}. {1}", i.ToString(), verb);
                i++;
            }
            System.Threading.Thread.Sleep(10000);
            Console.Out.WriteLine("File: " + files[i] + " is printing!");
            process.Kill();
        }

        foreach (string str in files)
        {
            File.Delete(str);
        }
        Console.Out.WriteLine("Files are deleted!");
    }
}

私の質問は次のとおりです。プリンター名をパラメーターとして渡すにはどうすればよいですか?

ここで何かを試してみましたが、スローしてエラーになるか、デフォルトのプリンターに出力されます。

process.StartInfo.Arguments = "/p /s /h \"" + files[i] + "\"";
4

2 に答える 2

0

Ghostscriptを使用して、PDF ドキュメントをプリンターに送信できます。

ここでは、PDF ドキュメントをプリンターに送信する方法のサンプルを見つけることができます: How to print PDF on default network printer using GhostScript (gswin32c.exe) shell command

また、.exe ファイルを呼び出さずに直接 Ghostscript を制御したい場合は、ここで .NET 用の Ghostscript ラッパーを見つけることができます: http://ghostscriptnet.codeplex.com

于 2013-10-16T09:58:32.227 に答える