该示例要求每行都适合页面宽度。

对于此示例, System.ComponentModel 请使用 、 System.Drawing System.Drawing.Printing System.IO 、 和 System.Windows.Forms 命名空间。

#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 private: Font^ printFont; StreamReader^ streamToPrint; static String^ filePath; public: PrintingExample() Printing(); private: // 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 ); // Iterate over the file, printing each line. 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 ); count++; // If more lines exist, print another page. if ( line != nullptr ) ev->HasMorePages = true; ev->HasMorePages = false; public: // Print the file. void Printing() streamToPrint = gcnew StreamReader( filePath ); printFont = gcnew Font( "Arial",10 ); PrintDocument^ pd = gcnew PrintDocument; pd->PrintPage += gcnew PrintPageEventHandler( this, &PrintingExample::pd_PrintPage ); // Print the document. pd->Print(); finally streamToPrint->Close(); catch ( Exception^ ex ) MessageBox::Show( ex->Message ); static void Main() array<String^>^args = Environment::GetCommandLineArgs(); String^ sampleName = args[ 0 ]; if ( args->Length != 2 ) Console::WriteLine( "Usage: {0} <file path>", sampleName ); return; filePath = args[ 1 ]; gcnew PrintingExample; int main() PrintingExample::Main(); using System; using System.IO; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; public class PrintingExample private Font printFont; private StreamReader streamToPrint; static string filePath; public PrintingExample() Printing(); // 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 / printFont.GetHeight(ev.Graphics) ; // Iterate over the file, printing each line. while (count < linesPerPage && ((line=streamToPrint.ReadLine()) != null)) yPos = topMargin + (count * printFont.GetHeight(ev.Graphics)); ev.Graphics.DrawString (line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); count++; // If more lines exist, print another page. if (line != null) ev.HasMorePages = true; ev.HasMorePages = false; // Print the file. public void Printing() streamToPrint = new StreamReader (filePath); printFont = new Font("Arial", 10); PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); // Print the document. pd.Print(); finally streamToPrint.Close() ; catch(Exception ex) MessageBox.Show(ex.Message); // This is the main entry point for the application. public static void Main(string[] args) string sampleName = Environment.GetCommandLineArgs()[0]; if(args.Length != 1) Console.WriteLine("Usage: " + sampleName +" <file path>"); return; filePath = args[0]; new PrintingExample(); Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms Public Class PrintingExample Private printFont As Font Private streamToPrint As StreamReader Private Shared filePath As String Public Sub New() Printing() End Sub ' The PrintPage event is raised for each page to be printed. Private Sub pd_PrintPage(sender As Object, 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) ' Iterate over the file, printing each line. 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 ' Print the file. Public Sub Printing() streamToPrint = New StreamReader(filePath) printFont = New Font("Arial", 10) Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf pd_PrintPage ' Print the document. pd.Print() Finally streamToPrint.Close() End Try Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub ' This is the main entry point for the application. Public Shared Sub Main() Dim args() As String = System.Environment.GetCommandLineArgs() Dim sampleName As String = args(0) If args.Length <> 1 Then Console.WriteLine("Usage: " & sampleName & " <file path>") Return End If filePath = args(0) End Sub End Class

通过处理 PrintPage 事件并使用 Graphics 中包含的 指定要打印的 PrintPageEventArgs 输出。

PrinterSettings.PrinterName 使用 属性指定应打印文档的打印机。

方法 Print 打印文档而不使用打印对话框。 PrintDialog 如果要为用户提供选择打印设置的功能,请使用 。

如果在打印过程中引发方法未处理的 Print 异常,则文档的打印将中止。