1.在界面中使用自带的控件printDocument

2.将以下函数绑定到控件的PrintPage事件

  private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
try
{
if (CurrtPrintImage != null)//此处是打印一个图像,CurrtPrintImage是Image类型
{
float x;
float y;
float width;
float height;
switch (comboBox1.Text)//此处此页共可打印多少个图像
{
case "8"://总个数为8
string location = comboBox2.Text;//此处是将当前图像打印到此页的哪个位置。
if (Convert.ToInt32(location) % 2 != 0) //奇数1,3,5,7
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 4.0f - printDocument1.DefaultPageSettings.PaperSize.Height / 8 + 20;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 4.0f) * (Convert.ToInt32(location) / 2);
}
else //偶数2,4,6,8
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 4.0f * 3 - printDocument1.DefaultPageSettings.PaperSize.Height / 8 - 20;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 4.0f) * (Convert.ToInt32(location) / 2 - 1);
}
width = printDocument1.DefaultPageSettings.PaperSize.Height / 4.0f;
height = printDocument1.DefaultPageSettings.PaperSize.Height / 4.0f;
e.Graphics.DrawImage(CurrtPrintImage, x, y, width, height);
break;
case "6":
location = comboBox2.Text;
if (Convert.ToInt32(location) % 2 != 0) //奇数1,3,5
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 4f - printDocument1.DefaultPageSettings.PaperSize.Height / 8 - 40;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 3f) * (Convert.ToInt32(location) / 2);
}
else //偶数2,4,6
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 4f * 3 - printDocument1.DefaultPageSettings.PaperSize.Height / 8 - 55;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 3f) * (Convert.ToInt32(location) / 2 - 1);
}
width = printDocument1.DefaultPageSettings.PaperSize.Height / 3f;
height = printDocument1.DefaultPageSettings.PaperSize.Height / 3f;
e.Graphics.DrawImage(CurrtPrintImage, x, y, width, height);
break;
case "4":
location = comboBox2.Text;
if (Convert.ToInt32(location) % 2 != 0) //奇数1,3
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 4f - printDocument1.DefaultPageSettings.PaperSize.Height / 8 - 70;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 2f) * (Convert.ToInt32(location) / 2) + 70 + ((location == "1" || location == "2") ? 30 : -30);
}
else //偶数2,4
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 4f * 3 - printDocument1.DefaultPageSettings.PaperSize.Height / 8 - 70;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 2f) * (Convert.ToInt32(location) / 2 - 1) + 70 + ((location == "1" || location == "2") ? 30 : -30);
}
width = printDocument1.DefaultPageSettings.PaperSize.Height / 2.7f;
height = printDocument1.DefaultPageSettings.PaperSize.Height / 2.7f;
e.Graphics.DrawImage(CurrtPrintImage, x, y, width, height);
break;
case "2":
location = comboBox2.Text;
if (Convert.ToInt32(location) % 2 != 0) //奇数1
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 2f - printDocument1.DefaultPageSettings.PaperSize.Height / 4;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 2f) * (Convert.ToInt32(location) - 1);
}
else //偶数2
{
x = printDocument1.DefaultPageSettings.PaperSize.Width / 2f - printDocument1.DefaultPageSettings.PaperSize.Height / 4;
y = (printDocument1.DefaultPageSettings.PaperSize.Height / 2f) * (Convert.ToInt32(location) - 1);
}
width = printDocument1.DefaultPageSettings.PaperSize.Height / 2f;
height = printDocument1.DefaultPageSettings.PaperSize.Height / 2f;
e.Graphics.DrawImage(CurrtPrintImage, x, y, width, height);
break;
}
}
}
catch (Exception exception)
{
}
}
 private void Print(){
  if (comboBox1.SelectedIndex < 0 || comboBox2.SelectedIndex < 0)
{
MessageBox.Show("请选择打印的版数以及位置");
return;
}
printDocument1.DocumentName = "示例图像";
printDocument1.PrinterSettings.PrinterName = "示例打印机名称";
foreach (System.Drawing.Printing.PaperSize item in printDocument1.PrinterSettings.PaperSizes)
{
if (item.PaperName=="A4")
{
printDocument1.DefaultPageSettings.PaperSize = item;
printDocument1.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0); //设置边距
break;
}
}
printDocument1.Print();//开始打印
}

