PrintDocument PrintDocument PrintDocument PrintDocument Class


定義從 Windows Form 應用程式中列印時會將輸出傳送至印表機的可重複使用物件。Defines a reusable object that sends output to a printer, when printing from a Windows Forms application.

public ref class PrintDocument : System::ComponentModel::Component
public class PrintDocument : System.ComponentModel.Component
type PrintDocument = class
    inherit Component
Public Class PrintDocument
Inherits Component


下列程式碼範例會列印名為預設印表機上的 C:\My Documents\MyFile.txt 的檔案。The following code example prints the file named C:\My Documents\MyFile.txt on the default printer. 若要執行此範例,建立新的 Windows Form 專案,並貼入表單中,取代檔案內容的範例程式碼。To run the example, create a new Windows Forms project and paste the example code into the form, replacing the file contents. 適用於 C# 中,您必須刪除 Form1.Designer.cs 檔案。For C#, you will need to delete the Form1.Designer.cs file. 此外,變更您想要列印的檔案路徑。Also, change the path to the file you want to print.


這個範例需要的頁面寬度,以符合每一行。The example requires that each line fits within the page width.

#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

using namespace System;
using namespace System::IO;
using namespace System::Drawing;
using namespace System::Drawing::Printing;
using namespace System::Windows::Forms;

public ref class PrintingExample: public System::Windows::Forms::Form
   System::ComponentModel::Container^ components;
   System::Windows::Forms::Button^ printButton;
   System::Drawing::Font^ printFont;
   StreamReader^ streamToPrint;

      : Form()
      // The Windows Forms Designer requires the following call.


   // The Click event is raised when the user clicks the Print button.
   void printButton_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
         streamToPrint = gcnew StreamReader( "C:\\My Documents\\MyFile.txt" );
            printFont = gcnew System::Drawing::Font( "Arial",10 );
            PrintDocument^ pd = gcnew PrintDocument;
            pd->PrintPage += gcnew PrintPageEventHandler( this, &PrintingExample::pd_PrintPage );

      catch ( Exception^ ex ) 
         MessageBox::Show( ex->Message );


   // The PrintPage event is raised for each page to be printed.
   void pd_PrintPage( Object^ /*sender*/, PrintPageEventArgs^ ev )
      float linesPerPage = 0;
      float yPos = 0;
      int count = 0;
      float leftMargin = (float)ev->MarginBounds.Left;
      float topMargin = (float)ev->MarginBounds.Top;
      String^ line = nullptr;
      // Calculate the number of lines per page.
      linesPerPage = ev->MarginBounds.Height / printFont->GetHeight( ev->Graphics );
      // Print each line of the file.
      while ( count < linesPerPage && ((line = streamToPrint->ReadLine()) != nullptr) )
         yPos = topMargin + (count * printFont->GetHeight( ev->Graphics ));
         ev->Graphics->DrawString( line, printFont, Brushes::Black, leftMargin, yPos, gcnew StringFormat );

      // If more lines exist, print another page.
      if ( line != nullptr )
            ev->HasMorePages = true;
            ev->HasMorePages = false;

   // The Windows Forms Designer requires the following procedure.
   void InitializeComponent()
      this->components = gcnew System::ComponentModel::Container;
      this->printButton = gcnew System::Windows::Forms::Button;
      this->ClientSize = System::Drawing::Size( 504, 381 );
      this->Text = "Print Example";
      printButton->ImageAlign = System::Drawing::ContentAlignment::MiddleLeft;
      printButton->Location = System::Drawing::Point( 32, 110 );
      printButton->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
      printButton->TabIndex = 0;
      printButton->Text = "Print the file.";
      printButton->Size = System::Drawing::Size( 136, 40 );
      printButton->Click += gcnew System::EventHandler( this, &PrintingExample::printButton_Click );
      this->Controls->Add( printButton );


// This is the main entry point for the application.
int main()
   Application::Run( gcnew PrintingExample );

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

