Hướng dẫn lập trình VB.NET - Chương 18: Làm việc với máy in

Nội dung thảo luận:

- In đồ họa trong chương trình VB

- In văn bản trong chương trình VB

- In tài liệu nhiều trang trong chương trình VB

- Sử dụng hộp thoại Print, Page Setup, Print Preview

Trong chương này chúng ta sẽ học cách tích hợp chức năng in ấn vào trong form cũng như cách xử lý in ấn đồ họa, in văn bản và tài liệu nhiều trang.

Chú ý:

- Lớp đối tượng PrintDocument cung cấp nhiều chức năng in ấn hơn

- Chúng ta sử dụng các điều khiển hộp thoại PrintDialog, PrintPreViewDialog và PageSetupDialog để thực thi tác vụ in ấn.

- Để in tài liệu nhiều trang, chúng ta phải tạo ra thủ tục sử lý sự kiện PrintPage xử lý thao tác in mỗi lần từng trang tài liệu. Tuy nhiên hầu như các chức năng in ấn chúng ta đều được hỗ trợ trong thư viện System.Drawing.Printing.

 

doc16 trang | Chuyên mục: Visual Basic 6.0 | Chia sẻ: dkS00TYs | Lượt xem: 3764 | Lượt tải: 3download
Tóm tắt nội dung Hướng dẫn lập trình VB.NET - Chương 18: Làm việc với máy in, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ìm hiểu chương trình:
Chương trình gồm một RichTextBox để hiển thị nội dung văn bản cần in. Hai nút nhấn, một nút Open cho phép mở file, một nút Print cho phép in văn bản.
Thiết kế giao diện:
Bạn tạo thêm các điều khiển phục vụ mở file, in file như OpenFileDialog1, PrintDocument và PrintDialog. Giao diện của chương trình như hình:
Trong đó thuộc tính của các đối tượng như sau:
Button1: Text – “Open”, Name – btnOpen
Button2: Text – “Print”, Name – btnPrint, Enable – False
RichTextBox1: Name – rxtDocument
Viết mã:
Khai báo hai thư viện sau trước khai báo lớp Form1:
 Imports System.IO 'Dùng để xử lý File
	 Imports System.Drawing.Printing
System.IO cho phép sử dụng lớp FileStream mở và đọc file, System.Drawing.Printing cho phép sử dụng các đối tượng in ấn.
Tiếp theo khai báo các biến dành cho việc in ấn, khai báo đặt ngay sau khai báo lớp form1:
 Private PrintPageSetting As New PageSettings()
 Private StringToPrint As String
 Private PrintFont As New Font("Arial", 10)
Các biến này dùng khi in trang, biến PrintPageSetting để thiết đặt trang in, biến StringToPrint để đọc dòng in, biến PrintFont để thiết đặt font chữ.
Tạo thủ tục btnOpen_Click để mở file ra đọc:
 Dim FilePath As String
 'Hiển thị hộp thoại mở file
 OpenFileDialog1.Filter = "Text Files (*.txt) | *.txt"
 OpenFileDialog1.ShowDialog()
 If OpenFileDialog1.FileName "" Then
 FilePath = OpenFileDialog1.FileName
 Try
 'Đọc nội dụng file vào rxtDocument
 Dim myFileStream As New FileStream _
 (FilePath, FileMode.Open)
 rxtDocument.LoadFile(myFileStream, _
 RichTextBoxStreamType.PlainText)
 myFileStream.Close()
 'Chuỗi để in
 StringToPrint = rxtDocument.Text
 'Enable nút nhấn Print
 btnPrint.Enabled = True
 Catch ex As Exception
 MsgBox(ex.Message)
 End Try
 End If
Khi ấn vào nút Open, đoạn mã trên sẽ hiển thị một hộp thoại cho phép chọn file. Khi chọn file xong, đường dẫn và tên file được lưu vào FileName của OpenFileDialog1. Ta gán thuộc tính filename của OpenFileDialog cho biến FilePath. Tiếp theo định nghĩa biến đối tượng FileStream để mở và đọc nội dung file. Toàn bộ nội dung file sau đó được tải vào RichTextBox rxtDocument nhờ phương thức LoadFile. Toàn bộ nội dung của rxtDocument sau đó lại được gán cho biến chuỗi StringToPrint. Nút nhấn Print lúc này được hiển thị cho phép click vào nó.
Bây giờ chúng ta cài đặt đoạn mã cho phép in ấn. Tạo thủ tục btnPrint_Click bằng cách double – click vào nút Print trên form1 và nhập vào đoạn mã sau:
 Try
 'Chỉ định các thiết lập in mặc định
 PrintDocument1.DefaultPageSettings = PrintPageSetting
 'Lấy dữ liệu để in
 StringToPrint = rxtDocument.Text
 PrintDialog1.Document = PrintDocument1
 Dim result As DialogResult = PrintDialog1.ShowDialog()
 'In tài liệu nếu ấn OK
 If result = Windows.Forms.DialogResult.OK Then
 PrintDocument1.Print()
 End If
 Catch ex As Exception
 MsgBox(ex.Message)
 End Try
