Печать растровых изображений в C # - проблема hasmorepages - PullRequest
0 голосов
/ 23 апреля 2011

прямо сейчас, я пытаюсь напечатать несколько растровых изображений, которые я сохраняю в форме.У меня есть 3, которые я генерирую, но когда я их печатаю, он печатает только 1.

Это мой код печати. ​​

private void PrintDoc_PrintPage(Object sender, PrintPageEventArgs e)
{
int bound1 = 0;
int bound2 = 0;
float boundsH = e.Graphics.VisibleClipBounds.Height;
float boundsW = e.Graphics.VisibleClipBounds.Width;
float boundsS = e.PageBounds.Height;
float boundsE = e.PageBounds.Width;
float CBound1 = boundsS - boundsH;
float CBound2 = boundsE - boundsW;
float boundHD = (boundsH - CBound1);
float boundHW = (boundsW - CBound2);
int bounds1 = Convert.ToInt32(boundHD);
int bounds2 = Convert.ToInt32(boundHW);
int check1 = ((bounds1 * 100) / OverPanel.Height);
int check2 = ((bounds2 * 100) / OverPanel.Width);
if (check1 < check2)
{
bound1 = (OverPanel.Height * check1) / 100;
bound2 = (OverPanel.Width * check1) / 100;
}
else
{
bound1 = (OverPanel.Height * check2) / 100;
bound2 = (OverPanel.Width * check2) / 100;
}
e.Graphics.DrawImage(AllPrints[0], 0, 0, bound2, bound1);
e.HasMorePages = true;
e.Graphics.DrawImage(AllPrints[1], 0, 0, bound2, bound1);
e.HasMorePages = true;
e.Graphics.DrawImage(AllPrints[2], 0, 0, bound2, bound1);
e.HasMorePages = false;
AllPrints[0].Save("C:/Test/1.bmp");
AllPrints[1].Save("C:/Test/2.bmp");
AllPrints[2].Save("C:/Test/3.bmp");[/CODE]

This code draws 1, 2 and 3 on the page for me to test my prints with.

[CODE]private void button1_Click(object sender, EventArgs e)
{
for (Locc = 1; Locc <= 3; Locc++)
{
label1.Text = Locc.ToString();
WholePage();
ClearPage();
}
}
}
PrintDocument PrintDoc = new PrintDocument();
PrintDoc.PrintPage += PrintDoc_PrintPage;
PrintDoc.Print();
}[/CODE]

This code saves the prints

[CODE]public void WholePage()
{
int x = 0;
int y = 0;
int width = OverPanel.Width;
int height = OverPanel.Height;
Rectangle Rec = new Rectangle(0,0,width,height);
PImage = new Bitmap(OverPanel.Width, OverPanel.Height);
OverPanel.DrawToBitmap(PImage, Rec);
AllPrints.Add(new Bitmap(PImage, PImage.Size));
}

Все остальное, кроме печати, работает правильно,Печать распечатывает только последнюю страницу, но она сохраняет и загружает из списка должным образом.Я получаю 3 растровых изображения на моем C: / Test drive с меткой 1, читающей 1, 2 и 3 соответственно.Но он только распечатывает страницу № 3 с меткой 1, читающей 3.

Некоторая помощь с hasmorepages, я попробовал поискать в Google, и кажется, что это точный код на MSDN, и куча людей использует, поэтому я потерян.

1 Ответ

1 голос
/ 23 апреля 2011

, как вы можете прочитать в MSDN, ваш обработчик print_page должен доставлять одну страницу за один раз графическому объекту в аргументах события ...

, поскольку вы рисуете все 3 изображения друг над другом,последний выживает и печатается

, поскольку в конце вашего обработчика событий HasMorePages имеет значение false, ваш обработчик больше не вызывается для печати следующей страницы ...

, поэтому машина победиладелай, что хочешь ... он просто будет следовать твоим инструкциям ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...