private int page;
private int maxpage;
private int b = 0; //导入相关数据时用到,第几笔资料
private int c = 0; //显示共多少页
private void form2_Load(object sender, EventArgs e)
{
foreach (PaperSize ps5 in pdc.PrinterSettings.PaperSizes)
{
if (ps5.PaperName == "A4")
{
printDocument1.DefaultPageSettings.PaperSize = ps5;
}
}
int a = Ds.Tables[0].Rows.Count;//a 原始总共有多少行
if (a % 16 == 0)
c = a / 16; //c 计算共有多少页,每16笔/页
else
c = a / 16 + 1;
printPreviewControl1.Zoom = 1.0;
printPreviewControl1.Document = pdc;
pdc.DocumentName = c.ToString(); //此处显示共多少页
b = 0;
pdc.PrintPage += new PrintPageEventHandler(zdy); //使用自定义 zdy
}
private void toolStripButton7_Click(object sender, EventArgs e)//打印按钮
{
PrintDialog pDlg = new PrintDialog();
pDlg.AllowSomePages = true; //是否启用“页”选项按钮
pDlg.Document = printPreviewControl1.Document;
DialogResult result = pDlg.ShowDialog();
if (result == DialogResult.OK)
{
try
{
if (pDlg.PrinterSettings.PrintRange == PrintRange.SomePages) //在此处判断,是否选择了"页"选项,还是"全部"
{
page = pDlg.Document.PrinterSettings.FromPage;
maxpage = pDlg.Document.PrinterSettings.ToPage;
b = page - 1; //第几笔资料,因16笔/页,16*b
if (maxpage > c)
maxpage = c;
if (page > c)
{
MessageBox.Show("頁碼超過范圍,無法打印");
return;
}
}
else
{
page = 0; //选择打印“全部”时
maxpage = c - 1; //选择打印“全部”时
}
pdc.PrintPage -= new PrintPageEventHandler(zdy); //form_load中有调用此函数,此命令中不要执行此函数
pdc.PrintPage -= new PrintPageEventHandler(PrintPage); //预览文件多次打印,作用是清空归零原内容
pdc.PrintPage += new PrintPageEventHandler(PrintPage);
pDlg.Document.Print();
}
catch
{
MessageBox.Show("无法连接打印机");
return;
}
}
}
private void PrintPage(object sender, PrintPageEventArgs e) //选择页数,自定义函数
{
string[] str = null;
int[] num = null;
Font PrintFont = new Font("标楷体", 13, FontStyle.Bold);
e.Graphics.DrawString("奇利田高尔夫用品(深圳)有限公司", PrintFont, Brushes.DarkGreen, 220, 15, new StringFormat());
PrintFont = new Font("标楷体", 11, FontStyle.Regular);
e.Graphics.DrawString("请 购 单", PrintFont, Brushes.DarkGreen, 310, 35, new StringFormat());
//以下是数据的导入
//物料编码, 物料名称, 单位, 数量, 备注
//增加序号
//以下考虑超过16笔物料的情形
str = new string[4] { "物料编码", "单位", "数量", "备注" };
PrintFont = new Font("Consolas", 9);
num = new int[4] { 47, 343, 376, 435 };
y = 76;
for (int i = 0; i < 16; i++) //16 是因为 16行/页
{
y += 18;
for (int ii = 0; ii < str.Length; ii++)
{
try
{
if (Ds.Tables[0].Rows[b * 16 + i]["物料名称及规格"].ToString().Trim().Length > 21)
{
e.Graphics.DrawString(Ds.Tables[0].Rows[b * 16 + i]["物料名称及规格"].ToString().Trim().Substring(0, 21), PrintFont, Brushes.Black, 120, y, new StringFormat()); //物料名称及规格
}
else
{
e.Graphics.DrawString(Ds.Tables[0].Rows[b * 16 + i]["物料名称及规格"].ToString().Trim(), PrintFont, Brushes.Black, 120, y, new StringFormat()); //物料名称及规格
}
}
catch
{
break;
}
}
}
.......
b += 1;
if(page >= maxpage) //此处是重点,从第page页到maxpage页
e.HasMorePages = false;
else
e.HasMorePages = true;
page++;
}
private int maxpage;
private int b = 0; //导入相关数据时用到,第几笔资料
private int c = 0; //显示共多少页
private void form2_Load(object sender, EventArgs e)
{
foreach (PaperSize ps5 in pdc.PrinterSettings.PaperSizes)
{
if (ps5.PaperName == "A4")
{
printDocument1.DefaultPageSettings.PaperSize = ps5;
}
}
int a = Ds.Tables[0].Rows.Count;//a 原始总共有多少行
if (a % 16 == 0)
c = a / 16; //c 计算共有多少页,每16笔/页
else
c = a / 16 + 1;
printPreviewControl1.Zoom = 1.0;
printPreviewControl1.Document = pdc;
pdc.DocumentName = c.ToString(); //此处显示共多少页
b = 0;
pdc.PrintPage += new PrintPageEventHandler(zdy); //使用自定义 zdy
}
private void toolStripButton7_Click(object sender, EventArgs e)//打印按钮
{
PrintDialog pDlg = new PrintDialog();
pDlg.AllowSomePages = true; //是否启用“页”选项按钮
pDlg.Document = printPreviewControl1.Document;
DialogResult result = pDlg.ShowDialog();
if (result == DialogResult.OK)
{
try
{
if (pDlg.PrinterSettings.PrintRange == PrintRange.SomePages) //在此处判断,是否选择了"页"选项,还是"全部"
{
page = pDlg.Document.PrinterSettings.FromPage;
maxpage = pDlg.Document.PrinterSettings.ToPage;
b = page - 1; //第几笔资料,因16笔/页,16*b
if (maxpage > c)
maxpage = c;
if (page > c)
{
MessageBox.Show("頁碼超過范圍,無法打印");
return;
}
}
else
{
page = 0; //选择打印“全部”时
maxpage = c - 1; //选择打印“全部”时
}
pdc.PrintPage -= new PrintPageEventHandler(zdy); //form_load中有调用此函数,此命令中不要执行此函数
pdc.PrintPage -= new PrintPageEventHandler(PrintPage); //预览文件多次打印,作用是清空归零原内容
pdc.PrintPage += new PrintPageEventHandler(PrintPage);
pDlg.Document.Print();
}
catch
{
MessageBox.Show("无法连接打印机");
return;
}
}
}
private void PrintPage(object sender, PrintPageEventArgs e) //选择页数,自定义函数
{
string[] str = null;
int[] num = null;
Font PrintFont = new Font("标楷体", 13, FontStyle.Bold);
e.Graphics.DrawString("奇利田高尔夫用品(深圳)有限公司", PrintFont, Brushes.DarkGreen, 220, 15, new StringFormat());
PrintFont = new Font("标楷体", 11, FontStyle.Regular);
e.Graphics.DrawString("请 购 单", PrintFont, Brushes.DarkGreen, 310, 35, new StringFormat());
//以下是数据的导入
//物料编码, 物料名称, 单位, 数量, 备注
//增加序号
//以下考虑超过16笔物料的情形
str = new string[4] { "物料编码", "单位", "数量", "备注" };
PrintFont = new Font("Consolas", 9);
num = new int[4] { 47, 343, 376, 435 };
y = 76;
for (int i = 0; i < 16; i++) //16 是因为 16行/页
{
y += 18;
for (int ii = 0; ii < str.Length; ii++)
{
try
{
if (Ds.Tables[0].Rows[b * 16 + i]["物料名称及规格"].ToString().Trim().Length > 21)
{
e.Graphics.DrawString(Ds.Tables[0].Rows[b * 16 + i]["物料名称及规格"].ToString().Trim().Substring(0, 21), PrintFont, Brushes.Black, 120, y, new StringFormat()); //物料名称及规格
}
else
{
e.Graphics.DrawString(Ds.Tables[0].Rows[b * 16 + i]["物料名称及规格"].ToString().Trim(), PrintFont, Brushes.Black, 120, y, new StringFormat()); //物料名称及规格
}
}
catch
{
break;
}
}
}
.......
b += 1;
if(page >= maxpage) //此处是重点,从第page页到maxpage页
e.HasMorePages = false;
else
e.HasMorePages = true;
page++;
}