PDA

Ver la Versión Completa : FastReport y códigos de barras


afxe
13-03-2019, 19:27:45
Hola a todos.

Estoy con D7 y FastReport 4. El caso es que imprimo etiquetas con códigos de barras (EAN 128) y me está pasando que algunos usuarios aumenta el tamaño del texto de la pantalla (en personalización de pantalla del panel de control) y, cuando hacen esto, el código de barras se me reduce en tamaño en el porcentaje en que la fuente aumente, se queda mucho mas pequeño y los lectores no reconocen el EAN.

¿Les ha pasado y han sabido como solucionarlo? Se me ha ocurrido tocar el ZOOM y el HEIGHT para proporcionar la salida, pero me obliga a hacerlo por cada usuario que maneja el programa.

Gracias y un saludo.

Casimiro Notevi
13-03-2019, 20:25:25
¿Leen con el escaner de la pantalla?

mRoman
14-03-2019, 06:16:27
Si...como leen el código de barras...desde la pantalla??. El caso es que ya impreso no importa si es chico o grande la fuente...lo importante es que las barras estén legibles en el papel....

afxe
14-03-2019, 08:51:17
Gracias por vuestro interés. Si configuro el tamaño del texto en pantalla está al 100%, el EAN128C que se imprime con la cadena "LGU0000036129ACO" aparece en una longitud de 58 mm. Si se pone el texto en pantalla aun tamaño de 175%, la longitud del EAN impreso es de 37 mm con la mitad de la altura. La cadena se imprime en una etiqueta de 65x25mm que luego se pega en un documento (un albarán de compra en este caso). Se escanea y tenemos un programa que localiza el EAN y es capaz de asociar el documento escaneado al registro 36.219 del fichero ALB_COMPRA. El problema es que al imprimirse el código de barras en apenas 3 cm, tendría que escanear con una resolución altísima para que el reconocedor lea el código de barras. Escaneando a 300 dpi no da calidad suficiente para reconocer, y con las pistolas laser de código de barras también le cuesta leerlo, aunque no es el objetivo usarlo para eso.

No puedo controlar el tamaño en fuente de cada usuario se pone en su terminal, he tirado la toalla, porque por más que lo comunico y configuro al 100%, a los dos días vuelve a estar cambiado al 175%.

Gracias de nuevo.

Casimiro Notevi
14-03-2019, 10:49:20
¿Pero qué tiene que ver la pantalla con el papel?
En la pantalla no necesitas poner nada.

WHILENOTEOF
14-03-2019, 22:18:53
Hola, yo tampoco le encuentro mucha lógica a que la resolución de la pantalla afecte a lo que se imprima, por lo que es posible que FastReport haya introducido algo de la resolución de la pantalla (dpi) en el código de impresión. Yo recientemente tuve que ajustar algunas pantallas de un programa para que se vieran bien cuando el usuario ampliaba a 125% ó 150%, cada TForm de Delphi tiene una propiedad scaled que por defecto está a true, si esto es así, si el usuario trabaja a 125%, lo que hace Delphi es escalar los controles y tamaño de letras para adaptarlo a esa resolución, pero el resultado no era bueno. Lo que hago es poner la propiedad Scaled:= false (no quiero que Delphi escale el formulario) y chequeo si la propiedad PixelsPerInch es distinta de 96 (96 = 100%), si es así yo escalo las fuentes de los controles y lo que me interesa para que se vea bien esa pantalla. No todas las fuentes escalan igual y hay algunas que según el tamaño se desajustan de lo esperado.

Resumiendo el rollo, yo probaría a desactivar la propiedad scaled del formulario donde tengas los componentes de fast-report y/o del formulario de previsualización del informe, a ver si sale como esperas.

afxe
15-03-2019, 11:44:08
Gracias WHILENOTEOF... tu apunte es realmente interesante y me va a servir para algunas cosas que me pasan. No obstante, no es el caso que ahora me ocupa, el FastReport está en un DataModule, y aunque le cambie la propiedad Scaled a False del Form que llama a la función definida en ese DataModule, sigue disminuyendo el código de barras.

No tengo ni idea de porqué cuando toco la resolución de la pantalla me comprime el EAN impreso, he llegado a la conclusión que el Windows "Falsea" de alguna manera el tamaño de la letra y el FastReport concluye que tiene que estrechar la impresión para que quepa, cuando realmente los dpi de la pantalla no deben afectar a los de impresión.

He notado que con el QuickReport también me pasa, cuando aumento el tamaño de la letra en las propiedades de Windows, se disminuye proporcionalmente el informe impreso en el folio. ¿?¿?¿?¿?¿?

Casimiro Notevi
15-03-2019, 12:07:31
Para que no demos "palos de ciego", ni jueguemos a las adivinanzas, ¿por qué no pones el código que estás usando?

