0

ボタンを押すだけで既存のpdfファイルを印刷する必要があるビジュアルc#でアプリケーションを開発しています。

この方法を使用しSystem.Diagnostics.Processて印刷しましたが、「Printto」コマンドが機能しないように見えるため、Windows 8 環境では期待どおりに機能しません。

System.Drawing.Printing.PrintDocumentおそらくテキストファイルで動作する例があったが、pdfで試したときに代わりにランダムな文字を印刷していたなどの代替手段を使用したいと思います。

そのようなGoogle検索は空になっているように見えるか、正しいキーワードを入力していませんが、pdfをターゲットプリンターに印刷するだけでなく、プリンターの準備ができているか、オフラインであるか、紙切れであるかを判断できるソリューションが必要ですエラーキャッチ。

推奨されるSDKまたはサードパーティのルートも検討したいので、アドバイスしてください。

編集:現在使用しているコードスニペットを追加しました:

        string defFile = (Path.Combine(GlobalVars.pdfPath, tkt_no + "_DEF.pdf"));
        string rwPrinter = "";
        if (GlobalVars.useDefaultPrinter == false) 
        { 
            foreach (string strPrinter in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
            {
                if (strPrinter.StartsWith("ZDesigner"))
                {
                    rwPrinter = strPrinter;
                    break;
                }
            }
        }
        if (jobdo.Equals("print"))
        {
            Process process = new Process();
            //process.StartInfo.CreateNoWindow = true;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.StartInfo.FileName = defFile;
            if (rwPrinter.Length > 0)
            {
                process.StartInfo.Verb = "printto";
                //process.StartInfo.Verb = (Path.Combine(System.Windows.Forms.Application.StartupPath, "printto.exe"));
                process.StartInfo.Arguments = "\"" + rwPrinter + "\"";
            }
            else
            {
                process.StartInfo.Verb = "print";
            }

            try
            {
                process.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

            process.WaitForInputIdle();
            //while (process.MainWindowHandle == IntPtr.Zero)
            //{
            //    Thread.Sleep(20);
            //    process.Refresh();
            //}
            Thread.Sleep(7000);
            try
            {
                process.Kill();
            }
            catch { }
            // close any occurrences of Adobe Reader that may not close through a citrix environment regardless
            foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())
            {
                if (p.ProcessName.Equals("AcroRd32"))
                {
                    ObjectQuery sq = new ObjectQuery
                        ("Select * from Win32_Process where ProcessID = '" + p.Id + "'");
                    ManagementObjectSearcher searcher = new ManagementObjectSearcher(sq);
                    foreach (ManagementObject oReturn in searcher.Get())
                    {
                        string[] o = new string[2];
                        oReturn.InvokeMethod("GetOwner", (object[])o);
                        if(o[0] != null)
                            if(o[0].Equals(System.Environment.UserName))
                                p.Kill();
                    }

                }
            }

            if (rwPrinter == "") 
            {
                rwPrinter = "the default printer";
            }
            else
                MessageBox.Show("Ticket " + tkt_no + " was printed to " + rwPrinter + ".");
        }
4

1 に答える 1

-2

iTextSharp ライブラリを使用すると、簡単に PDF ファイルを作成できます: http://sourceforge.net/projects/itextsharp/

于 2013-10-31T13:17:29.427 に答える