首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

printdocument打印一寸图片比例有关问题

2014-01-08 
printdocument打印一寸图片比例问题我想在A4纸上打印多张一寸图片,采用printdocumnet,但是如果按原始比例

printdocument打印一寸图片比例问题
我想在A4纸上打印多张一寸图片,采用printdocumnet,但是如果按原始比例打印会出现如下情况:
1、图片可正常显示,但是图片之间的间距不能用像素定位,因为有人说不同的电脑像素表示的大小 是不一样的,这样就会出现我电脑上正常,别 人可能不正常,采用的方法是drawimageunscale()
2、如果采用方法drawimage()又会不按比例打印,而且大的离谱,一行只能放两张半,请问应该如何操作才能正常打印图片printdocument打印一寸图片比例有关问题这是图像比例正常,但是间距不正常的情况 ,下一张是图像不正常的情况
printdocument打印一寸图片比例有关问题
以下是主要代码 :
      public void bazxcy_printEvent()
        {
            //PaperSize ps = new PaperSize("A4", 2479, 3508);
           // pdDocument.DefaultPageSettings.PaperSize = ps;
            PaperSize ps = new PaperSize("Your Paper Name", 100, 70);
            ps.RawKind = 9; 
            pdDocument.DefaultPageSettings.PaperSize = ps;
            //订阅EndPrint事件,释放资源
            pdDocument.PrintPage += new PrintPageEventHandler(OnPrintPage);
            //订阅Print打印事件,该方法必须放在订阅打印事件的最后
            StartPrint();
        }

private int j = 0;//为for循环定义一个初始化变量,可以在return后重新走循环下一个值。
        /// <summary>
        /// 2、得到打印内容-每个打印任务只调用OnBeginPrint()一次。
        /// 3、并判断是否绘制多个打印界面
        /// printDocument的PrintPage事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnPrintPage(object sender, PrintPageEventArgs e)
        {
            pageCount = dt.Rows.Count/16;//定义页数
            for (int i = j*16; i < dt.Rows.Count; i++)
            {
 
                //打印内容加载
                FileStream fs = new FileStream(dt.Rows[i]["ImageName"].ToString(), FileMode.Open, FileAccess.Read); 
                image=Image.FromStream(fs);
                //以下为绘制打印界面
                int leftMargin = Convert.ToInt32((e.MarginBounds.Left) * 3 / 4);  //左边距
                int topMargin = Convert.ToInt32(e.MarginBounds.Top * 2 / 3);    //顶边距
                int x = leftMargin + i*image.Width;
                int y = topMargin;
                //System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, e.MarginBounds.Width, e.MarginBounds.Height);
                System.Drawing.Rectangle destRect = new System.Drawing.Rectangle(x, y, image.Width, image.Height);
                pdDocument.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.CurrentPage;// pageCount;
                //MessageBox.Show(e.Graphics.DpiX + "    " + e.Graphics.DpiY);
                //e.Graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel);
                e.Graphics.DrawImageUnscaled(image, 100*i, 10);
                //添加新页
                currentPageIndex++;      //加新页
                if (currentPageIndex < pageCount)


                {
                    e.HasMorePages = true;  //如果小于定义页 那么增加新的页数
                    j = j+1;
                    return;
                }
                else
                {
                    e.HasMorePages = false; //停止增加新的页数
                    currentPageIndex = 0;
                }
                
            }
            dt.Dispose();

        }
[解决办法]
又是你哈。DrawPicture有重载,有个重载是定义打印区域的.

热点排行