распечатать сетку в альбомном режиме - PullRequest
1 голос
/ 22 февраля 2012

Мне нужно напечатать вид сетки в альбомном режиме, а также нужно разбить на страницы (строка заголовка для печати на каждой странице)

Я попытался использовать свойство @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));
}

Это работает, но, очевидно, это трудоемко. Но это также доставляет мне проблемы, так как мне нужно разбивать данные на страницы вручную и перерисовывать строку заголовка на каждой странице. И, для нумерации страниц мне понадобится размер страницы принтера и разрешение принтера, которое я, очевидно, не могу получить.

Есть идеи? Как я могу напечатать вид сетки в альбомной ориентации и с разбиением на страницы с повторением строки заголовка на каждой странице? Есть ли более простой и лучший способ сделать это?

1 Ответ

1 голос
/ 22 февраля 2012

Я думаю, что вы смешиваете сценарии здесь.Если вы хотите печатать со стороны клиента (то есть человека, который посещает вашу веб-страницу), вам придется вывести область «для печати» через браузер, например HTML.Конечно, как вы увидите, печать HTML довольно ограничена, и только определенные браузеры реализуют правильные правила печати CSS.

Большинство разработчиков обходят эту проблему, динамически создавая и перенаправляя пользователя к документу PDF, который, как плагин, довольно распространен в наше время.Одним словом предупреждения, вы упомянули «трудоемкое» рисование / рендеринг, так что вы должны ожидать почти такой же опыт кодирования.

Ознакомьтесь с этой статьей для набора инструментов для создания PDF с открытым исходным кодом однако вам может оказаться проще использовать коммерческий.

Наконец, объект PrintDocument будет работать только на стороне сервера, т.е. в вашем коде ASP.NET, и будет печатать только на компьютере / сервере, который выполняетэтот код - он не будет печататься на принтере пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...