Visual Basic .NET을 사용하여 원시 데이터를 프린터로 보내는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 322090 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 Win32 사용하는 방법을 보여 줍니다 Visual Basic .NET을 사용하여 만든 프로그램에서 스풀러 함수.

자세한 내용

Microsoft .NET Framework에서 원시 데이터를 프린터로 보내려면 프로그램을 Win32 스풀러 함수를 사용하여 작업해야 합니다. 통해 .NET Framework, PrintDocument, PrintController 및 관련된 클래스를 사용하여 인쇄할 수 있습니다. 그러나 .NET Framework에서 미리 서식이 정의된 프린터 준비 데이터를 프린터로 보낼 수 없습니다.

원시 데이터를 사용하여 다음을 수행할 수 있는 프린터로 보내야 할 수 있습니다.
  • 이스케이프 시퀀스를 보냅니다.
  • 다운로드 및 소프트 글꼴을 사용하십시오.
  • 미리 인쇄된 파일을 스풀링하기에.
이러한 형식 및 다른 형식의 원시 데이터 프린터로 보내려면 코드를 Win32 스풀러 응용 프로그램 프로그래머 인터페이스 작업을 수행해야 합니다 (API). 다음 코드는 메모리로 미리 서식이 정의된 파일의 내용을 읽고 WritePrinter 사용하여 해당 바이트 프린터로 보내는 방법을 보여 줍니다.

참고: 네이티브 PrintDocument 인쇄 작업 동일한 인쇄 작업으로 있는 이 방법을 사용할 수 없습니다. 직접 인쇄 작업을 보낼 수 있도록 .NET Framework 중 하나를 사용해야 합니다.


미리 서식이 지정된 데이터를 인쇄하는 프로젝트 만들기

프로젝트를 만들려면 다음과 같이 하십시오.
  1. Visual Studio .NET 시작하십시오. 파일 메뉴에서 새로 만들기를 클릭한 다음 프로젝트 를 클릭하십시오. 프로젝트 형식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.IO
    Imports System.Drawing.Printing
    Imports 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 Function
    End Class
    					
  9. 빌드하고 다음 프로그램을 실행하려면 F5 키를 누릅니다.
  10. 로드할 파일의 내용을 인쇄하려면 Button1 클릭하십시오.
  11. 문자열을 인쇄하려면 Button2 클릭하십시오. 문자열 없이 formfeed 명령이 전송되므로 페이지를 수동으로 꺼내기 할 수 있습니다.

참조

추가 정보는 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 확인하십시오:
138594Win32 API를 사용하여 원시 데이터를 프린터로 보내는 방법

속성

기술 자료: 322090 - 마지막 검토: 2007년 3월 29일 목요일 - 수정: 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
키워드:?
kbmt kbdswgdi2003swept kbhowtomaster KB322090 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com