Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo imprimir códigos de barras desde la aplicación VB

Cómo imprimir códigos de barras desde la aplicación VB

Como gráfico reconocible por máquina, el código de barras puede identificar de forma rápida y precisa un producto o mercancía y desempeña un papel muy importante en muchas aplicaciones de bases de datos, como supermercados y venta de billetes de estación. Cuando un artículo con un código de barras se decodifica correctamente en el escáner de códigos de barras, se obtendrá la cadena de identificación única del artículo. Al buscar en la base de datos, podemos conocer fácilmente algunos de sus otros atributos y realizar algunas operaciones con él en consecuencia. Aunque puede encontrar muchos controles de impresión de códigos de barras gratuitos y no gratuitos en Internet, además de ser incómodos de usar, estos controles también tienen una de las mayores deficiencias: su impresión no se puede almacenar en la misma página de impresión que nuestro programa. Por ejemplo, en un proceso, primero enviamos algún contenido a la impresora del sistema y luego llamamos al método de impresión de código de barras en el control. ¡El resultado final impreso son dos páginas! Si los billetes que queremos procesar ahora no sólo imprimen códigos de barras, sino que también tienen información de terminal y tarifa, entonces este control queda inutilizable. Para los programadores, es posible que también deseen comprender los principios de la impresión de códigos de barras. Este artículo propone dos métodos de impresión para discutir con sus colegas.

1. Utilice directamente la función de impresión de códigos de barras de la impresora.

Hay muchas impresoras que pueden imprimir códigos de barras directamente, pero en VB, la conocida declaración LPRINT de la era DOS ya no puede. La operación de impresión la asume completamente el sistema Windows Spool y la salida está en "páginas". La salida está en "páginas" y Windows convierte toda la salida de impresión en gráficos y la envía al controlador de impresión. Para que la impresora imprima un código de barras, se le debe enviar la secuencia ESC correspondiente directamente, por lo que debemos buscar una manera de evitar el sistema Spool de Windows, es decir, el programa no puede usar el objeto Impresora y la colección Impresoras para procesar la impresión. Bueno, hay al menos tres métodos para enviar el comando ESC directamente a la impresora en VB. Los dos primeros métodos son llamar a las funciones API de Windows: Escape() y SpoolFile(), y el tercero es el método más simple: abrir. el puerto de impresora para acceso binario, consideraremos principalmente este enfoque.

Incluso en la era de Windows, "LPT1:" y "PRN" todavía están disponibles, hagamos un experimento: abra una ventana de DOS e ingrese COPY CON LPT1: cuando se le solicite.

Luego ingrese algunos caracteres aleatorios y presione F6 y la impresora comenzará a funcionar e imprimirá los caracteres que ingresó. El siguiente código demuestra el proceso de envío de comandos y caracteres directamente a la impresora:

Private Sub Command1_Click()

Dim strOut As String

StrOut = "Esto es la cadena enviada directamente al puerto de la impresora."

' Abra el puerto de la impresora donde es posible que sea necesario cambiar "LPT1: " dependiendo de la configuración de su impresora

Abra "LPT1: " Para acceso binario, escribir como cadena

Dim strOut As String

StrOut = "Esta es la cadena enviada directamente al puerto de impresora".

' Enviar a la impresora, tenga en cuenta que el último parámetro de la declaración debe ser una variable

Pon #1, , strOut

' Cierra el puerto de la impresora

Cerrar #1

End Sub

Diferentes impresoras pueden tener diferentes instrucciones para imprimir códigos de barras. Por ejemplo, asigne la variable anterior strOut como:

strOut. = Chr(28) amplificador; Chr(5) amplificador; Chr(3) amplificador; p>CODE39 se imprimirá en la impresora AR2400 Formato "012345". Consulte el manual de la impresora para conocer comandos de control de impresión específicos.

Las desventajas de utilizar este método son: en primer lugar, depende demasiado de la propia impresora y las impresoras con capacidad de impresión de códigos de barras suelen ser más caras que las impresoras normales, lo que puede hacer que la creación de un sistema de aplicación no sea económica; , Tener que manejar toda la impresión usted mismo, por ejemplo, el posicionamiento de la impresión, es una pérdida de tiempo.

En segundo lugar, imprimir en impresoras normales mediante dibujo.

Las reglas de codificación de códigos de barras no son más que expresar unos y ceros binarios a través de espacios de diferentes anchos entre líneas, siempre que lo comprendamos. Siguiendo las reglas de codificación de códigos de barras, puede utilizar el dibujo para obtener un resultado aceptable en una impresora normal. A continuación analizamos los códigos CODE39 más utilizados.

Las reglas de codificación del código CODE39 son:

1. Cada cinco líneas representan un carácter

2.

p>

3. Un espacio amplio entre filas representa 1 y un espacio estrecho representa 0;

Cinco filas más los cuatro espacios entre ellas son de nueve bits. código binario, y Tres de estos nueve dígitos deben ser 1, por eso se llama código 39;

Hay un * al principio y al final del código de barras para identificar el principio y el final

En nuestro programa, de uso común Después de codificar todos los caracteres, interprete el grosor de la línea y luego tome el ancho del espacio, como por ejemplo:

Los caracteres en la imagen de arriba pueden se interpretará como * 001101000 y el carácter 3 se interpretará como 110000100