WHILENOTEOF
15-03-2019, 12:23:09
Gracias WHILENOTEOF... tu apunte es realmente interesante y me va a servir para algunas cosas que me pasan. No obstante, no es el caso que ahora me ocupa, el FastReport está en un DataModule, y aunque le cambie la propiedad Scaled a False del Form que llama a la función definida en ese DataModule, sigue disminuyendo el código de barras.

No tengo ni idea de porqué cuando toco la resolución de la pantalla me comprime el EAN impreso, he llegado a la conclusión que el Windows "Falsea" de alguna manera el tamaño de la letra y el FastReport concluye que tiene que estrechar la impresión para que quepa, cuando realmente los dpi de la pantalla no deben afectar a los de impresión.

He notado que con el QuickReport también me pasa, cuando aumento el tamaño de la letra en las propiedades de Windows, se disminuye proporcionalmente el informe impreso en el folio. ¿?¿?¿?¿?¿?

Axfe, una opción que podrías probar es asignarle a la propiedad Zoom del componente Barcode de Fastreport según la ampliación que le hayan puesto a la pantalla, que puedes deducir la propiedad PixelsPerInch que tenga el formulario :
- si vale 96 --> el zoom es 100%
- si vale 120 --> el zoom es 125 %
- ....

afxe
21-03-2019, 19:38:26
Gracias por tu aportación.... pero a pesar de tener el tamaño de la fuente al máximo, el valor de la propiedad PixelsPerInch seguía siendo 96, no obstante, he cogido tu idea y activando un flag cambio el zoom y el height del componente. Pongo el fuente:


if frxIdentificativa.FindComponent('BarCode1') <> nil then begin
TfrxBarCodeView(frxIdentificativa.FindComponent('BarCode1')).Text := Format('%3.3s%1.1d%9.9d%3.3s', [vEmpresa, vModificador, vNumero, vTipo]);
// if Application.MainForm.PixelsPerInch > 96 then begin (no ha funcionado)
if l_ZoomActivo then begin // Por la resolución del tipo de letra.
TfrxBarCodeView(frxIdentificativa.FindComponent('BarCode1')).Zoom := 1.5;
TfrxBarCodeView(frxIdentificativa.FindComponent('BarCode1')).Height := 120;
end;
end;

frxIdentificativa.PrintOptions.Printer := G_IMPRESORA_IDENTIFIC;
frxIdentificativa.PrintOptions.Copies := 1;
frxIdentificativa.PrintOptions.ShowDialog := False;
frxIdentificativa.PrepareReport(True);
frxIdentificativa.Print;

afxe
21-03-2019, 19:40:34
Sigo sin dar una explicación al por qué al aumentar el tamaño del fuente en pantalla provoca que se estreche las impresiones.

WHILENOTEOF
21-03-2019, 20:01:30
Sigo sin dar una explicación al por qué al aumentar el tamaño del fuente en pantalla provoca que se estreche las impresiones.


Continúo pensando que es posible que hayan metido los dpi de la pantalla en el código de la impresión, aunque imagino que en unos componentes tan usados como estos ya se hubiese reportado y solucionado. El check del dpi no lo tienes que hacer sobre PixelPerInch del form, sino de la pantalla, este es el código que utilizo para escalar una fuente originalmente con una altura de 8, cuando veo que el usuario tiene la pantalla con zoom:

if (Screen.PixelsPerInch <> 96) then
begin
Opciones.Font8:= Round(8 * Screen.PixelsPerInch / 96);
end;

afxe
26-03-2019, 13:31:50
Hola de nuevo. El valor de Screen.PixelsPerInch no varía cuando aumento el tamaño de fuente en pantalla (botón derecho sobre el escritorio->"Resolución de Pantalla"->"Aumentar o reducir el tamaño del texto y de otros elementos"->"Cambiar el tamaño de todos los elementos"->Poner a tope "Más Grande"), sigue siendo 96, pero he observado que sí varia la propiedad Screen.DesktopWidth, que disminuye según el tamaño que se seleccione, pero no me vale, porque también varía si toco la resolución de pantalla sin cambiar el tamaño los elementos :confused: y el cambio de resolución de pantalla no afecta a la impresión, sólo cuando cambio el tamaño.

afxe
01-04-2020, 14:04:24
Por si a alguien le ocurriera:

Hay que modificar el método DrawBarCode en el fuente frxBarcod.pas de Fastreport (yo estoy con la versión 4), y al principio, sustituir:

BarWidth := Width;


por


tTemp := GetDC(0); // definir en var tTemp : HDC
try
BarWidth := Round((Width * GetDeviceCaps(tTemp, VERTRES)) / GetDeviceCaps(tTemp, DESKTOPVERTRES));
finally
ReleaseDC(0, tTemp);
end;


Con esto se soluciona que el código de barras se estreche cuando se cambia el tamaño de los elementos del escritorio al 125%, 150%, etc. en las propiedades de la pantalla.

También he solucionado el problema para Quickreport, que le pasa otro tanto de lo mismo, usando la misma función.

Saludos