2010-01-06 4 views

cevap

7

önceden tanımlanmış değerlerin bir alt kümesi bir PrinterSettings.PaperSizes koleksiyonu üzerinde yineleme tarafından bulunabilmektedir.

Uygulamamız, kullanıcı bize PrinterSettings nesnesini sağlayan bir yazıcı seçti. PrinterSettings içinde bulunan yazıcı tarafından desteklenen PaperSize 'lerin listesidir - her şey (XPS Belge Sürücüsü (win7)' nin tüm boyutları desteklediğini unutmayın).

Bizim durumumuzda, desteklenen boyutların bu alt kümesi ihtiyacımız olan tek şeydir. PaperKind numaralı bir kullanıcı, yazdırma kodumuza aktarılır ve kullanıcı seçimini bulana kadar ya da bir öntanımlı olana ve varsayılan değer kullanana kadar PrinterSettings nesnesinden geçer.

Aşağıdaki örnekte, PaperSize nesnelerinin doğru şekilde doldurulduğunu görebilirsiniz.

PrinterSettings settings = new PrinterSettings(); 
foreach (PaperSize size in settings.PaperSizes) 
    Debug.WriteLine(size); 

Bu yalnızca bir alt kümesidir, ancak belki de sizin için yeterlidir. .NET'teki yazdırma API'leri gerçekten belirsiz ve msdn gerçekten çok yardımcı değil ... Umarım doğru yolda sizi koyar!

PrinterSettings printerSettings = new PrinterSettings(); 
IQueryable<PaperSize> paperSizes = printerSettings.PaperSizes.Cast<PaperSize>().AsQueryable(); 
PaperSize a4rotated = paperSizes.Where(paperSize => paperSize.Kind == PaperKind.A4Rotated).FirstOrDefault(); 

iyi şanslar: hedefinize ulaşmak için

2

System.Drawing.Printing.PaperSize sınıfını deneyebilirsiniz. System.Drawing.Printing.PaperKind için ayarlanabilen bir RawKind özelliği var. gibi

şey:

PaperSize size = new PaperSize(); 
size.RawKind = (int) PaperKind.A3; 
+0

sayılı bunun için yardımcı sınıfının çeşit var sanırsın, hala 0. – alga

+0

adamsın. http://msdn.microsoft.com/en-us/library/system.drawing.printing.paperkind.aspx, her PaperKind'i yükseklik ve genişlikle birlikte listeler. Belki de bir yardımcı sınıf yazmalı ve onu yazmalısın? – hackerhasid

+0

Enum sınıfını gördüm. Ama daha önce yazılanlar olabileceğinden hiçbir ders yazmamayı istedim. – alga

5

bir LINQ yolu böyle bir şey! Bu durumda yükseklik ve genişlik olarak

+0

// https://stackoverflow.com/questions/17602366/why-can-i-not-call-toarray System.Linq kullanarak -on-a-jenerik-ienumerable nesne ; – udoline

2
public static PaperSize GetPaperSize(string Name) 
    { 
     PaperSize size1 = null; 
     Name=Name.ToUpper(); 
     PrinterSettings settings = new PrinterSettings(); 
     foreach (PaperSize size in settings.PaperSizes) 
      if (size.Kind.ToString().ToUpper() == Name) 
      { 
       size1 = size; 
       break; 
      } 
     return size1;    
    } 
0
PaperSize pkSize; 
PrintDocument printDoc = new PrintDocument(); 
for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++) 
{ 
    pkSize = printDoc.PrinterSettings.PaperSizes[i]; 
    cmbPaperSize.Items.Add(pkSize); 
} 
+2

Niçin çalıştığını açıklamak için cevabınıza küçük bir açıklama ekleyin. – Morgoth

+0

System.Drawing.Printing kullanarak bunu kullanın; –