c# 使用打印机打印并设置打印位置及宽高的更多相关文章

  1. android PercentRelativeLayout 支持百分比来设置控件的宽高

    Android 最终官方支持按百分比来设置控件的宽高了. 我们先来看看效果:       看一下布局: PercentRelativeLayout <android.support.percen ...

  2. 如何设置a标签的宽高,如何使a标签的文字垂直居中

    通常情况下a标签是没有宽高的,设置 width 和 height 没有作用. 若要使用 width 和 height,需要把a标签转为块级元素,即:display:block|inline-block ...

  3. 如何设置html中img宽高相同-css

    最近项目中有一个问题,做一个响应式的盒子,随着屏幕的变化, 宽高一直保持相等,之前一直使用js动态设置,获取盒子的宽度来设置盒子高度. 但是加载时样式显示不是很好,后来直接用css实现. html部分 ...

  4. 为什么canvas宽高要设置在标签内>>宽高设置在style和设置在canvas的区别

    一直很困惑为什么canvas标签和其他标签不一样,宽高需要设置在canvas标签里,设置在style里就会有问题. 纯粹个人理解,有错误欢迎指出. > 结论写在头 设置在style里有问题其实是 ...

  5. (转)详解JS位置、宽高属性之一:offset系列

    很多初学者对于JavaScript中的offset.scroll.client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确. 图一 不知道 ...

  6. 设置Editext的光标宽高与颜色

    在Editext的布局属性上加上 android:textCursorDrawable="@drawable/cursor_shape" cursor_shape如下: <? ...

  7. JavaScript(获取或设置html元素的宽,高,坐标),确定和判断鼠标是否在元素内部,二级导航菜单鼠标离开样式问题解决

    设置: document.getElementById('id').style.width=value    document.getElementById('id').style.height=va ...

  8. 学习微信小程序之css12设置盒子内容的宽高

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Android 终于官方支持按百分比来设置控件的宽高了

    dependencies { compile 'com.android.support:percent:22.2.0' } 支持布局 PercentRelativeLayout <android ...

  10. LODOP纸张/打印机/份数/打印方向/双面打印 简短问答

    纸张#如何设置纸张纸张设置,参考样例5 http://www.c-lodop.com/demolist/PrintSample5.html纸张的一些优先级 http://www.c-lodop.com ...

随机推荐

  1. 一文了解 io.Copy 函数

    1. 引言 io.Copy 函数是一个非常好用的函数,能够非常方便得将数据进行拷贝.本文我们将从io.Copy 函数的基本定义出发,讲述其基本使用和实现原理,以及一些注意事项,基于此完成对io.Cop ...

  2. [Java基础] ==和equals比较

    ==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址 equals:object中默认也是采用==比较,通常会重写 Object public boolean equals(Obj ...

  3. 2022级HAUT新生周赛题解汇总

    2022级HAUT新生周赛(零)题解@:前六题题解  G题比赛模拟题目题解 2022级HAUT新生周赛(一)题解@卞子骏:题解 2022级HAUT新生周赛(二)题解@武其轩:题解  题解2 2022级 ...

  4. 2023年郑州轻工业大学校赛邀请赛zzh

    第一次参加线下赛体验很好,面包和酸奶很好吃.ABL三题难度超出我们的能力范围,没能写出来,C题在读完题后,我们三个简单交流了一下,确定思路后我写的代码,一次AC,很顺利.D题简单的01背包,但我在写代 ...

  5. Linux下Oracle单实例配置多监听

    Oracle单实例配置多监听 一.前言 有时候我们项目中需要使用Oracle数据库,同时要需要不同的数据源,而Oracle不像Mysql那样直接建个库即可,Oracle是以账号为单位,可以理解为一个账 ...

  6. 一个从文件中过滤指定字符串的python3脚本

    from tabulate import tabulate plugin = [ ... ] plugin_v1 = [ ... ] filepath = "E:\\PycharmProje ...

  7. EchoMode的显示效果

    1 import sys 2 from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget, QFormLayout 3 4 class l ...

  8. Spring Boot 最佳实践

    本文翻译自国外论坛 medium,原文地址:https://medium.com/@raviyasas/spring-boot-best-practices-for-developers-3f3bdf ...

  9. [loki]轻量级日志聚合系统loki快速入门

    前言 简述:loki是由grafana开源的日志聚合系统,相较于ELK.EFK更轻量. loki特性: 不对日志进行全文索引.通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成 ...

  10. MongoDB索引操作和执行计划Explain()详解

    一.索引操作 说明,下面的内容举例时,以"dailyTrip"collection为例. 字段内容如下: { "_id" : ObjectId("63 ...