كيفية إرسال بيانات أولية إلى طابعة باستخدام Visual Basic .NET

انتهاء دعم نظام التشغيل Windows XP

لقد أنهت شركة Microsoft دعم Windows XP في 8 أبريل، 2014. وقد أثر هذا التغيير على تحديثات البرامج لديك وخيارات الأمان الخاصة بك. تعرف على ما يعنيه ذلك فيما يتعلق بك وكيفية الحفاظ على حمايتك.

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية322090
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
للحصول على إصدار Microsoft Visual C# .NET من هذه المقالة، راجع 322091.
Microsoft Visual Basic 6.0 إصدار هذه المقالة للحصول 154078.
للحصول على إصدار C++ غير مدارة من هذه المقالة، راجع 138594.

تشير هذه المقالة إلى مساحات أسماء Microsoft .NET Framework فئة مكتبة التالية:
  • System.IO
  • System.Drawing.Printing
  • System.Runtime.InteropService

في هذه المهمة

الموجز
تعرض هذه المقالة خطوة بخطوة كيفية استخدام Win32 وظائف التخزين المؤقت من برامج التي تقوم بإنشائها باستخدام Visual Basic .NET.

مزيد من المعلومات

لإرسال بيانات أولية إلى طابعة من Microsoft .NET Framework يجب أن يعمل البرنامج مع دالات التخزين المؤقت Win32. خلال .NET Framework، يمكنك طباعة باستخدام PrintDocumentPrintController وفئات المقترنة. ومع ذلك، مع .NET Framework لا يمكنك إرسال البيانات المعتمدة من قبل الطابعة المنسقة مسبقاً إلى طابعة.

قد يلزم إرسال بيانات أولية إلى طابعة لتنفيذ ما يلي:
  • إرسال أحرف.
  • تنزيل ثم قم باستخدام خطوط النظام.
  • ملفات التخزين المؤقت preprinted.
لإرسال هذه الأنواع وأنواع أخرى من بيانات أولية إلى طابعة يجب أن تعمل التعليمة البرمجية الخاصة بك مع "واجهات للمبرمجين لـ Win32 Spooler التطبيقات" (APIs). يُظهر التعليمات البرمجية التالي كيفية قراءة محتويات ملف المنسقة مسبقاً في الذاكرة ثم قم بإرسال تلك البايت إلى الطابعة باستخدام WritePrinter.

ملاحظة: لا يمكن استخدام هذا الأسلوب في مهمة الطباعة نفس كمهمة طباعة PrintDocument أصلي. يجب إما استخدام .NET Framework إلى الطباعة أو إرسال بايت مهمة الطباعة الخاصة بك.


إنشاء مشروع طباعة البيانات المنسقة مسبقاً

