这段时间学习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表格控件的更多相关文章

  1. 详解如何利用FarPoint Spread表格控件来构造Winform的Excel表格界面输入

    我们先来简单了解一下WinForm和FarPoint,WinForm是·Net开发平台中对Windows Form的一种称谓.而FarPoint是一款模拟EXCEL的控件.它可以根据用户的要求实现很大 ...

  2. 【新功能前瞻】SpreadJS 纯前端表格控件V12.2:打印增强、拖拽填充等六大特性

    新版本来袭:葡萄城 SpreadJS 纯前端表格控件的全新版本 V12.2 将于8月正式发布! 作为一款备受华为.招商银行.中国平安.苏宁易购等行业专家和前端开发者认可的纯 JavaScript 电子 ...

  3. DevExpres表格控件运行时动态设置表格列

    本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...

  4. 在asp.net页面上按回车会触发Imagebutton控件的Click事件

    原文:在asp.net页面上按回车会触发Imagebutton控件的Click事件 问题: 用asp.net做的aspx页面,无论是否有文本框.下拉框.复选框……获得焦点,只要在当前页面上按一下回车就 ...

  5. Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等

    目录 一.概述 二.效果展示 三.定制表头 1.重写数据源 2.重写QHeaderView 四.设置属性 五.相关文章 原文链接:Qt实现表格控件-支持多级列表头.多级行表头.单元格合并.字体设置等 ...

  6. Spread.NET 表格控件 V12.0 Update2 发布更新

    Spread.NET表格控件V12.0 Update 2 已经正式发布,本次发布主要针对WinForm平台下客户反馈的产品使用功能进行优化,并修复了已知问题,具体修复情况见下方说明. Spread.N ...

  7. Spread.NET 表格控件 V12.1 正式发布

    Spread.NET 表格控件 V12.1 正式发布 加入动态数组,让公式运算更具效率 Spread.NET 是一个在功能和布局上与 Excel 高度类似的 .NET表格控件,目前已广泛应用于财务.预 ...

  8. asp.net 简单实现禁用或启用页面中的某一类型的控件

    我们在提交一个表单的时候,可能由于网络或服务器的原因,处理很慢,而用户在处理结果出来之前反复点击按钮提交.这样很容易造成不必要的麻烦甚至是错误.说了这么多,其实就是要实现一个禁用某些控件的一种功能.好 ...

  9. .net mvc页面UI之Jquery博客日历控件

    摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果.代码如下: 原文链接转载请注明:http:/ ...

随机推荐

  1. iptables用法

    iptables -t nat -A PREROUTING -s 10.10.10.0/24 -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128 ...

  2. JSON,JSONP

    http://blog.csdn.net/huaishuming/article/details/40046729 说明: 在做2个系统间传值时出现: 已阻止交叉源请求:同源策略不允许读取 http: ...

  3. 定时重启Apache与MySQL方法

    可以定时重启apache服务器等.让网站运行的效果更快. 采用at命令添加计划任务. 有关使用语法可以到window->“开始”->运行“cmd”->执行命令“at /”,这样界面中 ...

  4. PHP常用函数和常见疑难问题解答

    PHP常用库函数介绍 一.PHP字符串操作常用函数 1.确定字符串长度  int strlen(string str) 2.比较两个字符串 a. strcmp函数对两个字符串进行二进制安全的比较,并区 ...

  5. [.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField)

    [.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField) http://www.dotblogs.c ...

  6. 在openSUSE13.2上gem install rails -v 4.1成功,但是之后不存在rails命令解决

    解决方案为,不要用sudo gem install就好了,卧槽

  7. C开发 中原子性操作 , 除了快什么都不剩下了

    题外话 今天,听歌曲听到一首缅怀迈克尔·杰克逊的歌曲 如下: http://music.163.com/#/song?id=1696048  Breaking News 每次听迈克尔 音乐,特别有战斗 ...

  8. DB2物化表

    DB2物化查询表(MQT)是DB2数据库中一类特殊的表 物化表和视图的区别 物化表是一个查询结果集,视图是一个SQL语句. 以下是一个简单例子(说明物化表) 1.创建表,插入测试数据 ----创建表 ...

  9. Objective-C编码规范

    参考 http://www.csdn.net/article/2015-06-01/2824818-objective-c-style-guide/1 介绍 我们制定Objective-C编码规范的原 ...

  10. jquery.form的使用

    插件API http://malsup.com/jquery/form/#api Jquery.form.js是支持文件异步上传的插件,jq插件自然基本前提当然是要引用Jquery.js 1.0 基本 ...