Мне нужно напечатать вид сетки в альбомном режиме, а также нужно разбить на страницы (строка заголовка для печати на каждой странице)
Я попытался использовать свойство @page
в своем CSS, но не могу использовать его из-за проблемы совместимости браузера. Так что это исключено.
Я нашел альтернативу, используя класс PrintDocument
и установив страницу в альбомный режим
PrintDocument pd1 = new PrintDocument();
pd1.DefaultPageSettings.Landscape = true; //this works
Хотя это сработало, и я могу напечатать документ в альбомной ориентации. PrintDocument
класс может печатать поток, но не отображать HTML-разметку. Мне нужно распечатать сетку и я не могу понять, как это сделать. Есть идеи?
Более того, я нашел еще одну альтернативу для печати вида сетки с использованием класса PrintDocument
, но это довольно трудоемко. Я перебираю данные сетки и использую класс RectangleF System.Drawing и вручную рисую прямоугольники и текст для каждой ячейки в сетке, а также управляю размерами прямоугольника и смещениями x / y, чтобы нарисовать всю таблицу.
PrintDocument pd1 = new PrintDocument();
pd1.DefaultPageSettings.Landscape = true;
pd1.PrintPage += printer_PrintPage;
pd1.Print();
//Draw a rectangle and fill text in it.
//I Change values of xoffset, yoffset accordingly to draw a row one cell after other
protected void printer_PrintPage(object sender, PrintPageEventArgs e)
{
var rectF1 = new RectangleF(xoffset, yoffset, cellWidth, cellHeight);
e.Graphics.DrawString(propertyinfo.GetValue(obj, null).ToString(), font1, Brushes.Black, rectF1);
e.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(rectF1));
}
Это работает, но, очевидно, это трудоемко. Но это также доставляет мне проблемы, так как мне нужно разбивать данные на страницы вручную и перерисовывать строку заголовка на каждой странице. И, для нумерации страниц мне понадобится размер страницы принтера и разрешение принтера, которое я, очевидно, не могу получить.
Есть идеи? Как я могу напечатать вид сетки в альбомной ориентации и с разбиением на страницы с повторением строки заголовка на каждой странице? Есть ли более простой и лучший способ сделать это?