GridView Print and Print Preview
sing System.Linq;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Markup;
using System.Windows.Media;
using Telerik.Windows.Controls;
using Telerik.Windows.Controls.GridView; namespace YourNamespaceHere
{
/// <summary>
/// Support Printing Related Methods
/// </summary>
public static class PrintExtensions
{
#region ___________ Properties ____________________________________________________________________________________________
/// <summary>
/// Zoom Enumeration to specify how pages are stretched in print and preview
/// </summary>
public enum ZoomType
{
/// <summary>
/// 100% of normal size
/// </summary>
Full, /// <summary>
/// Page Width (fit so one page stretches to full width)
/// </summary>
Width, /// <summary>
/// Page Height (fit so one page stretches to full height)
/// </summary>
Height, /// <summary>
/// Display two columsn of pages
/// </summary>
TwoWide
};
#endregion
#region ___________ Methods _______________________________________________________________________________________________
/// <summary>
/// Print element to a document
/// </summary>
/// <param name="element">GUI Element to Print</param>
/// <param name="dialog">Reference to Print Dialog</param>
/// <param name="orientation">Page Orientation (i.e. Portrait vs. Landscape)</param>
/// <returns>Destination document</returns>
static FixedDocument ToFixedDocument(FrameworkElement element, PrintDialog dialog, PageOrientation orientation = PageOrientation.Portrait)
{
dialog.PrintTicket.PageOrientation = orientation;
PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
Size pageSize = new Size(dialog.PrintableAreaWidth, dialog.PrintableAreaHeight);
Size extentSize = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight); FixedDocument fixedDocument = new FixedDocument(); element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
element.Arrange(new Rect(new Point(, ), element.DesiredSize)); for (double y = ; y < element.DesiredSize.Height; y += extentSize.Height)
{
for (double x = ; x < element.DesiredSize.Width; x += extentSize.Width)
{
VisualBrush brush = new VisualBrush(element);
brush.Stretch = Stretch.None;
brush.AlignmentX = AlignmentX.Left;
brush.AlignmentY = AlignmentY.Top;
brush.ViewboxUnits = BrushMappingMode.Absolute;
brush.TileMode = TileMode.None;
brush.Viewbox = new Rect(x, y, extentSize.Width, extentSize.Height); PageContent pageContent = new PageContent();
FixedPage page = new FixedPage();
((IAddChild)pageContent).AddChild(page); fixedDocument.Pages.Add(pageContent);
page.Width = pageSize.Width;
page.Height = pageSize.Height; Canvas canvas = new Canvas();
FixedPage.SetLeft(canvas, capabilities.PageImageableArea.OriginWidth);
FixedPage.SetTop(canvas, capabilities.PageImageableArea.OriginHeight);
canvas.Width = extentSize.Width;
canvas.Height = extentSize.Height;
canvas.Background = brush; page.Children.Add(canvas);
}
}
return fixedDocument;
} /// <summary>
/// Convert GridView to Printer-Friendly version of a GridView
/// </summary>
/// <param name="source">Input GridView</param>
/// <returns>Printer-Friendly version of source</returns>
static GridViewDataControl ToPrintFriendlyGrid(GridViewDataControl source)
{
RadGridView grid = new RadGridView(); grid.ItemsSource = source.ItemsSource;
grid.RowIndicatorVisibility = Visibility.Collapsed;
grid.ShowGroupPanel = false;
grid.CanUserFreezeColumns = false;
grid.IsFilteringAllowed = false;
grid.AutoExpandGroups = true;
grid.AutoGenerateColumns = false; foreach (GridViewDataColumn column in source.Columns.OfType<GridViewDataColumn>())
{
GridViewDataColumn newColumn = new GridViewDataColumn();
newColumn.Width = column.ActualWidth;
newColumn.DisplayIndex = column.DisplayIndex;
//newColumn.DataMemberBinding = new System.Windows.Data.Binding(column.UniqueName);
newColumn.DataMemberBinding = column.DataMemberBinding; // Better to just copy the references to get all the custom formatting
newColumn.DataFormatString = column.DataFormatString;
newColumn.TextAlignment = column.TextAlignment;
newColumn.Header = column.Header;
newColumn.Footer = column.Footer;
grid.Columns.Add(newColumn);
} StyleManager.SetTheme(grid, StyleManager.GetTheme(grid)); grid.SortDescriptors.AddRange(source.SortDescriptors);
grid.GroupDescriptors.AddRange(source.GroupDescriptors);
grid.FilterDescriptors.AddRange(source.FilterDescriptors); return grid;
} /// <summary>
/// Perform a Print Preview on GridView source
/// </summary>
/// <param name="source">Input GridView</param>
/// <param name="orientation">Page Orientation (i.e. Portrait vs. Landscape)</param>
/// <param name="zoom">Zoom Enumeration to specify how pages are stretched in print and preview</param>
public static void PrintPreview(GridViewDataControl source, PageOrientation orientation = PageOrientation.Landscape, ZoomType zoom = ZoomType.TwoWide)
{
Window window = new Window();
window.Title = "Print Preview";
if (!string.IsNullOrWhiteSpace(source.ToolTip as string)) window.Title += " of " + source.ToolTip;
window.Width = SystemParameters.PrimaryScreenWidth * 0.92;
window.Height = SystemParameters.WorkArea.Height;
window.Left = constrain(SystemParameters.VirtualScreenWidth - SystemParameters.PrimaryScreenWidth, , SystemParameters.VirtualScreenWidth - );
window.Top = constrain(, , SystemParameters.VirtualScreenHeight - ); DocumentViewer viewer = new DocumentViewer();
viewer.Document = ToFixedDocument(ToPrintFriendlyGrid(source), new PrintDialog(), orientation);
Zoom(viewer, zoom);
window.Content = viewer; window.ShowDialog();
} /// <summary>
/// Constrain val to the range [val_min, val_max]
/// </summary>
/// <param name="val">Value to be constrained</param>
/// <param name="val_min">Minimum that will be returned if val is less than val_min</param>
/// <param name="val_max">Maximum that will be returned if val is greater than val_max</param>
/// <returns>val in [val_min, val_max]</returns>
private static double constrain(double val, double val_min, double val_max)
{
if (val < val_min) return val_min;
else if (val > val_max) return val_max;
else return val;
} /// <summary>
/// Perform a Print on GridView source
/// </summary>
/// <param name="source">Input GridView</param>
/// <param name="showDialog">True to show print dialog before printing</param>
/// <param name="orientation">Page Orientation (i.e. Portrait vs. Landscape)</param>
/// <param name="zoom">Zoom Enumeration to specify how pages are stretched in print and preview</param>
public static void Print(GridViewDataControl source, bool showDialog = true, PageOrientation orientation = PageOrientation.Landscape, ZoomType zoom = ZoomType.TwoWide)
{
PrintDialog dialog = new PrintDialog();
bool? dialogResult = showDialog ? dialog.ShowDialog() : true; if (dialogResult == true)
{
DocumentViewer viewer = new DocumentViewer();
viewer.Document = ToFixedDocument(ToPrintFriendlyGrid(source), dialog, orientation);
Zoom(viewer, zoom);
dialog.PrintDocument(viewer.Document.DocumentPaginator, "");
}
} /// <summary>
/// Scale viewer to size specified by zoom
/// </summary>
/// <param name="viewer">Document to zoom</param>
/// <param name="zoom">Zoom Enumeration to specify how pages are stretched in print and preview</param>
public static void Zoom(DocumentViewer viewer, ZoomType zoom)
{
switch (zoom)
{
case ZoomType.Height: viewer.FitToHeight(); break;
case ZoomType.Width: viewer.FitToWidth(); break;
case ZoomType.TwoWide: viewer.FitToMaxPagesAcross(); break;
case ZoomType.Full: break;
}
}
#endregion
}
GridView Print and Print Preview的更多相关文章
- 为什么 echo 3 . print(2) . print(4) . 5 . 'c'的结果是45c2131
例子:请写出echo 3 . print(2) . print(4) . 5 . 'c'的输出结果为____? 许多人看到这个题的第一印象是输出结果不就是3245c嘛,然而正确的是答案却是45c213 ...
- Web window.print() 打印
web打印 window.print() 我只给出比较有效的,方便的打印方法,有些WEB打印是调用ActiveX控件的,这样就需要用户去修改自己IE浏览器的Internet选项里的安全里的Active ...
- python print及格式化
print(value,sep=' ',end='\n',file=sys.stdout, flush=False) sep=' '默认空格 print('hello','world') #hello ...
- echo print() print_r() var_dump()的区别
常用调试方法 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. print()函数 ...
- 为什么print在python3中变成了函数?
转自:http://www.codingpy.com/article/why-print-became-a-function-in-python-3/ 在Python 2中,print是一个语句(st ...
- JAVA 之print,printf,println
print:将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后. println: 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始. printf:是格式 ...
- PHP之echo/print
1.PHP中有两个基本的输出方式:echo和print: 2.echo和print的区别: **echo:可以输出一个或多个字符串: **print:只允许输出一个字符串,返回值总为1: 3.echo ...
- echo(),print(),print_r(),var_dump的区别?
常见的输出语句 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. print()函 ...
- echo、print、sprint、sprintf输出
echo() 函数 定义和用法 echo() 函数输出一个或多个字符串. 语法 echo(strings) 参数 描述 strings 必需.一个或多个要发送到输出的字符串. 提示和注释 注释:ech ...
随机推荐
- Android 4.1的新特性介绍
原文:http://android.eoe.cn/topic/summary 果冻豆 - Android 4.1 通知系统 - Notifications 在Android 4.1系统上通知的功能大大 ...
- 绝对路径${pageContext.request.contextPath}用法及其与web.xml中Servlet的url-pattern匹配过程
以系统的一个“添加商品”的功能为例加以说明,系统页面为add.jsp,如图一所示: 图一 添加商品界面 系统的代码目录结构及add.jsp代码如图二所示: 图二 系统的代码目录结构及add.js ...
- 关于如果从SQLSERVER中获取 数据库信息 或者 表信息
1.首先呢.要明确一点.SQLSERVER中的系统信息一般都无从table中找到的.通常都在View中找到 这是重点. 2.接着我们打开算起来SQLSERVER,展开你某一数据库.看到类似 3.然后展 ...
- 分布式系统的那些事儿(四) - MQ时代的通信
之前在讲RPC通信的各种好处,特别好用,但是RPC并不是万能的,也并不是适用于各种场景的,因为他是同步的:现如今很多场景下的调用都是异步的,系统A调用B后,并不需要知道B的结果,而且对B的结果无所谓, ...
- regularization
https://www.zhihu.com/question/20924039 http://52opencourse.com/133/coursera%E5%85%AC%E5%BC%80%E8%AF ...
- CAS无锁实现原理以及ABA问题
CAS(比较与交换,Compare and swap) 是一种有名的无锁算法.无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(N ...
- UI设计文本框解决Placeholder的在IE10 以下 IE 9 IE8 IE 7 的兼容问题
创建JS文件 placeholderfriend.js (function($) { /** * 牛叉的解决方案 */ var placeholderfriend = { focus: functio ...
- (转)Linux下的输入/输出重定向
Linux环境中支持输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>lee.dat 表示 ...
- 使用nginx搭建tomcat集群配置
软件准备: (1)jdk-8u73-linux-x64.tar.gz (2)apache-tomcat-7.0.57.tar.gz (3)nginx-1.7.7.tar.gz 准备3台Linux机器, ...
- 远程mysql导入本地文件
远程mysql导入本地文件 登陆数据库 mysql --local-infile -h<IP> -u<USR> -p 选择数据库 USE xxx 导入文件 LOAD DATA ...