لإنشاء "المشروع" ، اتبع الخطوات التالية:
  1. بدء تشغيل Visual Studio .NET. من القائمة ملف، انقر فوق جديد ثم انقر فوق المشروع. ضمن أنواع Project ، انقر فوق المجلد مشاريع Visual Basic. على قائمة قوالب انقر فوق تطبيق Windows ثم انقر فوق موافق. افتراضياً، يتم إنشاء Form1.
  2. من القائمة عرض، انقر فوق مربع أدوات لعرض مربع الأدوات ثم قم بإضافة زر إلى Form1. يدعى هذا الزر Button1.
  3. إضافة زر آخر إلى Form1. يدعى هذا الزر Button2.
  4. انقر نقراً مزدوجاً فوق Button1. يظهر إطار التعليمات البرمجية للنموذج.
  5. استبدال روتين فرعي Button1_Click التعليمة البرمجية التالية:
        ' Click event handler for a button - designed to show how to use the    ' SendFileToPrinter and SendBytesToPrinter functions.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        ' Allow the user to select a file.        Dim ofd As New OpenFileDialog()        If ofd.ShowDialog(Me) Then            ' Allow the user to select a printer.            Dim pd As New PrintDialog()            pd.PrinterSettings = New PrinterSettings()            If (pd.ShowDialog() = DialogResult.OK) Then                ' Print the file to the printer.                RawPrinterHelper.SendFileToPrinter(pd.PrinterSettings.PrinterName, ofd.FileName)            End If        End If    End Sub ' Button1_Click()					
  6. استبدال روتين فرعي Button2_Click التعليمة البرمجية التالية:
        ' Click event handler for a button - designed to show how to use the    ' SendBytesToPrinter function to send a string to the printer.    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        Dim s As String        Dim pd As New PrintDialog()        ' You need a string to send.        s = "Hello, this is a test"        ' Open the printer dialog box, and then allow the user to select a printer.        pd.PrinterSettings = New PrinterSettings()        If (pd.ShowDialog() = DialogResult.OK) Then            RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s)        End If    End Sub ' Button2_Click()					
  7. إدراج التعليمات البرمجية التالية في أعلى الملف:
    Imports System.IOImports System.Drawing.PrintingImports System.Runtime.InteropServices					
  8. Add the following code inside the main application namespace but outside any class definitions:
    Public Class RawPrinterHelper    ' Structure and API declarions:    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _    Structure DOCINFOW        <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String        <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String        <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String    End Structure    <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _       SetLastError:=True, CharSet:=CharSet.Unicode, _       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean    End Function    <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _       SetLastError:=True, CharSet:=CharSet.Unicode, _       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean    End Function    <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _       SetLastError:=True, CharSet:=CharSet.Unicode, _       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean    End Function    <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _       SetLastError:=True, CharSet:=CharSet.Unicode, _       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean    End Function    <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _       SetLastError:=True, CharSet:=CharSet.Unicode, _       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean    End Function    <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _       SetLastError:=True, CharSet:=CharSet.Unicode, _       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean    End Function    <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _       SetLastError:=True, CharSet:=CharSet.Unicode, _       ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _    Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean    End Function    ' SendBytesToPrinter()    ' When the function is given a printer name and an unmanaged array of      ' bytes, the function sends those bytes to the print queue.    ' Returns True on success or False on failure.    Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean        Dim hPrinter As IntPtr      ' The printer handle.        Dim dwError As Int32        ' Last error - in case there was trouble.        Dim di As DOCINFOW          ' Describes your document (name, port, data type).        Dim dwWritten As Int32      ' The number of bytes written by WritePrinter().        Dim bSuccess As Boolean     ' Your success code.        ' Set up the DOCINFO structure.        With di            .pDocName = "My Visual Basic .NET RAW Document"            .pDataType = "RAW"        End With        ' Assume failure unless you specifically succeed.        bSuccess = False        If OpenPrinter(szPrinterName, hPrinter, 0) Then            If StartDocPrinter(hPrinter, 1, di) Then                If StartPagePrinter(hPrinter) Then                    ' Write your printer-specific bytes to the printer.                    bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)                    EndPagePrinter(hPrinter)                End If                EndDocPrinter(hPrinter)            End If            ClosePrinter(hPrinter)        End If        ' If you did not succeed, GetLastError may give more information        ' about why not.        If bSuccess = False Then            dwError = Marshal.GetLastWin32Error()        End If        Return bSuccess    End Function ' SendBytesToPrinter()    ' SendFileToPrinter()    ' When the function is given a file name and a printer name,     ' the function reads the contents of the file and sends the    ' contents to the printer.    ' Presumes that the file contains printer-ready data.    ' Shows how to use the SendBytesToPrinter function.    ' Returns True on success or False on failure.    Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean        ' Open the file.        Dim fs As New FileStream(szFileName, FileMode.Open)        ' Create a BinaryReader on the file.        Dim br As New BinaryReader(fs)        ' Dim an array of bytes large enough to hold the file's contents.        Dim bytes(fs.Length) As Byte        Dim bSuccess As Boolean        ' Your unmanaged pointer.        Dim pUnmanagedBytes As IntPtr        ' Read the contents of the file into the array.        bytes = br.ReadBytes(fs.Length)        ' Allocate some unmanaged memory for those bytes.        pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)        ' Copy the managed byte array into the unmanaged array.        Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)        ' Send the unmanaged bytes to the printer.        bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)        ' Free the unmanaged memory that you allocated earlier.        Marshal.FreeCoTaskMem(pUnmanagedBytes)        Return bSuccess    End Function ' SendFileToPrinter()    ' When the function is given a string and a printer name,    ' the function sends the string to the printer as raw bytes.    Public Shared Function SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)        Dim pBytes As IntPtr        Dim dwCount As Int32        ' How many characters are in the string?        dwCount = szString.Length()        ' Assume that the printer is expecting ANSI text, and then convert        ' the string to ANSI text.        pBytes = Marshal.StringToCoTaskMemAnsi(szString)        ' Send the converted ANSI string to the printer.        SendBytesToPrinter(szPrinterName, pBytes, dwCount)        Marshal.FreeCoTaskMem(pBytes)    End FunctionEnd Class					
  9. اضغط F5 لإنشاء ثم قم بتشغيل البرنامج.
  10. انقر فوق Button1 تحميل محتويات ملف وطباعتها.
  11. انقر فوق Button2 لطباعة سلسلة. (قد يكون إخراج الصفحة يدوياً لأن السلسلة التي يتم إرسالها بدون أمر formfeed.)
مراجع
لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
138594كيفية إرسال بيانات أولية إلى طابعة باستخدام Win32 API

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 322090 - آخر مراجعة: 12/07/2015 10:54:03 - المراجعة: 7.4

Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Windows XP Professional, the operating system: Microsoft Windows XP 64-Bit Edition

  • kbnosurvey kbarchive kbmt kbdswgdi2003swept kbhowtomaster KB322090 KbMtar
تعليقات