Member 13964139 Ответов: 1

Как масштабировать панель с графическим блоком на страницу печати


Я хочу сделать масштабирование панели с помощью picture box, textbox и label после страницы печати, но масштабировать только панель, а не с помощью picture box, textbox и label. Не могли бы вы помочь мне закончить его?

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

public partial class Form1 : Form
   {
       Bitmap memoryimg;
       PrintPreviewDialog printprvw = new PrintPreviewDialog();
       PrintDocument printdoc = new PrintDocument();
       Panel pannel;

       public Form1()
       {
           InitializeComponent();
       }
       private void button1_Click(object sender, EventArgs e)
       {
           panel1.Size = new Size(794, 1123);
           Print(this.panel1);
       }

       private void Print(Panel pn1)
       {
           PrinterSettings ps = new PrinterSettings();
           pannel = pn1;
           getprintarea(pn1);
           printprvw.Document = printdoc;
           printdoc.PrintPage += new PrintPageEventHandler(pntdoc_printpage);
           printprvw.ShowDialog();
       }

       private void pntdoc_printpage (object sender, PrintPageEventArgs e)
       {
           Rectangle pagearea = e.PageBounds;
           e.Graphics.DrawImage(memoryimg, 0,0);
       }

       private void getprintarea(Panel pn1)
       {
         memoryimg = new Bitmap(pn1.Width, pn1.Height);
         pn1.DrawToBitmap(memoryimg, new Rectangle(0,0,pn1.Width,pn1.Height));
       }

   }
}

Richard MacCutchan

Сначала вам нужно получить размеры всех ваших элементов управления и расстояние между ними. Затем получите размеры страницы, на которой вы собираетесь печатать. Оттуда вы можете рассчитать, нужно ли вам масштабировать вверх или вниз на последней странице. Попробуйте сделать рисунок на листе бумаги, чтобы визуализировать то, что вам нужно сделать.

Member 13964139

О'кей, спасибо, я сделал это и выиграл решение.

1 Ответов

Рейтинг:
2

Member 13964139

namespace PrintingWFP
{
    public partial class Form1 : Form
    {
        Bitmap memoryimg;
        PrintPreviewDialog printprvw = new PrintPreviewDialog();
        PrintDocument printdoc = new PrintDocument();
        Panel pannel;
        public Form1()
        {
            InitializeComponent();
        }

        private void Print(Panel pn1)
        {
            PrinterSettings ps = new PrinterSettings();
            pannel = pn1;
            getprintarea(pn1);
            printprvw.Document = printdoc;
            printdoc.PrintPage += new PrintPageEventHandler(pntdoc_printpage);
            printprvw.ShowDialog();
            panel1.Size = new Size(395, 642);
            panel1.Visible = true;
        }

        private void pntdoc_printpage(object sender, PrintPageEventArgs e)
        {
            Rectangle pagearea = e.PageBounds;
            e.Graphics.DrawImage(memoryimg, 0, 0);
            PrintPreviewDialog pre = new PrintPreviewDialog();
         
        }

        private void getprintarea(Panel pn1)
        {
            memoryimg = new Bitmap(pn1.Width, pn1.Height);
            pn1.DrawToBitmap(memoryimg, new Rectangle(0, 0, pn1.Width, pn1.Height));
        }

        private void button1_Click(object sender, EventArgs e)
        {
            panel1.Visible = false;
            panel1.Size = new Size(794, 1123);
            Print(this.panel1);
        }