如何循环打印多个图形objects?

How to print many graphical objects in a loop?

我要打印很多条码。如果我使用此代码块打印单个条形码,我该如何循环执行此操作:

    p.PrintPage += delegate(object sender1, PrintPageEventArgs e1) {
                    e1.Graphics.DrawString("TITLE", new Font("Univers 55", 6), new SolidBrush(Color.Black), new RectangleF(titleX, titleY, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));
                    e1.Graphics.DrawString(s, new Font("Barcode", 24), new SolidBrush(Color.Black), new RectangleF(codeX, codeY, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));
                    e1.Graphics.DrawString(test, new Font("Univers 55", 8), new SolidBrush(Color.Black), new RectangleF(numberX, numberY, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));

};

titleX, titleY, codeX, codeY, numberX, numberY 是存储每个条码object三部分位置的变量(标题,条纹和数字), 他们应该循环改变自己。

如果您想在一个页面上打印多个条形码,没有什么可以阻止您将它们放在一个循环中。不过,我会将代码移到一个单独的方法中,而不是 "inline delegate",以保持它的整洁:

p.PrintPage += PrintPage;
...
private void PrintPage(object sender, PrintPageEventArgs e)
{
    for (int i = 0; i < numberOfBarcodes; i++)
    {
        int titleY = i * titleYdistance + titleYoffset;
        // etc.

        e.Graphics.DrawString(...);
        // etc.
    }
}

如果您的内容超过一个页面所能容纳的内容,PrintPageEventArgs class 有一个 HasMorePages 属性。只要你一直把这个属性设置为true,事件方法就会被调用,允许你为每一页打印不同的条码。