Csharp/C Sharp by API/System.Drawing.Printing/PrintDocument

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

extends PrintDocument

<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Printing; public class PrintParagraph : Form {

   public PrintParagraph()
   {
       this.cmdPrint = new System.Windows.Forms.Button();
       this.SuspendLayout();
       this.cmdPrint.Location = new System.Drawing.Point(109, 122);
       this.cmdPrint.Size = new System.Drawing.Size(75, 23);
       this.cmdPrint.Text = "Print";
       this.cmdPrint.UseVisualStyleBackColor = true;
       this.cmdPrint.Click += new System.EventHandler(this.cmdPrint_Click);
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.ClientSize = new System.Drawing.Size(282, 259);
       this.Controls.Add(this.cmdPrint);
       this.Text = "Wrapped Print";
       this.ResumeLayout(false);
   }
   private void cmdPrint_Click(object sender, EventArgs e)
   {
       string text = "a paragraph";
       PrintDocument doc = new ParagraphDocument(text);
       doc.PrintPage += new PrintPageEventHandler(this.Doc_PrintPage);
       PrintDialog dlgSettings = new PrintDialog();
       dlgSettings.Document = doc;
       if (dlgSettings.ShowDialog() == DialogResult.OK)
       {
           doc.Print();
       }
   }
   private void Doc_PrintPage(object sender, PrintPageEventArgs e)
   {
       ParagraphDocument doc = (ParagraphDocument)sender;
       Font font = new Font("Arial", 15);
       e.Graphics.DrawString(doc.Text, font, Brushes.Black,
              e.MarginBounds, StringFormat.GenericDefault);
   }
   [STAThread]
   static void Main()
   {
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       Application.Run(new PrintParagraph());
   }
   private System.Windows.Forms.Button cmdPrint;
   

} public class ParagraphDocument : PrintDocument {

   public string Text;
   public ParagraphDocument(string text)
   {
       this.Text = text;
   }

}

 </source>


new PrintDocument()

<source lang="csharp"> using System; using System.Drawing.Printing; using System.Drawing;

 class PrintSample
 {
   [STAThread]
   static void Main(string[] args)
   {
     PrintSample oSample = new PrintSample();
     oSample.RunSample();
   }
   public void RunSample()
   {
       PrintDocument pd = new PrintDocument(); 
     pd.PrintPage += new PrintPageEventHandler(this.PrintPageEvent);
     pd.Print();
   }
   private void PrintPageEvent(object sender, PrintPageEventArgs ev) 
   {
     string strHello = "Hello Printer!";
     Font oFont = new Font("Arial",10);
     Rectangle marginRect = ev.MarginBounds;
     ev.Graphics.DrawRectangle(new Pen(System.Drawing.Color.Black),marginRect);
     ev.Graphics.DrawString(strHello,oFont,new SolidBrush(System.Drawing.Color.Blue),
       (ev.PageBounds.Right/2), ev.PageBounds.Bottom/2);
   }
 }
  
 </source>


PrintDocument.DefaultPageSettings

<source lang="csharp"> using System; using System.Drawing.Printing; namespace DefPrintSettings_c {

   public class DefPrintSettings
   {
       [STAThread]
       static void Main(string[] args)
       {
     PrintDocument pd = new PrintDocument();
     PageSettings pg = pd.DefaultPageSettings;
     PrinterSettings ps = pg.PrinterSettings;
     Console.WriteLine("Printer Settings");
     Console.WriteLine("PrinterName = " + pd.PrinterSettings.PrinterName);
     Console.WriteLine("Is default Printer = " +
                        ps.IsDefaultPrinter.ToString());
     Console.WriteLine("Is plotter = " + ps.IsPlotter.ToString());
     Console.WriteLine("Is printer valid = " + ps.IsValid.ToString());
     Console.WriteLine("Can Duplex = " + ps.IsValid.ToString());
     Console.WriteLine("Num copies = " + ps.Copies.ToString());
     Console.WriteLine("Max Copies = " + ps.MaximumCopies.ToString());
     Console.WriteLine("Max Page = " + ps.MaximumPage.ToString());
     Console.WriteLine("Min Page = " + ps.MinimumPage.ToString());
     Console.WriteLine("Supports Color = " + ps.SupportsColor.ToString());
     foreach (PaperSize p in ps.PaperSizes)
       Console.WriteLine("Supports Paper Size: " + p.PaperName);
     foreach (PaperSource p in ps.PaperSources)
       Console.WriteLine("Supports Paper Source: " + p.SourceName);
     Console.WriteLine("\nPage Settings");
     Console.WriteLine("Is Color = " + pg.Color.ToString());
     Console.WriteLine("Top Bound = " + pg.Bounds.Top.ToString());
     Console.WriteLine("Bottom Bound = " + pg.Bounds.Bottom.ToString());
     Console.WriteLine("Left Bound = " + pg.Bounds.Left.ToString());
     Console.WriteLine("Right Bound = " + pg.Bounds.Right.ToString());
     Console.WriteLine("Top Margin = " + pg.Margins.Top.ToString());
     Console.WriteLine("Bottom Margin = " + pg.Margins.Bottom.ToString());
     Console.WriteLine("Left Margin = " + pg.Margins.Left.ToString());
     Console.WriteLine("Right Margin = " + pg.Margins.Right.ToString());
     Console.WriteLine("Landscape = " + pg.Landscape.ToString());
     Console.WriteLine("PaperSize = " + pg.PaperSize.PaperName);
     Console.WriteLine("PaperSource = " + pg.PaperSource.SourceName);
     Console.WriteLine("PrinterResolution = " + 
                       pg.PrinterResolution.Kind.ToString());
     Console.WriteLine("PrinterResolution X = " + 
                       pg.PrinterResolution.X.ToString());
     Console.WriteLine("PrinterResolution Y = " + 
                       pg.PrinterResolution.Y.ToString());
     Console.ReadLine();
   }
   }

}


 </source>