La siguiente es la subrutina que proporcionamos:

Nota:

1: genera el código de barras correspondiente a la cadena strBarCode a la impresora predeterminada

Private Sub PrintBarCode( _

ByVal strBarCode As String, _

Opcional ByVal intXPos As Integer = 0, _

Opcional ByVal intYPos como entero = 0, _

Opcional ByVal intPrintHeight como entero = 10, _

Opcional ByVal bolPrintText como booleano = True _

)

Nota: Descripción del parámetro:

Nota: strBarCode: la cadena de código de barras que se imprimirá

Nota: intXPos, intYPos: las coordenadas de la esquina superior izquierda del código de barras que se va a imprimir.

intXPos, intYPos: las coordenadas de la esquina superior izquierda del código de barras impreso (el valor predeterminado es (0, 0), en milímetros)

Comentario: intHeight: altura de impresión (el valor predeterminado es un centímetro, en milímetros) )

p>

Comentarios: bolPrintText: si se imprimen caracteres legibles por humanos (el valor predeterminado es verdadero)

Comentarios: "0"-"9", "0"- "9", "0"- "9", "0"-"9", "0"-"9", "0"-"9"0"-"9", "A-Z "0"-"9 Formatos de código de barras ", "A-Z", "- ","", "$" y "*", un total de *** 40 caracteres

Static strBarTable(39) As String

Comentarios: Inicializar tabla de formato de código de barras

strBarTable(0) = "001100100" Comentarios: 4

strBarTable(5) = "101000100" Comentarios: 45

strBarTable(6) = "011000100" Comentario: 6

strBarTable(7) = "000110100" Comentario: 7

strBarTable(7) = "000110100" Comentario: 7

strBarTable(8) = "100100100" Comentario: 8

strBarTable(9) = "010100100" Comentario: 9

strBarTable(10) = "100010010" Comentario : 100010010A

strBarTable(11) = "010010010" Comentario: BB

strBarTable(12) = "110000010" Comentario: C

strBarTable(13) = "001010010" Comentario: D

strBarTable(14) = "101000010" Comentario: E

strBarTable(15) = "011000010" Comentario: F

strBarTable (16) = "000110010" Comentario: G

strBarTable(17) = "100100010" Comentario: H

strBarTable(18) = "010100010" Comentario: I

strBarTable(19) = " 001100010" Anotación: J

strBarTable(20) = "100010001" Anotación: K

strBarTable(21) = "010010001" Anotación: L

strBarTable( 22) = "110000001" Comentario: M

strBarTable(23) = "001010001" Comentario: N

strBarTable(24) = "101000001 " Comentario: S

strBarTable(29) = "001100001" Comentario: S

strBarTable(29) = "001100001" Comentario: TT

strBarTable(30 ) = "100011000" Comentario: U

strBarTab

le(31) = "010011000" Anotación: V

strBarTable(32) = "110001000" Anotación: W

strBarTable(33) = "001011000" Anotación: X

strBarTable(34) = "101001000" Comentario: Y <

strBarTable(35) = "011001000" Comentario: Z

strBarTable(35) = "011001000" Comentario : ZZ

strBarTable(36)="000111000 "Comentario: -

strBarTable(37) = "100101000" Comentario: Z

strBarTable(36) = "000111000" Comentario: Z

strBarTable(38) = "010101000" Comentario: $

strBarTable(39) = "001101000" Comentario:

If strBarCode = "" Luego salir del subcomentario: No imprimir cadenas vacías

Nota: Guarde la impresora. ScaleMode

Dim intOldScaleMode As ScaleModeConstants

intOldScaleMode = Impresora.

intOldDrawWidth As Integer

intOldDrawWidth = Printer.DrawWidth

Nota: Guardar impresora: Guardar fuente de impresora

Atenuar fntOldFont como StdFont

Establecer fntOldFont = Printer.Font

Printer.ScaleMode = vbTwips Nota: Establezca la escala de las coordenadas de impresión en twips (twip=1)

Printer.DrawWidth = 1 Nota: El ancho de línea es 1: El ancho de línea es 1

Printer.FontName = "Song" Nota: Fuente y tamaño de los caracteres impresos: Dim x As Integer

x = Printer.ScaleX(intXPos, vbMillimeters, vbTwips)

Nota: Convierte la coordenada X en milímetros a Tee

Dim x como entero

x = Printer.ScaleX(intXPos, vbMillimeters, vbTwips)

Nota: Convierta la coordenada X en milímetros a Tee

Dim x como entero

x = Printer.ScaleX(intXPos, vbMillimeters, vbTwips) ScaleY(intPrintHeight, vbMillimeters, vbTwips)

Nota: Si se imprimen caracteres legibles por humanos debajo del código de barras

Si bolPrintText = True Entonces

Nota: Impresión de código de barras La altura debe restarse de la altura de los caracteres siguientes

intHeight = intHeight - Printer.TextHeight(strBC)

End If

Const intWidthCU As Integer = 30 Notas: negrita y ancha Ancho del espacio

Si bolPrintText = True entonces

Const intWidthCU como entero = 30 Comentarios: ancho del espacio en negrita y ancho

Const intWidthXI como entero = 10 Comentario: delgado línea y ancho de espacio estrecho

Dim intIndex como comentario entero: índice de la cadena procesada actualmente