C#打印页面的纸张设置问题Spread表格控件
这段时间学习spread控件,用到打印设置上边,其他的设置都还好说,但是打印纸张的大小,纸张类型等把我折腾的够呛,找了半天才找到,记录下来备查。
1、打印纸张类型:
System.Drawing.Printing.PaperSize pkSize;
System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument();
for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++)
{//这个是获取纸张类型,即A4、A3这些类型名称
pkSize = printDoc.PrinterSettings.PaperSizes[i];
combPaperType.Items.Add(pkSize.PaperName);
}
combPaperType.Text = "A4";
2、打印纸张来源:
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
for (int i = 0; i < ps.PaperSources.Count; i++)
{//这个是获取纸张来源,即打印机中纸张的位置信息等,如纸盒1、纸盒2
combPaperType.Items.Add(ps.PaperSources[i].SourceName);
}
combPaperType.SelectedIndex = 0;
3、打印纸张大小:
设置纸张大小:
System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument();
numPaperHeight.Value = PXToCM(printDoc.PrinterSettings.PaperSizes[combPaperType.SelectedIndex].Height,0);
numPaperWidth.Value = PXToCM(printDoc.PrinterSettings.PaperSizes[combPaperType.SelectedIndex].Width,1);
获取纸张大小
FarPoint.Win.Spread.PrintInfo pi = new FarPoint.Win.Spread.PrintInfo();
pi.PaperSize = new System.Drawing.Printing.PaperSize(combPaperType.Text, CMToPX(iX,0), CMToPX(iY,1));
/// <summary>
/// 像素转化为mm,返回0.1MM单位
/// </summary>
/// <param name="px">像素</param>
/// <param name="x">0:X轴宽度;1:Y轴高度</param>
/// <returns></returns>
private int PXToCM(int px,int x)
{
float dpi = this.CreateGraphics().DpiX;
if (x == 1)
{
dpi = this.CreateGraphics().DpiY;
}
return Convert.ToInt32((px ) * (254 )/ (dpi ));
}
/// <summary>
/// MM转化为像素
/// </summary>
/// <param name="mm">单位:0.1mm</param>
/// <param name="x">0:X轴宽度;1:Y轴高度</param>
/// <returns></returns>
private int CMToPX(int mm, int x)
{
float dpi = this.CreateGraphics().DpiX;
if (x == 1)
{
dpi = this.CreateGraphics().DpiY;
}
return Convert.ToInt32(((mm) * (dpi ) / (254)));
}
纸张大小,不能直接用系统函数得到的值,系统函数得到的值是像素,spread打印时设置PaperSize的值也是像素,但是我们在外部使用时应该显示为MM(毫米);这个时候需要先根据选中的纸张类型通过系统方法得到系统的纸张大小(像素),将该值转换为MM后显示在NumericUpDown控件中,在实际打印或打印预览时,再讲该值转换为像素,添加到spread控件的PaperSize属性中,进行实际打印。(如果不考虑手工修改纸张大小的问题,到时不用来回转换了)
这个就需要进行数值转换。需要按下列公式进行转换:
//比例:一英寸等于25.4mm;(dpi值/比例)*长度=像素
//那么毫米换算成像素的公式为
//水平方向的换算: x * px /25.4
//垂直方向的换算: y * py /25.4
//像素换算为毫米 x * 25.4 / px
转换时出现另外一个问题:float和int数据类型转换时会有差值出现,用Convert.ToInt32()转换好点。(不过不考虑这点差值也可以,仅1、2MM的差距)
C#打印页面的纸张设置问题Spread表格控件的更多相关文章
- 详解如何利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入
我们先来简单了解一下WinForm和FarPoint,WinForm是·Net开发平台中对Windows Form的一种称谓.而FarPoint是一款模拟EXCEL的控件.它可以根据用户的要求实现很大 ...
- 【新功能前瞻】SpreadJS 纯前端表格控件V12.2:打印增强、拖拽填充等六大特性
新版本来袭:葡萄城 SpreadJS 纯前端表格控件的全新版本 V12.2 将于8月正式发布! 作为一款备受华为.招商银行.中国平安.苏宁易购等行业专家和前端开发者认可的纯 JavaScript 电子 ...
- DevExpres表格控件运行时动态设置表格列
本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...
- 在asp.net页面上按回车会触发Imagebutton控件的Click事件
原文:在asp.net页面上按回车会触发Imagebutton控件的Click事件 问题: 用asp.net做的aspx页面,无论是否有文本框.下拉框.复选框……获得焦点,只要在当前页面上按一下回车就 ...
- Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等
目录 一.概述 二.效果展示 三.定制表头 1.重写数据源 2.重写QHeaderView 四.设置属性 五.相关文章 原文链接:Qt实现表格控件-支持多级列表头.多级行表头.单元格合并.字体设置等 ...
- Spread.NET 表格控件 V12.0 Update2 发布更新
Spread.NET表格控件V12.0 Update 2 已经正式发布,本次发布主要针对WinForm平台下客户反馈的产品使用功能进行优化,并修复了已知问题,具体修复情况见下方说明. Spread.N ...
- Spread.NET 表格控件 V12.1 正式发布
Spread.NET 表格控件 V12.1 正式发布 加入动态数组,让公式运算更具效率 Spread.NET 是一个在功能和布局上与 Excel 高度类似的 .NET表格控件,目前已广泛应用于财务.预 ...
- asp.net 简单实现禁用或启用页面中的某一类型的控件
我们在提交一个表单的时候,可能由于网络或服务器的原因,处理很慢,而用户在处理结果出来之前反复点击按钮提交.这样很容易造成不必要的麻烦甚至是错误.说了这么多,其实就是要实现一个禁用某些控件的一种功能.好 ...
- .net mvc页面UI之Jquery博客日历控件
摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果.代码如下: 原文链接转载请注明:http:/ ...
随机推荐
- pthread_cond_wait避免线程空转
多线程对同一块区域进行操作时,需要定义如下两种类型的变量: pthread_mutex_t xxx; pthread_cond_t yyy; pthread_mutex_t类型的变量,即锁,对公共区域 ...
- node中的流程控制中,co,thunkify为什么return callback()可以做到流程控制?
前言 我在学习generator ,yield ,co,thunkify的时候,有许多费解的地方,经过了许多的实践,也慢慢学会用,慢慢的理解,前一阵子有个其他项目的同事过来我们项目组学习node,发现 ...
- datagridview下拉框
下面介绍Winform中DataGridView的DataGridViewComboBoxColumn的使用方法: //首先获取数据源 //自己建立的静态数据源,你也可以从数据库读取 DataTabl ...
- css半透明
filter:alpha(opacity=80); /*支持 IE 浏览器*/-moz-opacity:0.80; /*支持 FireFox 浏览器*/opacity:0.80; /*支持 Chrom ...
- ngx_http_upstream_module模块学习笔记
ngx_http_upstream_module用于将多个服务器定义成服务器组,而由proxy_pass,fastcgi_pass等指令引用 (1)upstream name {...} 定义一个后 ...
- DevExpress之ASPxGridView笔记(1)
1.设置Row(某列)输出格式,例如,在数字前加美元符.每3位以逗号隔开及设置小数点后两位: <dx:GridViewDataTextColumn FieldName="SHOUHUI ...
- LVS+keepalived实现负载均衡
背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要 的浪费?同时实现商业硬件一样的 ...
- JS下高效拼装字符串的几种方法比较与测试代码
在使用Ajax提交信息时,我可能常常需要拼装一些比较大的字符串通过XmlHttp来完成POST提交.尽管提交这样大的信息的做法看起来并不优雅,但有时我们可能不得不面对这样的需求.那么JavaScrip ...
- delphi中表示跳出的有break,continue, exit,abort, halt, runerror
1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或repeat语句中强制退出. 2.continue 用于从For语句,while语句或repeat语句强行结束本次 ...
- [terry笔记]RMAN综合学习之配置
[terry笔记]RMAN综合学习之备份http://www.cnblogs.com/kkterry/p/3308405.html [terry笔记]RMAN综合学习之恢复 http://www.cn ...