如何在打印PDF时设置打印机设置

我正在尝试使用Process对象打印PDF文件。 在某种程度上,我可以成功打印它。 但现在我想设置打印机属性..比如没有副本,纸张大小等。但我没有看到任何属性来设置这些值。 我正在使用以下代码来打印PDF

string fileName = ""; string arguments = ""; string verbToUse = ""; int i = 0; ProcessStartInfo startInfo = new ProcessStartInfo(); OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = "c:\\"; openFileDialog1.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*"; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogResult.OK) { if ((fileName = openFileDialog1.FileName) != null) { startInfo = new ProcessStartInfo(fileName); if (File.Exists(fileName)) { i = 0; foreach (String verb in startInfo.Verbs) { // Display the possible verbs. MessageBox.Show(i.ToString() + ". " + verb); i++; } } } //Console.WriteLine("Select the index of the verb."); string index = "2"; if (Convert.ToInt32(index) = 0) { //Printer Name arguments = @"\\hydfsvt02\HPLaserJ"; startInfo.Arguments = arguments; } Process newProcess = new Process(); newProcess.StartInfo = startInfo; try { newProcess.Start(); MessageBox.Show(newProcess.ProcessName + " for file " + fileName + " started successfully with verb " + startInfo.Verb); } catch (System.ComponentModel.Win32Exception ex) { MessageBox.Show(" Win32Exception caught!"); MessageBox.Show(" Win32 error = " + ex.Message); } catch (System.InvalidOperationException) { MessageBox.Show("File " + fileName + " started with verb " + verbToUse); } } 

 private void startPrintingButton_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (DialogResult.OK == ofd.ShowDialog(this)) { PrintDocument pdoc = new PrintDocument(); pdoc.DefaultPageSettings.PrinterSettings.PrinterName = "ZDesigner GK420d"; pdoc.DefaultPageSettings.Landscape = true; pdoc.DefaultPageSettings.PaperSize.Height = 140; pdoc.DefaultPageSettings.PaperSize.Width = 104; Print(pdoc.PrinterSettings.PrinterName, ofd.FileName); } } private void Print(string printerName, string fileName) { try { ProcessStartInfo gsProcessInfo; Process gsProcess; gsProcessInfo = new ProcessStartInfo(); gsProcessInfo.Verb = "PrintTo"; gsProcessInfo.WindowStyle = ProcessWindowStyle.Hidden; gsProcessInfo.FileName = fileName; gsProcessInfo.Arguments = "\"" + printerName + "\""; gsProcess = Process.Start(gsProcessInfo); if (gsProcess.HasExited == false) { gsProcess.Kill(); } gsProcess.EnableRaisingEvents = true; gsProcess.Close(); } catch (Exception) { } } 

此代码将打印PDF文件以及调整打印设置。

我编写了一个批量打印PDF文件的应用程序。

无法指定要使用的打印机设置。 如果您将COM接口与Adobe Standard / Pro版本一起使用,则甚至无法实现。

您可以选择:

  1. 购买第三方PDF渲染器的许可证,您可以使用该渲染器将PDF转换为位图并使用PrintDocument控制PrinterSettings
  2. 使用GhostScript之类的东西将PDF文件转换为BMP文件,然后使用PrintDocument类打印BMP文件。 然后,您可以控制PrinterSettings。