今天遇到一个需求.程序控制打印.但进纸需要是横行进纸.
就是说呢文档是竖向的.正常竖向放纸就能出结果.但之前程序设计.横行的输出是当成竖向打印,就是把纸横行进纸.文档是宽>高.好了现在正常竖向文档,宽<高.横行进纸就变成打印区域不正确了.
解决方案很简单.就是文档转成横向打印
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)