Trong đoạn mã trên, ta gán các thiết lập in mặc định của đối tượng PrintDocument1 là biến đối tượng PrintPageSetting, gán nội dung in trong ô rxtDocument vào biến StringToPrint. Tiếp theo, thuộc tính Document của đối tượng PrintDialog1 được gán bằng với đối tượng tài liệu muốn in hay PrintDocument1. Khi hộp thoại cấu hình máy in hiển thị, mọi thiết lập của người dùng trong hộp thoại sẽ được áp đặt cho tài liệu này. Tiếp theo ta phải cho hiển thị hộp thoại chọn cấu hình máy in để người dùng cấu hình bằng phương thức ShowDialog của PrintDialog1. Khi người dùng ấn OK trong hộp thoại cấu hình máy in thì PrintDocument1 sẽ gọi phương thức Print() để in.
Bây giờ ta tạo thủ tục PrintDocument1_PrintPage để thiết đặt các thông số in như ngắt dòng, ngắt trang,…bằng cách double click vào đối tượng PrintDocument1 trong cửa sổ thiết kế form hay chọn trong danh sách class name và method name ở cửa sổ code editor. Lúc trước ta dùng phương thức AddHandler để chuyển giao việc gọi hàm thì giờ đây ta sử dụng trực tiếp sự kiện có sẵn của PrintDocument1. Thủ tục này có nội dung như sau:
 Dim sokytu, sodong As Integer
 Dim chuoiin As String
 Dim chuoidinhdang As New StringFormat()
 'Định nghĩa vùng có thể in ra dựa trên thiết lập trang
 Dim vungin As New RectangleF(e.MarginBounds.Left, _
 e.MarginBounds.Top, e.MarginBounds.Width, _
 e.MarginBounds.Height)
 Dim kichthuoc As New SizeF(e.MarginBounds.Width, _
 e.MarginBounds.Height - PrintFont.GetHeight(e.Graphics))
 'Nếu in một chuỗi dài, yêu cầu ngắt xuống dòng
 chuoidinhdang.Trimming = StringTrimming.Word
 'Tính xem độ dài chuỗi bao nhiêu thì có thể vừa 1 dòng in
 e.Graphics.MeasureString(StringToPrint, PrintFont, _
 kichthuoc, chuoidinhdang, sokytu, sodong)
 chuoiin = StringToPrint.Substring(0, sokytu)
 'In chuỗi trên trang hiện hành
 e.Graphics.DrawString(chuoiin, PrintFont, _
 Brushes.Black, vungin, chuoidinhdang)
 'Nếu vẫn còn chuỗi để in
 If sokytu < StringToPrint.Length Then
 'Loại bỏ chuỗi đã in xong
 StringToPrint = StringToPrint.Substring(sokytu)
 e.HasMorePages = True
 Else
 e.HasMorePages = False
 'Tất cả chuỗi đã in xong, khôi phục lại dữ liệu
 StringToPrint = rxtDocument.Text
 End If
Thủ tục này thực sự tính toán khổ giấy và đẩy dl ra máy in. Trước hết, ta định nghĩa vùng in trong một khung hình chữ nhật:
 Dim vungin As New RectangleF(e.MarginBounds.Left, _
 e.MarginBounds.Top, e.MarginBounds.Width, _
 e.MarginBounds.Height)
