У меня проблема со значениями ширины и высоты PageSettings.PrintableArea. Свойства Width, Height и Size утверждают, что «получают или устанавливают» значения. Кроме того, функция inflate () утверждает, что изменяет размер на основе значений, переданных в.
Однако все эти попытки изменить значение не сработали. Inflate () игнорируется (без ошибок, просто проходит, как если бы он работал, но значения остаются неизменными.
Попытка установить высоту, ширину или размер приводит к ошибке компилятора: «Невозможно изменить возвращаемое значение« System.Drawing.Printing.PageSettings.PrintableArea », поскольку оно не является переменной».
У меня такое ощущение, что это означает, что часть описания "или набор" - ложь.
Почему я хочу знать это: (Кто-то всегда спрашивает ...) У меня есть приложение для печати (C #, WinForm), которое для большинства вещей работает довольно хорошо. Я могу установить параметры принтера и объекты параметров страницы, чтобы управлять тем, что отображается в свойствах принтера в диалоговом окне печати. Однако в Microsoft Office Document Image Writer эти параметры иногда игнорируются, и размер бумаги возвращается к 0, 0, даже если отображается что-то еще. Все, что я действительно хочу, чтобы это было WYSIWYG, насколько отображаемые значения идут, поэтому я изменяю размер бумаги обратно на то, что должно быть, но область печати, если она неправильная, делает получающееся изображение выигрышным. Полученное изображение - это размер области печати, а не значение в формате бумаги. Просто интересно, была ли причина для этого или способ заставить ее этого не делать.
Заранее спасибо. :)
UPDATE:
//ignored
PrintDocument.DefaultPageSettings.PrintableArea.Inflate(XOffset, YOffset);
//causes compiler error
PrintDocument.DefaultPageSettings.PrintableArea.Size = new SizeF((float)DimensionsPaperSize.Width, (float)DimensionsPaperSize.Height);
PrintDocument.DefaultPageSettings.PrintableArea.Height = DimensionsPaperSize.Height;
PrintDocument.DefaultPageSettings.PrintableArea.Width = DimensionsPaperSize.Width;
ОБНОВЛЕНИЕ 2:
Для моих принтеров (нестандартного размера), которые печатаются правильно, когда я изменяю PaperSize, PrintableArea и PageBounds автоматически изменяются в соответствии с ним. Когда я изменяю PaperSize на MDIW, меняются только границы страницы. Я не понимаю, что вызвало это.
ВЫВОД:
Nobugz проделал большую работу, объясняя, почему PrintableArea нельзя установить (и обычно это никогда не требуется) и почему его функция inflate () игнорируется, поэтому я отмечаю это как ответ.
Что касается постоянной проблемы, которая побудила меня задать этот вопрос, я все еще в растерянности. В ответ на предложение «ScaleTranform» объекты PaperSize и Graphics уже имеют правильные значения, поэтому использование этих значений вряд ли поможет. Я подозреваю, что самое большее, что я мог сделать по этому маршруту, это изменить размер моего изображения правильного размера до значений мусора, которые я получаю для PrintableArea. Я собираюсь предположить, что это связано с ошибкой поведения, когда явная настройка PaperSize не может соответствующим образом изменить PrintableArea.
Это расстраивает, что я, кажется, единственный человек, который столкнулся с этой проблемой. По крайней мере, до сих пор я наблюдал это поведение только для MODIW. Для чьих-либо ссылок, и поэтому существует как можно больше информации; Я использую 32-разрядную версию Win7, которая разрабатывается в VS2008. Чтобы воспроизвести проблему, выполните следующие действия:
PrintDialog PrintDlg = new PrintDialog();
PrintDocument PrintDoc = new PrintDocument();
PrintDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(DocumentPrintPage);
PrintDlg.PrinterSettings.PrinterName = printerName; //MODIW
PrintDoc = AlterPaperSize(PrintDoc); //A function that just changes the papersize
PrintDlg.Document = PrintDoc;
PrintDlg.PrinterSettings = PrintDoc.PrinterSettings;
if (PrintDlg.ShowDialog() == DialogResult.OK)
{
if ((PrintDoc.DefaultPageSettings.PaperSize.Width == 0) &&
(PrintDoc.DefaultPageSettings.PaperSize.Height == 0))
{
PrintDoc.DefaultPageSettings.PaperSize = DimensionsPaperSize;
}
PrintDoc.Print();
}