Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Impresión de circulares (https://www.clubdelphi.com/foros/showthread.php?t=85028)

newtron 15-01-2014 16:37:53

Impresión de circulares
 
Hola a tod@s.

En alguna de mis aplicaciones tengo una opción para poder imprimir circulares personalizadas wia Word. Todo esto lo tengo controlado, creo el documento con Word poniendo los campos de la tabla que quiero sustituir y luego voy recorriendo la tabla, sustituyendo campos e imprimiendo.

El tema es que este proceso se me hace bastante lento, cuando se lanza la impresión tarda segundos en abrir el documento base, sustituir los campos por los de la tabla e imprimir, con lo que si quieres enviar varios cientos de documentos se hace un proceso eterno.

¿Alguno de vosotros tiene un sistema mejor y sobre todo más rápido para este cometido de alguna otra manera?.

Gracias y un saludo.

cloayza 15-01-2014 22:27:34

Creo que existen alternativas...

Mira estas opciones con FastReport.

Opcion 1:
Interceptar envento GETVALUE y reemplazar contenido de campo TfrxRichView de nombre RTFFILE

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
     frxReport1.ShowReport;
end;

procedure TForm1.frxReport1GetValue(VarName: String; var Value: Variant);
var
  sl: TStringList;
begin
    
     if CompareText(VarName, 'RTFFILE') = 0 then
     begin
          sl := TStringList.Create;
          sl.LoadFromFile('d:\Demo.rtf');
          {Aquí tendrías que buscar y reemplazar los marcadores de campos de tus tablas...}
          Value := sl.Text;
          sl.Free;
     end;
end;


Opcion 2:
Cargar rtf en campo TfrxRichView y realizar el reemplazo en el contenido de acuerdo a función adjunta...

Código Delphi [-]
{Refrencia
http://www.fast-report.com/en/forum/...php/t3415.html
}
procedure TForm1.Button1Click(Sender: TObject);
var
   RichView:TfrxRichView;
begin
     RichView := TfrxRichView( frxReport1.FindObject( 'Rich1' ) );
     If RichView <> Nil Then Begin
        RichView.RichEdit.Lines.LoadFromFile( 'D:\Demo.rtf' );
        SearchAndReplace( RichView.RichEdit,'[NAME]','CHRISTIAN');
        SearchAndReplace( RichView.RichEdit,'[DIRECCION]','2 NORTE');
        SearchAndReplace( RichView.RichEdit,'[CIUDAD]','CONCEPCION');
     End;
     frxReport1.ShowReport;
end;

procedure TForm1.SearchAndReplace( Rich: TrxRichEdit; InSearch,InReplace: String );
var
   X,ToEnd: Integer;
begin
     X := 0;
     ToEnd := Length( Rich.Text );
     X := Rich.FindText( inSearch,X,ToEnd,[] );

     While X <> -1 Do
     Begin
          Rich.SelStart := X;
          Rich.SelLength := Length( inSearch );
          Rich.SelText := inReplace;
          X := Rich.FindText( inSearch,X + Length( inReplace ),ToEnd,[] );
     End;
end;

Saludos cordiales...

newtron 16-01-2014 09:38:44

Gracias cloayza pero no me gustaría instalar FastReport solo para este tema así que seguiré buscando opciones.

Saludos


La franja horaria es GMT +2. Ahora son las 00:50:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi