Бесконечный вывод листов в печать
На форме Winforms есть 4 spinedit. Первый отвечает за стартовое значение первого штрихкода, второй за количество штрихкодов на странице, третий должен отвечать за количество листов передающихся на печать, четвертый отвечает за количетво повторений одного штрихкода. Проблема в том что 3 spinedit работает некорректно. Если в нем стоит 1 то все нормально, одна страница и передается на печать, а если 2 и более начинается бесконечная подгрузка листов в предварительную печать. Мне нужно сделать так чтобы количество листов передающиеся на печать зависело от числа который находится в spinedit3:
private void PrintDocument_PrintPage2(object sender, PrintPageEventArgs e)
{
Graphics g = e.Graphics;
Font font = new Font("Arial", 12);
int startX = 10;
int startY = 10;
int x = startX;
int y = startY;
int numPerRow = 7; // кол-во кодов в строке
int rowsPerPage = 28; // кол-во строк на листе
string todayString = DateTime.Today.ToString("ddMMyyyy");
long startValue = long.Parse(todayString + spinEdit1.Value.ToString().PadLeft(4, '0'));
int beginOfSeries = (int)spinEdit1.Value; // начало серии
int lengthOfSeries = (int)spinEdit2.Value; // длина серии
int numOfSheetCopies = (int)spinEdit3.Value; // кол-во страниц
int numOfSameBarcodes = (int)spinEdit4.Value; // кол-во повторов ряда
Pen pen = new Pen(Brushes.Black, 2)
{
DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
};
int currentPage = 1;
for (int i = 0; i < numOfSheetCopies; i++) // цикл по страницам
{
int count = 0;
for (int j = 0; j < numOfSameBarcodes; j++) // цикл повторов серий
{
for (int k = 0; k < lengthOfSeries; k++) // цикл серии
{
if (count < numPerRow * rowsPerPage) // вмещается на странице?
{
string barcodeData = $"{DateTime.Today:ddMMyyyy}{beginOfSeries + k:0000}";
BarcodeWriter writer = new BarcodeWriter
{
Format = BarcodeFormat.CODE_128,
Options = new ZXing.Common.EncodingOptions { Width = 137, Height = 43 }
};
Bitmap barcodeImage = writer.Write(barcodeData);
g.DrawRectangle(pen, x, y, 133, 40);
int barcodeOffset = 4;
g.DrawImage(barcodeImage, x, y + barcodeOffset);
count++;
x += 110;
if (count % numPerRow == 0)
{
x = startX;
y += 40;
}
}
}
}
if (i < numOfSheetCopies - 1) // проверка на наличие еще страниц
{
e.HasMorePages = true; // переход на следующую страницу
currentPage++;
y = startY;
return;
}
else
{
e.HasMorePages = false; // последняя страница
currentPage++;
y = startY;
}
}
}
Ответы (1 шт):
Вы увеличиваете счетчик currentPage
, но нигде его не используете
И в блоке
if (i < numOfSheetCopies - 1) // проверка на наличие еще страниц
{
e.HasMorePages = true; // переход на следующую страницу
currentPage++;
y = startY;
return;
}
что должно проверять условие? Количество оставшихся страниц для печати? Сейчас оно проверяет все ли копии текущей страницы напечатаны