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:/ ...
随机推荐
- sql server2005 实现读写分离
下面我们重点介绍Sql Server 2005是如何实现负载均衡的. Sql Server 2005的新特性 端到端拓扑的事务性复制 SQL Server 2005对端到端(P2P)拓扑结构上事务性的 ...
- iOS Architecture Patterns
By Bohdan Orlov on 21 Mar 2016 - 0 Comments iOS FYI: Slides from my presentation at NSLondon are ava ...
- C# app.config文件配置和修改
很多时候我们需要对系统的.config文件进度读写操作,例如:系统初始化的参数的更改.系统参数的改变都需要更新到配置文件. 首先我们有必要了解一下app.config.exe.config和vshos ...
- php验证手机号码
大家都应该有这个常识,中国的手机号码都是以数字“1”开头,然后利用“0~9”10个数字组成的11位数字组合,那么我们的验证规则肯定要根据这个思路来写. 根据上面的简单思路,我们便可以写下以下的验证代码 ...
- VPS centos 6 安装图形界面
在某种场合之下,我们使用的Linux还是要选择安装桌面环境的,所以在这里介绍一下如何给没有安装桌面环境的系统安装桌面环境.以Centos 6.5 为例演示一下如何安装桌面环境. 工具/原料 Linux ...
- 第五节:AppDomain FirstChance异常通知
每个AppDomain都可关联一组回调方法:CLR开始查找AppDomain中的catch块时,这些回调方法就会得到调用.这些方法可执行日志记录操作.除此之外,宿主可利用这个机制监视AppDomain ...
- python二叉树递归算法之后序遍历,前序遍历,中序遍历
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2016-11-18 08:53:45 # @Author : why_not_try ...
- DWR在Spring中应用
这里以传递一个对象为例,来说明dwr在Spring中是怎么配置的. JSP页面: <script src='dwr/interface/instructionOuterService.js'&g ...
- Android:简单实现ViewPager+TabHost+TabWidget实现导航栏导航和滑动切换
viewPager是v4包里的一个组件,可以实现滑动显示多个界面. android也为viewPager提供了一个adapter,此adapter最少要重写4个方法: public int getCo ...
- hdu 1196 Lowest Bit
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1196 Lowest Bit Description Given an positive integer ...