c#中实现打印指定页(特定页), 附原代码

5 篇文章 0 订阅
2 篇文章 0 订阅
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++;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值