C# 打印之横行进纸

今天遇到一个需求.程序控制打印.但进纸需要是横行进纸.

就是说呢文档是竖向的.正常竖向放纸就能出结果.但之前程序设计.横行的输出是当成竖向打印,就是把纸横行进纸.文档是宽>高.好了现在正常竖向文档,宽<高.横行进纸就变成打印区域不正确了.

解决方案很简单.就是文档转成横向打印

printDocument1.DefaultPageSettings.Landscape = true;

然后把图像也转90度

e.Graphics.RotateTransform(-90.0F);
e.Graphics.TranslateTransform(0 , e.PageBounds.Height , MatrixOrder.Append);


第一句是左转90度

第二句重设坐标.左转设Y,右转设X


好了.如果行普通的情况下就可以用了.

但有时候.需引用一下e.PageBounds 或 e.MarginBounds 进行布局控制的时候.就有问题了.因为图像转了.这两个值都没变. 更悲剧的是这两个值正常不能改,万恶的OO,

 最后只能偷渡了

 Rectangle mbn = new Rectangle(e.MarginBounds.Top, e.MarginBounds .Left , e.MarginBounds.Height, e.MarginBounds.Width);
 FieldInfo fi = e.GetType().GetField("marginBounds",BindingFlags.Instance|BindingFlags.NonPublic);
            
 fi.SetValue(e, mbn);

 用反射把值给改了,注意的是转换的(x,y)值,e.PageBounds 就不用了,是不用关注(x,y)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值