Ежедневно вода в начале, заглянул под последний блог, и восемь дней в году, ТПИ, роскошь.
В последнее время работа вполне устраивает, я хочу направление, последующее обучение машины делать, должны накапливаться перед первой компанией, чтобы решить проблему сейчас.
Разговор о жизни закончился, или, что главная тема. (Я считаю, что это название не может привлечь людей, ах)
Print: PrintDocument
Окружающая среда: WPF и Winform
Требования: наборные и печать фотографии
Перед параметры не понять много проблем, а теперь хотят, чтобы очистить, легко записать его.
WPF временно отложить в сторону, чтобы быть решен до WinForm, с Baidu плохой улице одного и того же события PrintPage Графика рисунок для печати. Другая часть ссылки
Во-первых с графикой рисовать я не понимаю, как рисовать, сколько размер бумаги, как печатать заданный размер.
// Давайте поговорим о размере бумаги, то размер бумаги может быть напечатан в начале файла
PrintDocument.Print ();
И после выбранного принтера, используя данные, которые будут печататься в случае, когда PrintPage
частная пустота pdControl_PrintPage ( объект отправителя, PrintPageEventArgs е) {
вар PrintDocument = (PrintDocument) отправителя;
//纸张的高和宽
вар paper_h = printDocument.DefaultPageSettings.PaperSize.Height;
вар paper_w = printDocument.DefaultPageSettings.PaperSize.Width;
}
Но знаю, но не знаю, высоту и ширину блока, ах, эта высота и ширина в пикселях или дюймах, в конце концов, или другой какой ад.
В примере нового PaperSize увидеть Примечание:
Сотых дюйма
Первая такая проблема решена, размер бумаги printDocument.DefaultPageSettings.PaperSize, а единицы сотых дюйма.
Но не слишком уверен в этом, к примеру, я хочу, чтобы напечатать изображение на 6 дюймов (в частности, количество), но, учитывая ширину размера и больше 0.15In, намного выше 0.13In. В любом случае победа приходит с бумагой формата А4 PDF печати будет отличаться от 0,002 или менее в порядке. Почему это должно быть богом, чтобы объяснить ошибку.
Тогда второй вопрос (третий): как рисовать, чтобы напечатать указанный размер
Теперь, когда мы знаем, что объем его, чтобы избежать рисования печати за бумагу. Тогда мы будем рисовать содержание, и ничего, если они говорят о картине, а другие почти.
Что я делаю, это зависит от размера картины охватывает всю бумагу.
// Давайте создадим класс, и записать размер изображения к размеру бумаги
// Этот класс только для облегчения отладки преобразования единиц измерения, практическое применение только выбрать единицу линейного класса PrintUnit {
// размер изображения, где изображение на самом деле дюйм фотографии общественного ИНТ unit_w = 259 ; общественное ИНТ unit_h = 377 ;
// размер бумаги 4 * 300 * 6 300dpi 300.. общественности PaperSize = в PaperSize новый новый PaperSize ( " A6 " , 1800 , 1200 );
// метрика частного GraphicsUnit единицы = GraphicsUnit .pixel; общественный GraphicsUnit Unit { GET => Единица; SET { Единица = значение;
// если метрических миллиметров ПЧ (Единица измерения == GraphicsUnit.Millimeter) {
// в частности , с точки зрения 1200 / 25.4 приблизительно равна 300 * 102
paperSize.Height = 102 ; paperSize.Width = 152 ;
unit_w = 22 ; unit_h = 32 ; } } } }
Тогда PrintPage событие, где бумага может быть рассчитана как много увешаны картинами
PrintUnit printUnit = новый PrintUnit ();
g.PageUnit = printUnit.Unit;
колонка = printUnit.paperSize.Width / printUnit.unit_w; строка = printUnit.paperSize.Height / printUnit.unit_h; для ( INT I = 0 ; я <строка; я ++ ) { для ( INT J = 0 ; J <столбец; j ++ ) { // g.DrawImage ( // Resources._1, // новый прямоугольник (J * printUnit.unit_w, я * printUnit.unit_h, printUnit.unit_w, printUnit.unit_h) // Новый прямоугольник (0, 0, Resources._1.Width, Resources._1.Height), // г. PageUnit); g.DrawImage (Resources._1, J * printUnit.unit_w, я * printUnit.unit_h, printUnit.unit_w, printUnit.unit_h); } }
Интересно, что в DrawImage (Изображение, прямоугольник destRect, Rectangle srcRect, GraphicsUnit srcUnit), перегруженных в картинке есть ошибка, по неизвестным причинам.
Немного хаотично, я вынужден объяснить волну.
В том случае, когда PrintPageEventArgs.PageUnit печать создана единица измерения является единицей вы хотите нарисовать пиксель или миллиметр или в соответствии с другим по умолчанию является сотыми дюйма.
// Например, вы хотите печатать на бумаге формата А4 210мм × 297 мм, печать события PrintPage в установленных единицах измерения в миллиметровом
g.PageUnit = GraphicsUnit.Millimeter;
// покрыли всю бумагу A4
g.DrawImage (изображение, 0, 0, 210, 297) ;
Это так просто, но не рекомендуется для использования в миллиметрах, потому что это легко, потому что ошибки картины миллиметры будут преобразованы в пиксели при рисовании.
Очевидно, что будет разрыв при построении графика в миллиметрах
Лень наборное, нечто большее, листок скольжения.
В передней части высокой энергии напоминают код беспорядок, вы радушны.
https://files.cnblogs.com/files/zlyxm/DemoPrint_zlyxm.rar