2012-02-22 2 views
1

мне нужно напечатать GridView в ландшафтном режиме, а также необходима пагинация (строка заголовка будет печататься на каждой странице)Распечатайте GridView в ландшафтном режиме

Я попытался использовать @page свойства в моем CSS, но я не могу использовать это из-за проблемы совместимости с браузером. Так что это исключено.

я нашел альтернативу, используя PrintDocument класс и настройки страницы в ландшафтном режиме

PrintDocument pd1 = new PrintDocument(); 
pd1.DefaultPageSettings.Landscape = true; //this works 

Хотя, это работает, и я могу напечатать документ в ландшафтном режиме. PrintDocument класс может печатать поток, но не отображать разметку HTML. Мне нужно распечатать gridview, и я не могу понять, как это сделать. Есть идеи?

Кроме того, я нашел еще одну альтернативу печати сетки с использованием класса PrintDocument, но это довольно трудоемко. Я прокручиваю данные gridview и использую класс RectangleF System.Drawing и вручную рисую прямоугольники и текст для каждой ячейки в gridview и управляю размерами прямоугольника и смещениями 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)); 
} 

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

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

ответ

1

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

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

Отметьте эту статью для open-source PDF creation toolkit, однако, вы можете найти коммерческую, более удобную в использовании.

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

+0

Спасибо. Но мои средства ограничены, я не могу представить какую-либо новую библиотеку для проекта, как много других проектов и команд, а также огромную нагрузку на согласования, время и т. Д. - короче говоря, это не практично. Спасибо, что указали подробно на класс PrintDocument. Я, возможно, не читал мелкий шрифт, и он отлично работал в среде Dev, поэтому я убедился, что это путь. – pavanred

Смежные вопросы