Как получить предопределенный размер бумаги с помощью PaperKind - PullRequest
9 голосов
/ 06 января 2010

Мне нужно получить размер бумаги по System.Drawing.Printing.PaperKind. Есть ли предопределенные значения? Я не хочу жестко кодировать или рассчитывать размеры бумаги, я просто хочу получить это программно. Спасибо.

Ответы [ 5 ]

7 голосов
/ 04 февраля 2010

Подмножество предопределенных значений может быть получено путем итерации по коллекции PrinterSettings.PaperSizes.

В нашем приложении пользователь выбирает принтер, предоставляя нам объект PrinterSettings. В PrinterSettings содержится список PaperSize, поддерживаемых принтером, но не все (обратите внимание, что драйвер документов XPS (win7) поддерживает все размеры).

В нашем случае это подмножество поддерживаемых размеров - это все, что нам нужно. Указанный пользователем PaperKind передается в наш код печати, и он проходит через наш PrinterSettings объект, пока не найдет выбор пользователя или не сдается и не использует значение по умолчанию.

В приведенном ниже примере вы можете видеть, что объекты PaperSize заполнены правильно.

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

Это только подмножество, но, может быть, этого также достаточно для вас. API-интерфейсы печати в .NET действительно неясны, и MSDN не очень помогает ... Надеюсь, это поможет вам выбрать правильный путь!

5 голосов
/ 26 января 2011

LINQ способ достижения вашей цели - что-то вроде этого:

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

Удачи!

3 голосов
/ 21 сентября 2013
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;            
    }
2 голосов
/ 06 января 2010

Вы можете попробовать класс System.Drawing.Printing.PaperSize. Есть свойство RawKind, которое может быть установлено в System.Drawing.Printing.PaperKind.

Что-то вроде:

PaperSize size = new PaperSize();
size.RawKind = (int) PaperKind.A3;
0 голосов
/ 09 марта 2017
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...