PDA

Ver la Versión Completa : QR comprime caracteres en preview e impresion


hgiacobone
22-07-2015, 16:56:10
Hola amigos,
Los pongo en tema:
Entorno desarrollo: Windows 7 + Delphi 7 + QuickReport 5.02
Entorno operativo: Windows Server (2008 & 2012)
NOTA: Por las dudas, informo que no he realizado ninguna actualización de componentes.

Estoy teniendo "de repente" un grave problema al imprimir. Cualquier tipo de reporte en la aplicación sale con el texto comprimido, o sea, se reduce el espaciado entre caracteres, independientemente del font, y provoca que las letras "se solapen".
Muy extraño.

Más vale una imagen que mil palabras...

Adjunto ej. de impresión de hace 1 mes atrás (ej_prn_002.png) y un ej. de impresión reciente (ej_prn_003.png)

hgiacobone
23-07-2015, 23:59:52
Hola,
Luego de una ardua búsqueda, intentando finalmente adivinar problemas relacionados a la diferencia entre DPI de pantallas e impresoras, en el mismísimo foro de QuickReport, se trató el tema allá por el 2013 y al parecer al día de hoy, la gente de QSoft no brindó una respuesta satisfactoria a pesar de que un usuario posteó la solución aparentemente más próxima.

Aquí el post en cuestión: http://forum.quickreport.co.uk/default.aspx?g=posts&t=1932

El problema ocurre al trabajar en Windows Server con conexiones RDP (Escritorio Remoto).

Para la solución planteada en el post anterior,es necesario contar con los fuentes del QR. De lo contrario, no nos queda otra que configurar las conexiones RDP a la resolucion 1024x768.
Ahora, pasemos a editar el archivo: QRPrntr.pas

procedure TQRPrinter.CreateMetafileCanvas;
begin
FMetafile := TMetafile.Create;
//{$define HIRES}
{$ifdef HIRES}
// try a high res canvas
XFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsX) / 254;
YFactor := GetDeviceCaps(aPrinter.Handle, LogPixelsY) / 254;
FMetafile.Width := XSize(PaperWidthValue);
FMetafile.Height := YSize(PaperLengthValue);
FCanvas := TMetafileCanvas.Create(FMetafile, aprinter.Handle);
//(!)fix unknown
FCanvas.Font.PixelsPerInch:= GetDeviceCaps(aPrinter.Handle, LogPixelSY);
{$else}
FMetafile.Width := XSize(PaperWidthValue);
FMetafile.Height := YSize(PaperLengthValue);
FCanvas := TMetafileCanvas.Create(FMetafile, 0);
YFactor := Screen.PixelsPerInch / 254;
XFactor := YFactor;
//(!)fix RDP connection!!!
SetGraphicsMode(FCanvas.Handle, GM_ADVANCED);
{$endif}
FHyperlinks := TList.Create;
end;


Esas son las "nuevas líneas" que la gente de QSoft ha adicionado en los últimos lanzamientos y que al parecer corrigen ese bug.
La cuestión, es que sigo sin entender por qué se disparó ahora el problema, si yo no he actualizado ni alterado nada de mi entorno de desarrollo.
Por eso mismo, yo lo vinculo mas a una actualización del driver de video del Server y/o del propio WindowsUpdate. Y digo video, porque aunque no parezca, el QR al parecer trabaja mas con los pixeles de pantalla que con los PPP del dispositivo impresor.... cosa que se supone debería ser lo lógico pero viendo el código anterior nos damos cuenta que no es así.:mad:
Saludos,
YAKO