Нужна помощь в печати нескольких страниц из списка - PullRequest
3 голосов
/ 27 августа 2011

У меня возникают трудности с попыткой выяснить, печатает ли C # несколько страниц.Мое приложение создает список типов объектов, который содержит от 1 до 10 элементов.Каждый объект содержит 2 строковых атрибута: docTypeNumber и docTypeDescription.Переменная под названием flightnumber также передается в конструктор класса.Каждый экземпляр представляет собой тип документа, который должен быть напечатан в виде отдельного листа штрих-кода, который содержит номер типа документа, расшифровку и номер рейса.Большинство примеров многостраничной печати относятся к одному документу, «проливающемуся» на несколько страниц, а не к элементу, составленному из нескольких отдельных страниц.У меня вопрос как этого добиться.

Нужно ли создавать один большой документ на несколько страниц?Нужно ли создавать несколько экземпляров класса PrintDocument?

Буду признателен за любую помощь.

Вот мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace BarcodeTest
{
    class BarcodePrinter
    {
        public BarcodePrinter(List<DocumentType> type, string flightnumber)
        {
            docType = type;
            flightNumber = flightnumber;
        }

        //Attributes
        private List<DocumentType> docType = new List<DocumentType>();
        private string flightNumber;

        //helper variables
        string docTypeNumber;
        string docTypeDescription;
        int pageNumber = 1;
        int numberOfPages;
        private static Font barcodeFont = new Font("3 of 9 Barcode", 24);
        private static Font printFont = new Font("Arial", 24);

        public void Print()
        {
            numberOfPages = docType.Count;

            PrintDocument pd = new PrintDocument();

            foreach (DocumentType type in docType)
            {
                docTypeNumber = type.DocumentTypeNumber;
                docTypeDescription = type.DocumentDescription;

                pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
            }//end foreach

#if DEBUG
            PrintPreviewDialog printPreview = new PrintPreviewDialog();
            printPreview.Document = pd;
            printPreview.Show();
#else 
            pd.Print();
#endif
        }// end Print() method

        public void pd_PrintPage(Object sender, PrintPageEventArgs e)
        {
            Graphics g = e.Graphics;
            //e.Graphics.PageUnit = GraphicsUnit.Point;
            e.Graphics.PageUnit = GraphicsUnit.Inch;

            StringFormat stringFormat = new StringFormat();
            stringFormat.Alignment = StringAlignment.Center;
            stringFormat.LineAlignment = StringAlignment.Center;

            Brush br = new SolidBrush(Color.Black);
            RectangleF rec1 = new RectangleF(1.9375f, 0f, 4, 1);
            RectangleF rec2 = new RectangleF(1.9375f, .5f, 4, 1);
            RectangleF rec3 = new RectangleF(1.9375f, 1f, 4, 1);
            RectangleF rec4 = new RectangleF(1.9375f, 2, 4, 1);
            RectangleF rec5 = new RectangleF(1.9375f, 2.5f, 4, 1);
            g.DrawString("Air - " + docTypeDescription, printFont, br, rec1, stringFormat);

            g.DrawString("*" + docTypeNumber + "*", barcodeFont, br, rec2, stringFormat);
            g.DrawString(docTypeNumber, printFont, br, rec3, stringFormat);


            g.DrawString("*" + flightNumber + "*", barcodeFont, br, rec4, stringFormat);
            g.DrawString(flightNumber, printFont, br, rec5, stringFormat);


            if (pageNumber < numberOfPages)
            {
                e.HasMorePages = true;

            }
            else
                e.HasMorePages = false;
            pageNumber++;

        }//end pd_PrintPage Method


    }//end BarcodePrinter Class
}//end namespace

1 Ответ

2 голосов
/ 28 августа 2011

Я понял это.Мне нужно было перебрать мой список в обработчике страницы печати.Я сделал это, ведя счет каждой страницы.Я знал, сколько страниц по количеству элементов в моем списке.Вот мой рабочий код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace BarcodeTest
{
    class BarcodePrinter
    {
        public BarcodePrinter(List<DocumentType> type, string number)
        {
            docType = type;
            flightNumber = number;
        }

        //Attributes
        private List<DocumentType> docType = new List<DocumentType>();
        private string flightNumber;

        //helper variables
        string docTypeNumber;
        string docTypeDescription;
        int pageNumber = 1;
        int numberOfPages;
        Font barcodeFont = new Font("3 of 9 Barcode", 36);
        Font printFont = new Font("Arial", 24);
        int i = 0;





        public void Print()
        {

            numberOfPages = docType.Count;  //# of List elements = # of pages


            PrintDocument pd = new PrintDocument();

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



#if DEBUG
            PrintPreviewDialog printPreview = new PrintPreviewDialog();
            printPreview.Document = pd;
            printPreview.Show();
#else 
            pd.Print();
#endif


        }// end Print() method


        public void pd_PrintPage(Object sender, PrintPageEventArgs e)
        {

            docTypeNumber = docType[i].DocumentTypeNumber;  // This is a get/set Property
            docTypeDescription = docType[i].DocumentDescription; // This is a get/set Property

            StringFormat stringFormat = new StringFormat();
            stringFormat.Alignment = StringAlignment.Center;
            stringFormat.LineAlignment = StringAlignment.Center;


            Graphics g = e.Graphics;
            e.Graphics.PageUnit = GraphicsUnit.Inch;

            Brush br = new SolidBrush(Color.Black);
            RectangleF rec1 = new RectangleF(.9375f, 0, 6, 1);
            RectangleF rec2 = new RectangleF(1.9375f, .5f, 4, 1);
            RectangleF rec3 = new RectangleF(1.9375f, 1f, 4, 1);
            RectangleF rec4 = new RectangleF(.9375f, 2, 6, 1);
            RectangleF rec5 = new RectangleF(1.9375f, 2.5f, 4, 1);
            g.DrawString("Air - " + docTypeDescription, printFont, br, rec1, stringFormat);
// '*' Must Preceed and Follow Information for a bar code to be scannable
            g.DrawString("*" + docTypeNumber + "*", barcodeFont, br, rec2, stringFormat);
            g.DrawString(docTypeNumber, printFont, br, rec3, stringFormat);

// '*' Must Preceed and Follow Information for a bar code to be scannable
            g.DrawString("*" + flightNumber + "*", barcodeFont, br, rec4, stringFormat);
            g.DrawString(flightNumber, printFont, br, rec5, stringFormat);



            if (pageNumber < numberOfPages)
            {
                e.HasMorePages = true;
                i++;
                pageNumber++;

            }
            else
            {
                e.HasMorePages = false;
            }

        }//end pd_PrintPage Method


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