public partial class Form1 : System.Windows.Forms.Form
    private System.ComponentModel.Container components;
    private System.Windows.Forms.Button printButton;
    private Font printFont;
    private StreamReader streamToPrint;

    public Form1()
        // The Windows Forms Designer requires the following call.

    // The Click event is raised when the user clicks the Print button.
    private void printButton_Click(object sender, EventArgs e)
            streamToPrint = new StreamReader
               ("C:\\My Documents\\MyFile.txt");
                printFont = new Font("Arial", 10);
                PrintDocument pd = new PrintDocument();
                pd.PrintPage += new PrintPageEventHandler
        catch (Exception ex)

    // The PrintPage event is raised for each page to be printed.
    private void pd_PrintPage(object sender, PrintPageEventArgs ev)
        float linesPerPage = 0;
        float yPos = 0;
        int count = 0;
        float leftMargin = ev.MarginBounds.Left;
        float topMargin = ev.MarginBounds.Top;
        string line = null;

        // Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height /

        // Print each line of the file.
        while (count < linesPerPage &&
           ((line = streamToPrint.ReadLine()) != null))
            yPos = topMargin + (count *
            ev.Graphics.DrawString(line, printFont, Brushes.Black,
               leftMargin, yPos, new StringFormat());

        // If more lines exist, print another page.
        if (line != null)
            ev.HasMorePages = true;
            ev.HasMorePages = false;

    // The Windows Forms Designer requires the following procedure.
    private void InitializeComponent()
        this.components = new System.ComponentModel.Container();
        this.printButton = new System.Windows.Forms.Button();

        this.ClientSize = new System.Drawing.Size(504, 381);
        this.Text = "Print Example";

        printButton.ImageAlign =
        printButton.Location = new System.Drawing.Point(32, 110);
        printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        printButton.TabIndex = 0;
        printButton.Text = "Print the file.";
        printButton.Size = new System.Drawing.Size(136, 40);
        printButton.Click += new System.EventHandler(printButton_Click);



Imports System
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Printing
Imports System.Windows.Forms

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private WithEvents printButton As System.Windows.Forms.Button
    Private printFont As Font
    Private streamToPrint As StreamReader

    Public Sub New()
        ' The Windows Forms Designer requires the following call.
    End Sub

    ' The Click event is raised when the user clicks the Print button.
    Private Sub printButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles printButton.Click
            streamToPrint = New StreamReader("C:\My Documents\MyFile.txt")
                printFont = New Font("Arial", 10)
                Dim pd As New PrintDocument()
                AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
            End Try
        Catch ex As Exception
        End Try
    End Sub

    ' The PrintPage event is raised for each page to be printed.
    Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
        Dim linesPerPage As Single = 0
        Dim yPos As Single = 0
        Dim count As Integer = 0
        Dim leftMargin As Single = ev.MarginBounds.Left
        Dim topMargin As Single = ev.MarginBounds.Top
        Dim line As String = Nothing

        ' Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)

        ' Print each line of the file.
        While count < linesPerPage
            line = streamToPrint.ReadLine()
            If line Is Nothing Then
                Exit While
            End If
            yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
            ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
            count += 1
        End While

        ' If more lines exist, print another page.
        If (line IsNot Nothing) Then
            ev.HasMorePages = True
            ev.HasMorePages = False
        End If
    End Sub

    Private Sub InitializeForm()
        Me.components = New System.ComponentModel.Container()
        Me.printButton = New System.Windows.Forms.Button()

        Me.ClientSize = New System.Drawing.Size(504, 381)
        Me.Text = "Print Example"

        printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft
        printButton.Location = New System.Drawing.Point(32, 110)
        printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat
        printButton.TabIndex = 0
        printButton.Text = "Print the file."
        printButton.Size = New System.Drawing.Size(136, 40)
        AddHandler printButton.Click, AddressOf printButton_Click

    End Sub

    ' This is the main entry point for the application.    
    Public Shared Sub Main()
        Application.Run(New Form1())
    End Sub

End Class


一般而言,您建立的執行個體PrintDocument類別中,設定屬性,例如DocumentNamePrinterSettings,並呼叫Print方法來開始列印程序。Typically, you create an instance of the PrintDocument class, set properties such as the DocumentName and PrinterSettings, and call the Print method to start the printing process. 處理PrintPage事件,您可以指定要列印,請使用輸出GraphicsGraphics屬性PrintPageEventArgsHandle the PrintPage event where you specify the output to print, by using the GraphicsGraphics property of the PrintPageEventArgs.

如需從一個 Windows Form 應用程式列印的詳細資訊,請參閱Windows Form 列印支援For more information about printing from a Windows Form application, see the Windows Forms Print Support. 如果您想要從 Windows Presentation Foundation 應用程式列印,請參閱System.Printing命名空間。If you wish to print from a Windows Presentation Foundation application, see the System.Printing namespace.


PrintDocument() PrintDocument() PrintDocument() PrintDocument()

初始化 PrintDocument 類別的新執行個體。Initializes a new instance of the PrintDocument class.


CanRaiseEvents CanRaiseEvents CanRaiseEvents CanRaiseEvents

取得值,指出元件是否能引發事件。Gets a value indicating whether the component can raise an event.

(Inherited from Component)
Container Container Container Container

取得包含 IContainerComponentGets the IContainer that contains the Component.

(Inherited from Component)
DefaultPageSettings DefaultPageSettings DefaultPageSettings DefaultPageSettings

取得或設定頁面設定,其會使用為所有要列印頁面的預設設定。Gets or sets page settings that are used as defaults for all pages to be printed.

DesignMode DesignMode DesignMode DesignMode

取得值,指出 Component 目前是否處於設計模式。Gets a value that indicates whether the Component is currently in design mode.

(Inherited from Component)
DocumentName DocumentName DocumentName DocumentName

取得或設定要在列印文件時顯示的文件名稱 (例如,在列印狀態對話方塊中或在印表機佇列中)。Gets or sets the document name to display (for example, in a print status dialog box or printer queue) while printing the document.

Events Events Events Events

取得附加在這個 Component 上的事件處理常式清單。Gets the list of event handlers that are attached to this Component.

(Inherited from Component)
OriginAtMargins OriginAtMargins OriginAtMargins OriginAtMargins

取得或設定值,指出與頁面相關的圖形物件位置是否正好在使用者指定的邊界內部,或在頁面可列印區域的左上角。Gets or sets a value indicating whether the position of a graphics object associated with a page is located just inside the user-specified margins or at the top-left corner of the printable area of the page.

PrintController PrintController PrintController PrintController

取得或設定指引列印程序的列印控制程式。Gets or sets the print controller that guides the printing process.

PrinterSettings PrinterSettings PrinterSettings PrinterSettings

取得或設定列印文件的印表機。Gets or sets the printer that prints the document.

Site Site Site Site

取得或設定 ComponentISiteGets or sets the ISite of the Component.

(Inherited from Component)


CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
Dispose() Dispose() Dispose() Dispose()

釋放 Component 所使用的所有資源。Releases all resources used by the Component.

(Inherited from Component)
Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

釋放 Component 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。Releases the unmanaged resources used by the Component and optionally releases the managed resources.

(Inherited from Component)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

判斷指定的物件是否等於目前的物件。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

做為預設雜湊函式。Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetService(Type) GetService(Type) GetService(Type) GetService(Type)

傳回表示 Component 或其 Container 所提供之服務的物件。Returns an object that represents a service provided by the Component or by its Container.

(Inherited from Component)
GetType() GetType() GetType() GetType()

取得目前執行個體的 TypeGets the Type of the current instance.

(Inherited from Object)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

取得存留期服務物件,以控制這個執行個體的存留期原則。Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

建立目前 Object 的淺層複本 (Shallow Copy)。Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

建立目前 MarshalByRefObject 物件的淺層複本。Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
OnBeginPrint(PrintEventArgs) OnBeginPrint(PrintEventArgs) OnBeginPrint(PrintEventArgs) OnBeginPrint(PrintEventArgs)

引發 BeginPrint 事件。Raises the BeginPrint event. 在呼叫 Print() 方法之後和文件的第一頁列印之前呼叫它。It is called after the Print() method is called and before the first page of the document prints.

OnEndPrint(PrintEventArgs) OnEndPrint(PrintEventArgs) OnEndPrint(PrintEventArgs) OnEndPrint(PrintEventArgs)

引發 EndPrint 事件。Raises the EndPrint event. 在文件最後一頁已列印時呼叫它。It is called when the last page of the document has printed.

OnPrintPage(PrintPageEventArgs) OnPrintPage(PrintPageEventArgs) OnPrintPage(PrintPageEventArgs) OnPrintPage(PrintPageEventArgs)

引發 PrintPage 事件。Raises the PrintPage event. 在頁面列印之前呼叫它。It is called before a page prints.

OnQueryPageSettings(QueryPageSettingsEventArgs) OnQueryPageSettings(QueryPageSettingsEventArgs) OnQueryPageSettings(QueryPageSettingsEventArgs) OnQueryPageSettings(QueryPageSettingsEventArgs)

引發 QueryPageSettings 事件。Raises the QueryPageSettings event. 在每個 PrintPage 事件之前立即呼叫它。It is called immediately before each PrintPage event.

Print() Print() Print() Print()

啟動文件的列印處理序。Starts the document's printing process.

ToString() ToString() ToString() ToString()

提供列印文件的相關資訊 (以字串形式)。Provides information about the print document, in string form.


BeginPrint BeginPrint BeginPrint BeginPrint

發生於呼叫 Print() 方法時 (在文件的第一頁列印之前)。Occurs when the Print() method is called and before the first page of the document prints.

Disposed Disposed Disposed Disposed

當此元件由 Dispose() 方法的呼叫處置時發生。Occurs when the component is disposed by a call to the Dispose() method.

(Inherited from Component)
EndPrint EndPrint EndPrint EndPrint

在文件最後一頁列印時發生。Occurs when the last page of the document has printed.

PrintPage PrintPage PrintPage PrintPage

會當需要目前頁面的列印輸出時發生。Occurs when the output to print for the current page is needed.

QueryPageSettings QueryPageSettings QueryPageSettings QueryPageSettings

PrintPage 事件之前立即發生。Occurs immediately before each PrintPage event.