Cuando una impresión sale "a través del controlador de Windows", ésta es "dibujada" en la impresora. En otras palabras: cuando mandas a imprimir la plabra "Fox" a una impresora (sea la que sea) directamente por medio del controlador de dicha impresora instalada en Windows, la impresora NO imprimie una "EFE" (F) luego una "O" (o) y finalmente una "EQUIS" (X). En realidad "las dibuja".
Antes, en tiempos de DOS, cuando mandabas a imprimir la plaba "Fox" a una impresora matricial, ésta en realidad SI IMPRIMIA las letras indicadas, como si fuera una máquina de escribir ya que las impresoras matriciales tienen guardadas sus "Tipos de Letras" en un chip de MEMORIA ROM que tienen incorporado. Afortunadamente TODAVÍA son así. Regularmente solo traen los tipos Roman, Sans Serif y Courier New aunque otros modelos incluyen 2 o 3 tipos más.
Lo que tienes que hacer entonces, es lograr que Windows "se olvide" de mandar a dibujar las letras a las impresoras matriciales y que mas bien le mande "tipos" a dicha impresora para que ella haga lo que mejor sabe hacer: imprimir con tipos y no "dibujado" los REPORT FORM. Claro, esto SOLO FUNCIONA con impresoras matriciales ya que ellas tienen "memorizados" los tipos de letras. Las impresoras Laser y de Inyección NO SABEN nada de tipos de letras (bueno, la gran mayoría no...)
Puede que alguien del foro tenga otra forma de hacerlo mucho mejor que la mía, pero "mi manera" de hacerlo es la siguiente:
Paso 1: Genero el reporte hacia un archivo de Texto Plano de la siguiente manera:
SET REPORTBEHAVIOR 80
_ASCIICOLS = 255
_ASCIIROWS = 66
REPORT FORM TuInforme.FRX TO FILE C:\Reporte.TXT ASCII
Paso 2: Creo un archivo .BAT sobre la marcha que mande la impresión desde el DOS de Windows. Estos son los comandos:
IF FILE("LPRINT.BAT")
ERASE ("LPRINT.BAT")
ENDIF
M.FilHnd = FCREATE("LPRINT.BAT")
FPUTS(M.FilHnd, "@TYPE C:\Reporte.TXT >LPT1")
FPUTS(M.FilHnd, "@DEL C:\Reporte.TXT")
FCLOSE(M.FilHnd)
Paso 3: Finalmente ejecuto el archivo .BAT recién creado para que la impresión salga desde el DOS y de esa forma lo que llegue a la impresora sean "tipos" y no "instrucciones de dibujo". Estos son los comandos:
IF FILE(LPRINT.BAT")
RUN /N7 LPRINT.BAT
ERASE LPRINT.BAT
ENDIF
La idea detrás de todo lo anterior es que la impresión salga desde la consola de DOS (DVM de Windows) en lugar de que salga "directamente" de Windows.
Salu2,
Edgar