Member 14630006 Ответов: 1

Как напечатать 2 панели в одном заказе?


Я пытаюсь напечатать 2 панели в том же порядке, как это показывает печать 2 страниц, но то, что я получаю сейчас, - это печать 1 документа вместо печати 2 документов, как я могу это сделать ? это то, что я пробовал :

Что я уже пробовал:

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
   {
       Bitmap bmp1 = new Bitmap(panel1.Width, panel1.Height, panel1.CreateGraphics());
       panel1.DrawToBitmap(bmp1, new Rectangle(0, 0, panel1.Width, panel1.Height));
       RectangleF bounds1 = e.PageSettings.PrintableArea;
       float factor1 = ((float)bmp1.Height / (float)bmp1.Width);
       e.Graphics.DrawImage(bmp1, bounds1.Left, bounds1.Top, bounds1.Width, factor1 *
       bounds1.Width);
   }

 private void printDocument2_PrintPage(object sender, PrintPageEventArgs e)
   {
       Bitmap bmp = new Bitmap(panel2.Width, panel2.Height, panel2.CreateGraphics());
       panel2.DrawToBitmap(bmp, new Rectangle(0, 0, panel2.Width, panel2.Height));
       RectangleF bounds = e.PageSettings.PrintableArea;
       float factor = ((float)bmp.Height / (float)bmp.Width);
       e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, bounds.Width, factor * bounds.Width);

   }
private void print_Click(object sender, EventArgs e)
   {
     System.Drawing.Printing.PrintDocument doc = new System.Drawing.Printing.PrintDocument();
     System.Drawing.Printing.PrintDocument doc1 = new System.Drawing.Printing.PrintDocument();
     doc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
     doc1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument2_PrintPage);
                   doc.Print();
                   doc1.Print();
    }

1 Ответов

Рейтинг:
7

OriginalGriff

Просто создайте один PrintDocument с одним обработчиком событий PrintPage.
Затем - если вы должны печатать свои данные в виде растровых изображений, а я не рекомендую этого делать - просто создайте два растровых изображения и распечатайте их в одном методе обработчика: объедините код из двух ваших обработчиков в один.

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


Member 14630006

как напечатать их обоих в одном обработчике я попробовал это сделать, но не сработало может быть, мой код был неправильным есть какой-нибудь пример?

OriginalGriff

- возможно, мой код был неверным."
Так какой же код вы пробовали?

Member 14630006

частная printDocument1_PrintPage недействительным(объект отправителя, PrintPageEventArgs е)
{

Bitmap bmp1 = новое растровое изображение(panel1.Ширина, панель 1.Высота, панель 1.CreateGraphics());
panel1.DrawToBitmap(bmp1, новый прямоугольник(0, 0, panel1.Ширина, панель 1.Высота));
RectangleF bounds1 = e.PageSettings.PrintableArea;
float factor1 = ((float)bmp1.Высота / (поплавок)bmp1.Width);
e.графика.Функция drawImage(БМП1, bounds1.Слева, bounds1.Топ, bounds1.Ширина, factor1 * bounds1.Ширина);
е.HasMorePages = истина;


Bitmap bmp = новое растровое изображение(panel2.Width, panel2.Высота, панель 2.CreateGraphics());
panel2.DrawToBitmap(bmp, новый прямоугольник(0, 0, panel2.Width, panel2.Высота));
RectangleF bounds = e.PageSettings.PrintableArea;
поплавок фактор = ((поплавка)БМП.Высота / (поплавок)БМП.Ширина);
e.графика.DrawImage(bmp, bounds.Слева - границы.Верх, границы.Ширина, коэффициент * границы.Ширина);
e.HasMorePages = false;

}

частная print_Click недействительным(объект отправителя, EventArgs в электронной)
{
printDialog1.Документ = printDocument1;

if (printDialog1.ShowDialog() == DialogResult.ОК)
{

printDocument1.Печать();
}}

OriginalGriff

:вздыхать:
Как вы думаете, что происходит, когда вы печатаете одну фотографию поверх другой?

Member 14630006

да , я знаю, что это неправильно, поэтому я сделал 2 документа, потому что теперь он будет печатать только второе растровое изображение

OriginalGriff

Это потому, что вы напечатали второй поверх первого...

Если вы хотите, чтобы их было два на одной странице, то они должны быть меньше и занимать половину страницы (или меньше) каждая.

Если вы хотите, чтобы они были на отдельных страницах, то ваш удаленный код лучше.

Member 14630006

да, мой удаленный код теперь работает после удаления страницы=1;

Member 14630006

Спасибо

OriginalGriff

Всегда пожалуйста!