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

问题描述:

我正在尝试使用Process对象打印PDF文件。在一定程度上,我可以成功打印它。但现在我想设置打印机属性..像副本,纸张大小等,但我没有看到任何属性来设置这些值。 我用下面的代码来打印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) < i) 
     verbToUse = startInfo.Verbs[Convert.ToInt32(index)]; 
    else 
     return; 

    startInfo.Verb = verbToUse; 
    if (verbToUse.ToLower().IndexOf("printto") >= 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); 
    } 
} 

我已经写了,做的PDF文件的批量打印的应用程序。

无法指定要使用的打印机设置。如果您将COM接口与Adobe Standard/Pro版本配合使用,甚至是不可能的。

你的选择是要么:

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

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文件,以及调整打印设置。