2009-07-08 26 views
6

Estoy tratando de imprimir un archivo PDF utilizando el objeto Proceso. Y hasta cierto punto, podría imprimirlo con éxito. Pero ahora quiero establecer las propiedades de la impresora ... como no de copias, Tamaño del papel, etc. Pero no veo ninguna propiedad para establecer estos valores. estoy usando siguiente código para imprimir archivos PDFCómo establecer la configuración de la impresora al imprimir 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); 
    } 
} 

Respuesta

0

He escrito una aplicación que hace la impresión por lotes de archivos PDF.

No es posible especificar la configuración de la impresora que desea utilizar. Ni siquiera es posible si usa la interfaz COM con las versiones Adobe Standard/Pro.

Sus opciones son o bien:

  1. comprar una licencia para un procesador de PDF de terceros que puede utilizar para convertir el PDF a mapas de bits y utilizar el PrintDocument para controlar los PrinterSettings
  2. usar algo como GhostScript para convertir los archivos PDF a archivos BMP y luego usar la clase PrintDocument para imprimir los archivos BMP. A continuación, puede controlar PrinterSettings.
0
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) 
    { 
    } 
} 

Este código imprimir archivos PDF, así como ajustar la configuración de impresión.

Cuestiones relacionadas