#c# #printing
#c# #печать
Вопрос:
прямо сейчас я пытаюсь распечатать несколько растровых изображений, которые я сохраняю в форме. У меня есть 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));
}
Все остальное, кроме печати, работает должным образом. При печати печатается только последняя страница, но она сохраняется и загружается из списка должным образом. В итоге у меня в моем C:/Test диск с label1, считывающий 1, 2 и 3 соответственно. Но он печатает только страницу # 3 с надписью label1, показывающей 3.
Некоторая помощь с hasmorepages, я попытался погуглить, и, похоже, это точный код в MSDN, которым пользуется куча людей, поэтому я заблудился.
Комментарии:
1. Всякий раз, когда я вижу «похоже, это точный код в MSDN, и куча людей использует его, поэтому я теряюсь», я могу прочитать это только как «Я полагаюсь на код, который я не понимаю, чтобы творить магию для меня, поэтому мне не нужно понимать, что он делает». Это не сильно поможет вам, но я хочу сказать, что если вы не можете сказать, что это делает, то вы не сможете эффективно устранить неполадки, и это ограничит то, насколько хорошо вы можете обратиться за помощью.
2. Код также несколько искажен. Я попытался переформатировать его, чтобы он читался лучше, но обнаружил, что у вас непревзойденные фигурные скобки…
Ответ №1:
как вы можете прочитать в MSDN , ваш обработчик print_page должен доставлять графическому объекту по одной странице за раз в аргументах события …
поскольку вы рисуете все 3 изображения друг поверх друга, последнее сохраняется и печатается
поскольку в конце вашего обработчика событий значение HasMorePages равно false, ваш обработчик больше не вызывается для печати следующей страницы…
таким образом, машина не будет делать то, что вы хотите… он просто будет следовать вашим инструкциям…