printDocument 打印图片分辨率问题

狼王_ 2018-11-30 11:47:48
我开发的是 Windows 桌面程序,利用程序生成一张jpg 图片,然后利用 printDocument 类将图片打印出来,生成的图片是1000*1800的,图片很清晰,但是调用 printDocument 类打印出来以后就有好多毛边、不清晰。直接在生成的图片上点击打印,打印出来的图片就很清晰,哪位知道怎么设置 printDocument 打印时的像素啊?我现在的实现是生成图片以后直接调用printDocument 打印
下面是我打印的代码:

/// <summary>
/// 打印LD面单指定图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void printDocument_PrintLDPage(object sender, PrintPageEventArgs e)
{
try
{
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
Image image = Image.FromFile(Application.StartupPath + "\\inc\\codePrintLD.jpg");
e.Graphics.DrawImage(image, new Rectangle(0, 0, 100, 180));
image.Dispose();
}
catch
{
}
}

/// <summary>
/// 打印立达面单
/// </summary>
/// <param name="printModel"></param>
/// <returns></returns>
public bool printLDImg(printInfo printModel, string expressId) {
this.printDocument = new PrintDocument();
this.printDocument.PrintPage += new PrintPageEventHandler(this.printDocument_PrintLDPage);
try
{
if (!this.MakePrintLDImg(printModel,expressId)) // 生成需要打印的 codePrintLD.jpg
{
return false;
}
// TODO: 临时注释,LD面单打印功能,等开发完成后放开
PrintController controller = new StandardPrintController();
this.printDocument.PrintController = controller;
this.printDocument.Print();
return true;
}
catch
{
this.printDocument.PrintController.OnEndPrint(this.printDocument, new PrintEventArgs());
return false;
}

}
...全文
1046 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Rectangle(0, 0, 100, 180) 这么一个小图片,你要打印到精度比屏幕高很多的打印机上,还没有毛边?
desperaso 2018-12-04
  • 打赏
  • 举报
回复
打印必须设置dpi,例如为96,
SetResolution(96,96)
换算像素为(int)Math.Floor(int.Parse(宽度.Text) * 3.779527559055118)
如需其他dpi,要换算打印像素,可以百度下计算。
可以参考下:
https://www.cnblogs.com/qiaoke/p/10062749.html
xuzuning 2018-11-30
  • 打赏
  • 举报
回复
你的打印设置是什么样的?
屏幕(dpi96)上 1000*1800 的图片到打印机(dpi300)上就像邮票大小了,
既然你还能看到锯齿显然是令打印机做了放大处理
而这一工作本该是由你用代码完成的
xuzuning 2018-11-30
  • 打赏
  • 举报
回复
printDocument.Print() 会触发 printDocument 的 PrintPage 事件
你需要订阅该事件,并在其中进行绘制
指定绘图参数
var g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //抗锯齿
g.InterpolationMode = InterpolationMode.HighQualityBicubic; //高质量的双三次插值
g.CompositingQuality = CompositingQuality.HighQuality; //高质量、低速度复合

用 DrawImage(Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit) 进行绘制

原图
放大5倍
狼王_ 2018-11-30
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
你的打印设置是什么样的? 屏幕(dpi96)上 1000*1800 的图片到打印机(dpi300)上就像邮票大小了, 既然你还能看到锯齿显然是令打印机做了放大处理 而这一工作本该是由你用代码完成的
代码怎么处理啊?求解。。。。

111,094

社区成员

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

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

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