PrintDocument.DocumentName

<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms;

class HelloPrinter: Form {

    public static void Main()
    {
         Application.Run(new HelloPrinter());
    }
    protected override void OnPaint(PaintEventArgs pea)
    {
         Graphics     grfx   = pea.Graphics;
         StringFormat strfmt = new StringFormat();
         grfx.DrawString("Click to print", Font, new SolidBrush(ForeColor),ClientRectangle, strfmt);
    }
    protected override void OnClick(EventArgs ea)
    {
         PrintDocument prndoc = new PrintDocument();
  
         prndoc.DocumentName = Text;
         prndoc.PrintPage += new PrintPageEventHandler(PrintDocumentOnPrintPage);
         prndoc.Print();
    }
    void PrintDocumentOnPrintPage(object obj, PrintPageEventArgs ppea)
    {
         Graphics grfx = ppea.Graphics;
         grfx.DrawString(Text, Font, Brushes.Black, 0, 0);
         SizeF sizef = grfx.MeasureString(Text, Font);
         grfx.DrawLine(Pens.Black, sizef.ToPointF(), grfx.VisibleClipBounds.Size.ToPointF());
    }

}

 </source>


PrintDocument.Print()

<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Printing; public class PrintDocumentSubClass : Form {

   public PrintDocumentSubClass()
   {
       this.cmdPrint = new System.Windows.Forms.Button();
       this.SuspendLayout();
       // 
       this.cmdPrint.Location = new System.Drawing.Point(109, 122);
       this.cmdPrint.Size = new System.Drawing.Size(75, 23);
       this.cmdPrint.Text = "Print";
       this.cmdPrint.UseVisualStyleBackColor = true;
       this.cmdPrint.Click += new System.EventHandler(this.cmdPrint_Click);
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.ClientSize = new System.Drawing.Size(278, 259);
       this.Controls.Add(this.cmdPrint);
       this.Text = "Multi Page Print";
       this.ResumeLayout(false);
   }
   private void cmdPrint_Click(object sender, EventArgs e)
   {
       PrintDocument doc = new TextDocument();
       doc.PrintPage += this.Doc_PrintPage;
       PrintDialog dlgSettings = new PrintDialog();
       dlgSettings.Document = doc;
       if (dlgSettings.ShowDialog() == DialogResult.OK)
       {
           doc.Print();
       }
   }
   private void Doc_PrintPage(object sender, PrintPageEventArgs e)
   {
       TextDocument doc = (TextDocument)sender;
       Font font = new Font("Arial", 10);
       
       float lineHeight = font.GetHeight(e.Graphics);
       float x = e.MarginBounds.Left;
       float y = e.MarginBounds.Top;
       doc.PageNumber += 1;
       while ((y + lineHeight) < e.MarginBounds.Bottom && doc.Offset <= doc.Text.GetUpperBound(0))
       {
           e.Graphics.DrawString(doc.Text[doc.Offset], font,Brushes.Black, x, y);
           doc.Offset += 1;
           y += lineHeight;
       }
       if (doc.Offset < doc.Text.GetUpperBound(0))
       {
           e.HasMorePages = true;
       } else {
           doc.Offset = 0;
       }
       
   }
   [STAThread]
   static void Main()
   {
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       Application.Run(new PrintDocumentSubClass());
   }
   private System.Windows.Forms.Button cmdPrint;

} class TextDocument : PrintDocument{

   private string[] text;
   public string[] Text;
   public int PageNumber;
   public int Offset;
   
   public TextDocument()
   {
       this.Text = new string[100];
       for (int i = 0; i < 100; i++)
       {
           this.Text[i] += "string Text ";
       }
   }

}

 </source>


PrintDocument.PrintPage

<source lang="csharp"> using System; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms;

class PrintableForm: Form {

    public static void Main()
    {
         Application.Run(new PrintableForm());
    }
    public PrintableForm()
    {
         ResizeRedraw = true;
    }
    protected override void OnPaint(PaintEventArgs pea)
    {
         DoPage(pea.Graphics, ForeColor,ClientSize.Width, ClientSize.Height);
    }
    protected override void OnClick(EventArgs ea)
    {
         PrintDocument prndoc = new PrintDocument();
  
         prndoc.DocumentName = Text;
         prndoc.PrintPage += new PrintPageEventHandler(PrintDocumentOnPrintPage);
         prndoc.Print();
    }
    void PrintDocumentOnPrintPage(object obj, PrintPageEventArgs ppea)
    {
         Graphics grfx  = ppea.Graphics;
         SizeF    sizef = grfx.VisibleClipBounds.Size;
  
         DoPage(grfx, Color.Black, (int)sizef.Width, (int)sizef.Height);
    }
    protected virtual void DoPage(Graphics grfx, Color clr, int cx, int cy)
    {
         Pen pen = new Pen(clr);
  
         grfx.DrawLine(pen, 0,      0, cx - 1, cy - 1);
         grfx.DrawLine(pen, cx - 1, 0, 0,      cy - 1);
    }

}

 </source>