System.Drawing.Printing.PaperKind tarafından kağıt boyutu almam gerekiyor. Önceden tanımlanmış değerler var mı? Kağıt boyutlarını kodlamak veya hesaplamak istemiyorum, sadece programlı olarak almak istiyorum. Teşekkürler.PaperKind tarafından önceden tanımlanmış kağıt boyutu nasıl elde edilir
cevap
ö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
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;
bir LINQ yolu böyle bir şey! Bu durumda yükseklik ve genişlik olarak
// https://stackoverflow.com/questions/17602366/why-can-i-not-call-toarray System.Linq kullanarak -on-a-jenerik-ienumerable nesne ; – udoline
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;
}
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);
}
Niçin çalıştığını açıklamak için cevabınıza küçük bir açıklama ekleyin. – Morgoth
System.Drawing.Printing kullanarak bunu kullanın; –
sayılı bunun için yardımcı sınıfının çeşit var sanırsın, hala 0. – alga
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
Enum sınıfını gördüm. Ama daha önce yazılanlar olabileceğinden hiçbir ders yazmamayı istedim. – alga