2009-07-08 9 views
6

İşlem nesnesini kullanarak bir PDF dosyası yazdırmaya çalışıyorum. Ve bir dereceye kadar başarılı bir şekilde basabilirim. Ama şimdi yazıcı özelliklerini ayarlamak istiyorum .. kopyalardan, Kağıt boyutundan vb. Gibi. Ama bu değerleri ayarlamak için herhangi bir özellik görmüyorum. Ben PDF dosyalarının toplu baskı yapar bir uygulama yazdım PDF'leriPDF yazdırırken Yazıcı Ayarları nasıl ayarlanır

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); 
    } 
} 

cevap

0

yazdırmak için aşağıdaki kodu kullanıyorum.

Kullanmak istediğiniz yazıcı ayarlarını belirtmek mümkün değil. COM arabirimini Adobe Standard/Pro sürümleriyle kullanıyorsanız bile mümkün değildir.

  1. Eğer Bitmaps PDF dönüştürmek için kullanabilir ve
  2. kullanın gibi bir şey PrinterSettings kontrol etmek PrintDocument kullanabileceğiniz bir üçüncü taraf PDF Oluşturucu için lisans satın:

    Seçenekleriniz ya vardır PDF dosyalarını BMP dosyalarına dönüştürmek için GhostScript ve daha sonra BMP dosyalarını yazdırmak için PrintDocument sınıfını kullanın. Daha sonra PrinterSettings'i kontrol edebilirsiniz.

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) 
    { 
    } 
} 

Bu kod PDF dosyalarını yazdırmak yanı sıra baskı ayarlarını ayarlar.