Печать нескольких изображений нажатием одной кнопки. Печать всех в winforms. - PullRequest
1 голос
/ 09 декабря 2011

Я создал несколько образов на диск. Я хочу нажать кнопку «Напечатать все» и распечатать все изображения, напечатанные за один снимок.

public void PrintGraph()
{
    PrintDocument pd = new PrintDocument();

    pd.PrintPage += new PrintPageEventHandler(this.PrintImageHandler);

    PrintDialog MyPrintDialog = new PrintDialog();

    if (MyPrintDialog.ShowDialog() == DialogResult.OK)
    {
        pd.Print();
    }
    myprintDocument.Dispose();
}

обработчик ниже:

private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs)
{
    Graphics g = ppeArgs.Graphics;
    for (int i = 0; i < lstAllImages.Count; i++)
    {
        Image objimage = Image.FromFile(lstAllloadImages[i].ToString());
        g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height);
    } // Draw Image using the DrawImage method 
}

Только одно изображение напечатано. Я хочу напечатать несколько изображений при нажатии на кнопку «Печатать все».

1 Ответ

2 голосов
/ 09 декабря 2011

Как следует из названия объекта args события ( PrintPageEventArgs ), этот обработчик события будет вызываться один раз для каждой страницы , которую вы собираетесь создать.Он будет вызываться снова для новой страницы, если для свойства HasMorePages установлено значение true.

В этом событии вы можете контролировать только то, что отображается на одной странице, поэтому текущий коднаписание всех изображений друг над другом (предположительно, все они имеют одинаковый размер, или самое большое - последнее, или вы уже заметили фрагменты более ранних изображений, отображаемых сбоку или внизу последнего изображения).

Таким образом, вы должны отслеживать, какое изображение вы хотите нарисовать, используя некоторые внешние поля.Например, у вас будет:

if (MyPrintDialog.ShowDialog() == DialogResult.OK)
{
    currentPage = 0;
    pd.Print();
}

А затем в вашем обработчике событий:

int currentPage;

private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs)
{
    Graphics g = ppeArgs.Graphics;
    Image objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString());
    g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height);
    currentPage++;
    ppeArgs.HasMorePages = currentPage <  lstAllOperatorloadImages.Count;
}

Чтобы напечатать два изображения на странице, я, вероятно, сделаю что-то вроде:

private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs)
{
    Graphics g = ppeArgs.Graphics;
    Image objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString());
    g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height);
    currentPage++;
    if(currentPage < lstAllOperatorloadImages.Count)
    {
        objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString());
        g.DrawImage(objimage, 0, 600, objimage.Width, objimage.Height);
        currentPage++;
    }
    ppeArgs.HasMorePages = currentPage <  lstAllOperatorloadImages.Count;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...