散尽家财求解!

树影重重 2013-08-20 09:58:42
打印纸宽为60mm,高为40mm,我设置打印区域为240*160,
pd.DefaultPageSettings.PaperSize = new PaperSize("Custum", 240, 160);
经过打印试验,搞好将打印纸铺满,于是我计算打印机的分辨率:240/(60/25.4)=101.6 DPI,
但我在代码中获取打印机分辨却为203!
e.Graphics.DpiX .ToString ()的值为"203"!
为什么相差了一半?
这个问题拖了很久都未解决,也不知道哪个地方出现了错误,求指点呀……
...全文
470 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
树影重重 2013-08-22
  • 打赏
  • 举报
回复
引用 14 楼 DENQH 的回复:
RectangleF drawRect = new RectangleF(x, y, w, h) 就是你的打印区域,你所有的内容都在距形内,自己动换行。假如你设 RectangleF drawRect = new RectangleF(0, 0, 100, 50) 你的打印内容会从左上角坐标(0,0)位置开始打印,宽度为100,高度为50范围内
多谢你的回答哦,原来PaperSize("Custum", 236, 157)和 e.Graphics.DrawString(drawString, drawFont, drawBrush, x, y);,x和y的单位是百分之一英寸!我从一开始还以为单位是像素!怪不得你们说跟DPI无关,好,结贴给分,再次谢过!
树影重重 2013-08-21
  • 打赏
  • 举报
回复
引用 17 楼 caozhy 的回复:
没有上下文,也没办法试验。 只能给你加100分吧。
感谢老版
树影重重 2013-08-21
  • 打赏
  • 举报
回复
引用 16 楼 uuu456927 的回复:
可以在网上下载一个打印控件。
感谢老版
游戏人间 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 u010484683 的回复:
我最高只能设置100分了,如果可以追加的就尽可能追加!!
e.Graphics.PageUnit = GraphicsUnit.Millimeter 设定这个就可以用mm了。 什么分辨率 DPI 都是浮云 。都不需要理它了。
游戏人间 2013-08-21
  • 打赏
  • 举报
回复
这个问题已帮你回复了。 这个东西都不需要管。 用下面的代码即OK 关键代码。 e.Graphics.PageUnit = GraphicsUnit.Millimeter 测量值 往DrawString里写就行了。 PaperSize 用的是英尺 一般我们都是用的是毫米 Millimeter所以需要转换一下纸大小。 width为mm public int ConvertToInch(float num) { int size = Convert.ToInt32((num / 25.4) * 100.0); return size; } printDocument1.DefaultPageSettings.PaperSize = new PaperSize("PrintPage", ConvertToInch(60f), ConvertToInch(40f)); 好像就可以了。你自己查一下
PaulyJiang 2013-08-21
  • 打赏
  • 举报
回复
打印机的分辨率应该和你屏幕的分辨率是一个道理,和你的算法无关,只是会影响到打印出来的东西的清晰度
DENQH 2013-08-20
  • 打赏
  • 举报
回复
打印机分辨率和你的计算没有关系
人生导师 2013-08-20
  • 打赏
  • 举报
回复
打印机的分辨率只的最大的打印点数,你的文档不需要打印那么多点数,所以计算出来的结果肯定不等于打印机的最大值
hr_3773 2013-08-20
  • 打赏
  • 举报
回复
看到打印进就头疼
jrl5365 2013-08-20
  • 打赏
  • 举报
回复
打印机没有搞过,帮顶一下,等高手来回答了!
树影重重 2013-08-20
  • 打赏
  • 举报
回复
我最高只能设置100分了,如果可以追加的就尽可能追加!!
threenewbee 2013-08-20
  • 打赏
  • 举报
回复
没有上下文,也没办法试验。 只能给你加100分吧。
uuu456927 2013-08-20
  • 打赏
  • 举报
回复
可以在网上下载一个打印控件。
DENQH 2013-08-20
  • 打赏
  • 举报
回复
在上面的区域内你打印多少个墨点,是你的打印机分辨率问题,和你的计算有么关系?
DENQH 2013-08-20
  • 打赏
  • 举报
回复
RectangleF drawRect = new RectangleF(x, y, w, h) 就是你的打印区域,你所有的内容都在距形内,自己动换行。假如你设 RectangleF drawRect = new RectangleF(0, 0, 100, 50) 你的打印内容会从左上角坐标(0,0)位置开始打印,宽度为100,高度为50范围内
DENQH 2013-08-20
  • 打赏
  • 举报
回复
引用 12 楼 u010484683 的回复:
[quote=引用 7 楼 DENQH 的回复:] 打印机分辨率和你的计算没有关系
e.Graphics.DrawString(Lab_ID.Text, new Font(new FontFamily("黑体"), 16, FontStyle.Bold), System.Drawing.Brushes.Black, 10, 15);
我的打印定位都是根据像素定位的,我理解是一个像素对应一个打印机墨点,所以打印出来的位置应该和打印机的DPI有关系吧?有没有按长度定位的方法呢?[/quote] 打印机墨点大小是打印机硬件的问题,你计算的是按纸张来计算,你关系? StringFormat StrF = new StringFormat();//初始化结齐方式 StrF.Alignment = StringAlignment.Near; //设置水平对齐 StrF.LineAlignment = StringAlignment.Center;//设置垂直对齐 RectangleF drawRect = new RectangleF(x, y, w, h);//x为水平坐标,y为垂直坐标,w为宽度,h为高度.单位为1/100英寸 Pen mypen = new Pen(Color.Black, 4);//设置画笔 e.Graphics.DrawString("这是打印内容", new Font("宋体", 11), mypen.Brush, drawRect, MstrF);
树影重重 2013-08-20
  • 打赏
  • 举报
回复
引用 7 楼 DENQH 的回复:
打印机分辨率和你的计算没有关系
e.Graphics.DrawString(Lab_ID.Text, new Font(new FontFamily("黑体"), 16, FontStyle.Bold), System.Drawing.Brushes.Black, 10, 15);
我的打印定位都是根据像素定位的,我理解是一个像素对应一个打印机墨点,所以打印出来的位置应该和打印机的DPI有关系吧?有没有按长度定位的方法呢?
树影重重 2013-08-20
  • 打赏
  • 举报
回复
引用 6 楼 lizhi3186575 的回复:
打印机的分辨率只的最大的打印点数,你的文档不需要打印那么多点数,所以计算出来的结果肯定不等于打印机的最大值
string st=pd.PrinterSettings.DefaultPageSettings.PrinterResolution.X.ToString (); 这句话获取到的值是打印机最大的分辨率吗?那么怎样获取打印机的实际分辨率呢?
xixihaha_2011_098 2013-08-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/u011447152/article/details/9394205 这里demo中有一个打印控件,你可以试试
不得不戒 2013-08-20
  • 打赏
  • 举报
回复
没搞过打印机

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