2017-05-25 16 views
8

Kullanıcının, önceden tanımlanmış yazıcı profilini seçebileceği, kullanıcının PrintDialog'u getirdiği yazdırma seçeneğini seçebileceği bir seçeneğim var.Seçilen yazıcı profili/sayfa boyutuyla baskı dosyası yazdırma

Bu yazıcı için varsayılan kağıt boyutu A4'tür, ancak bu profili seçerek A5 olarak değiştirilir.

Yazıcıyı düzeltmek için yazdırma görevini gönderen aşağıdaki kodu kullanıyorum ancak her zaman A4'te yazdırdığı için doğru kağıt boyutunu almıyor. Burada bir şey eksik miyim yoksa bunu başarmanın alternatif yolu var mı?

using (var pd = new PrintDialog()) 
{ 
    if (pd.ShowDialog() == DialogResult.OK) 
     { 
     var info = new ProcessStartInfo(filepath) 
        { 
         Arguments = "\"" + pd.PrinterSettings + "\"", 
         CreateNoWindow = true, 
         WindowStyle = ProcessWindowStyle.Hidden, 
         UseShellExecute = true, 
         Verb = "Print" 
        }; 
     Process.Start(info); 
     } 
    } 
+3

O ne olursa olsun programı filepath * geçmek bu Argümanlar takdir edecek * ile ilişkili olduğunu aşırı olası değildir. Genel olarak, bir Print fiili uygulayan herhangi bir program, sadece kağıdın hangi kağıda kullanılacağına karar verir. Hemen hemen her zaman Denetim Masası'nda yapılandırılan varsayılan seçim. –

+0

Bir yazıcı sürücüsünün varsayılan yapılandırma seçenekleri iletişim kutusu gibi şüpheli görünüyor, ancak ayrı bir işlem olarak açıyor gibi görünüyorsunuz. Varsayılan yazıcı ayarlarını değiştiren bir program yapmaya mı çalışıyorsunuz? Başka bir deyişle, tam olarak ne yapmaya çalıştığınız konusunda çok kafam karışmışım. S. Hooley'nin cevabı, aslında uygulamanızın içinden bir sayfa basmanın alışılmış yolunu gösterir. Kullanıcıların baskı ayarlarını değiştirmelerine izin vermek için PrintDialog ile birlikte kullanılabileceğine inanıyorum. TLDR: Lütfen tam olarak ne yapmaya çalıştığınıza odaklanın. – ashbygeek

cevap

0

Sen System.Drawing.Printing dan PrintDocument dayanır aşağıdaki gibi page settings kullanarak kod belirtmek gerekir. Gerekirse, ayrıca PrintDocument sınıfını kullanarak PrintPage olay için bir olay işleyicisi tanımlayabiliriz:

PrintDocument pd = new PrintDocument(); 
//pd.PrintPage += new PrintPageEventHandler(handlePagePrint); 
pd.PrinterSettings.PrinterName = "Printer name goes here"; 
// select the appropriate item from the PaperSizes collection 
pd.DefaultPageSettings.PaperSize = pd.PrinterSettings.PaperSizes[0]; 

if (pd.PrinterSettings.IsValid) 
{ 
    pd.Print(); 
} 
+0

Bu, yazıcı ayarları iletişim kutusuyla da bağlantının nasıl olduğunu göstermek için iyi bir fikir olabilir. – ashbygeek