Vùng in này được thiết lập nhờ các thông số do biến e truyền vào(biến e này tương đương với biến ev trong thủ tục PrinText và PrintGraphics trước đây). Thông số mà biến e có được là do hộp thoại PrintDialog cung cấp. Tất cả văn bản trong vùng này đều in ra bình thường, phần dài hơn sẽ được đẩy ra in dòng khác. Dữ liệu sau đó được đẩy ra máy in bằng phương thức DrawString.
Chạy chương trình:
Ấn F5 để chạy chương trình. Bạn mở một file text nào đó.
Chương trình sẽ hiển thị nội dung file vào trong rxtDocument:
Nút Print hiện lên, bạn click vào nó để chương trinh hiện hộp thoại thiết lập trang in:
Tôi chưa kết nối máy in nên danh sách máy in không hiện lên ở đây. Bạn có thể thiết lập trang in để truyền thông số vào thủ tục ta đã xây dựng:
Bạn ấn OK, Print để chương trình in ấn. Ở đây tôi lưu vào file Example For Print.mdi bạn có thể xem:
Như vậy là ta đã hoàn thành việc thiết lập trang in cho việc in văn bản nhiều trang. Tiếp sau đây chúng ta sẽ dùng hộp thoại PrintPreviewDialog và PageSetupDialog vào việc thiết đặt trang in.
3. Sử dụng hộp thoại PrintPreviewDialog và PageSetupDialog
Chương trình in ấn của chúng ta đã hoàn chỉnh, giờ chúng ta sẽ cải tiến chương trình MyFilePrinting cho phép định dạng trang in, chọn khổ giấy và xem trước trang in bằng hộp thoại PageSetupDialog và hộp thoại PrintPreviewDialog.
Bạn mở lại Solution MyFilePrinting ta đã làm và đặt thêm hai điều khiển PrintPreViewDialog và PageSetupDialog cùng hai nút nhấn vào form, kết quả như hình:
Trong đó các điều khiển mới có thuộc tính như sau:
Button1: Name – btnPageSetup, Text – “Page Setup”, Enable – False.
Button2: Name – btnPreview, Text – “Print Preview”, Enable – False.
Khi người dùng click vào nút Page Setup thì một hộp thoại cho phép người dùng chọn khổ giấy và thiết lập các thông số cho trang in. Khi click vào nút Print Preview thì hộp thoại cho phép người dùng xem trước trang in hiện ra.
Bây giờ ta sẽ tạo thủ tục btnPageSetup_Click bằng cách double click vào nút Page Setup và nhập vào đoạn mã như sau:
 Try
 'Nạp các thiết lập và hiển thị hộp thoại PageSetup
 PageSetupDialog1.PageSettings = PrintPageSetting
 PageSetupDialog1.ShowDialog()
 Catch ex As Exception
 MsgBox(ex.Message)
 End Try
Đoạn mã này sẽ tạo ra một hộp thoại Page Setup. Biến PrintPageSetting đã được khai báo ở đầu chương trình. Biến PrintPageSetting sẽ nắm giữ các thông số mà hộp thoại PageSetupDialog trả về.
Tiếp theo ta tạo thủ tục btnPreview_Click và nhập đoạn mã như sau:
 Try
 'Chỉ định các thiết lập trang in hiện hành
 PrintDocument1.DefaultPageSettings = PrintPageSetting
 'Chỉ định tài liệu hiển thị cho hộp thoại PrintPreview
 StringToPrint = rxtDocument.Text
 PrintPreviewDialog1.Document = PrintDocument1
 PrintPreviewDialog1.ShowDialog()
 Catch ex As Exception
 MsgBox(ex.Message)
 End Try
Thủ tục này sẽ gán biến PrintPageSetting cho thuộc tính DefaultPageSettings của đối tượng PrintDocument1, copy văn bản trong ô rxtDocument vào biến StringToPrint và mở hộp thoại PrintPreviewDialog1. Thuộc tính Document của hộp thoại PrintPreviewDialog1 được gán bằng PrintDocument1 để chương trình biết bạn đang cần xem tài liệu nào.
Sau cùng ta cần enable hai nút nhấn mới thêm là Page Setup và Print Preview bằng hai dòng mã sau trong thủ tục btnOpen_Click:
	btnPageSetup.Enabled = True
 btnPreview.Enabled = True
Bạn cũng có thể cho phép người dùng nhập nội dung vào ô RichTextBox bằng cách bổ sung thêm thủ tục rxtDocument_TextChanged với nội dung như sau:
 Private Sub rxtDocument_TextChanged(ByVal sender As Object, _
 ByVal e As System.EventArgs) Handles rxtDocument.TextChanged
 btnPrint.Enabled = True
 btnPageSetup.Enabled = True
 btnPreview.Enabled = True
 End Sub
Bây giờ chương trình đã hoàn chỉnh, bạn hãy lưu lại tất cả những thay đổi của chương trình bằng cách nhấn vào nút Save All trên thanh Standard Bar.
Chúng ta sẽ tiến hành chạy và kiểm tra chương trình.
Chạy chương trình:
Bạn chạy chương trình bằng cách nhấn nút F5, bạn hãy thử mở lại file text nào đó hay có thể tự nhập nội dung văn bản vào trong ô RichTextBox.
Bạn nhấn vào nút Page Stup để hiển thị hộp thoại chọn khổ giấy và kích thước trang in:
Bạn có thể thay đổi kích thước các lề in. Tôi thay như sau: Left – 2.5, ba thông số còn lại là 1.5. Nhấn OK để lưu lại thông số này.
Nhấn nút Print Preview để xem trước trang in:
Bạn có thể xem trong nhiều chế độ. Nhấn Close để đóng cửa sổ này lại. Vậy là chúng ta đã hoàn thành việc in ấn cho một tài liệu văn bản đơn giản.
4. Tổng kết chương 18
Bạn hãy làm bảng tổng kết những gì đã học trong chương 18. Bạn có thể áp dụng những ví dụ trong chương này cho các bài tập cần in ấn sau này của bạn.

File đính kèm:

  • docHướng dẫn lập trình VB.NET - Chương 18_Làm việc với máy in.doc
Tài liệu liên quan