Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   ReportBuilder, me muestra la pantalla de impresora al enviar a PDF (https://www.clubdelphi.com/foros/showthread.php?t=95794)

ArtPortEsp 23-08-2022 21:36:10

ReportBuilder, me muestra la pantalla de impresora al enviar a PDF
 
1 Archivos Adjunto(s)
Hola;
estoy experimentando un problema algo raro; estoy generando un reporte en PDF que posteriormente envío por correo electrónico desde la pantalla de preview...
el codigo para "generar el reporte" es este:
Código Delphi [-]
               Fcartas.Recpagesp.PDFSettings.Title := 'Recordatorio de pago '+Qrecibos.fieldbyname('re_pol').asstring+' ('+StringReplace(Qrecibos.fieldbyname('re_num').asstring, '/', '-', [rfReplaceAll, rfIgnoreCase])+')';
            Fcartas.Recpagesp.Print;
en la pantalla de preview tengo un botón que ejecuta la accion de enviar el reporte por correo :
Código Delphi [-]
     ppViewer1.Report.AllowPrintToFile := True;
     ppViewer1.Report.DeviceType := dtPDF;

     ppViewer1.Report.PDFSettings.Author := 'SEGSYS';
     //ppViewer1.Report.PDFSettings.Title  := Ltitulo.Caption;

     ppViewer1.Report.PDFSettings.OpenPDFFile := True;

     xcarpeta := 'c:\asap\temp';
     xarchivo  := ppViewer1.Report.PDFSettings.Title+'.pdf';

     If ForceDirectories(xcarpeta) then
          ppViewer1.Report.TextFileName := xarchivo;

     lPDFDevice := TppPDFDevice.Create(nil);

     if (FOutputStream = nil) then
          FOutputStream := TMemoryStream.Create
     else
          FOutputStream.Clear;


     try
          lPDFDevice.PDFSettings   := ppViewer1.Report.PDFSettings;
          lPDFDevice.OutputStream  := FOutputStream;        // assign output stream
          lPDFDevice.Publisher     := ppViewer1.Report.Publisher;

     // generate the report
     ppViewer1.Report.PrintToDevices;

     finally
          lPDFDevice.Free;
     end;
la primera vez que genero el reporte lo hace perfectamente, el problema viene cuando lo vuelvo a intentar; me manda la pantalla de la impresora [imagen] y me abre el acrobat con el archivo PDF
Alguna sugerencia?

duilioisola 24-08-2022 17:09:54

No conozco reportbuilder, pero podría ser que no entre la segunda vez a la línea donde se asigna el nombde de archivo si la carpeta ya existe.
Código Delphi [-]
    If ForceDirectories(xcarpeta) then
        ppViewer1.Report.TextFileName := xarchivo;

ArtPortEsp 25-08-2022 17:33:59

Cita:

Empezado por duilioisola (Mensaje 548030)
No conozco reportbuilder, pero podría ser que no entre la segunda vez a la línea donde se asigna el nombde de archivo si la carpeta ya existe.
Código Delphi [-]
    If ForceDirectories(xcarpeta) then
        ppViewer1.Report.TextFileName := xarchivo;

Al principio pensé que era eso, pero ni siquiera llega a presentarme la pantalla de preview que es donde esta ese código...

ArtPortEsp 25-08-2022 18:01:27

Agregando :

ShowPrintDialog :=False;
ShowCancelDialog :=False;
ModalCancelDialog :=False;


Antes de :

Fcartas.Recpagesp.Print;

Ya no muestra el dialogo de la impresora, pero me abre el Acrobat Reader!!!

Casimiro Noteví 25-08-2022 18:16:08

Cita:

Empezado por ArtPortEsp (Mensaje 548047)
Agregando :
ShowPrintDialog :=False;
ShowCancelDialog :=False;
ModalCancelDialog :=False;
Antes de :
Fcartas.Recpagesp.Print;
Ya no muestra el dialogo de la impresora, pero me abre el Acrobat Reader!!!

Por esto:
ppViewer1.Report.PDFSettings.OpenPDFFile := True;

ArtPortEsp 25-08-2022 18:48:10

Cita:

Empezado por Casimiro Notevi (Mensaje 548051)
Por esto:
ppViewer1.Report.PDFSettings.OpenPDFFile := True;

correcto (muchas gracias), corregida esa parte...

el problema es que sigue "fallando" en las sucesivas ejecuciones del código; la idea es que siempre me muestre la pantalla de preview cuando hago el PRINT y eso solo lo hace la primera vez.

ArtPortEsp 25-08-2022 18:59:12

Problema corregido,

como siempre; uno se deja llevar por las repeticiones cuando prueba el codigo y no alcanza a ver los errores obvios...

el problema estaba en el boton de la ventana de preview del reporte :

Código:

    ppViewer1.Report.AllowPrintToFile := True;
    ppViewer1.Report.DeviceType := dtPDF;

necesitaba "resetear" estas propiedades y lo hice al finalizar el evento del boton:

Código:

    finally
          ppViewer1.Report.AllowPrintToFile := False;
          ppViewer1.Report.DeviceType := dtScreen;

          lPDFDevice.Free;



La franja horaria es GMT +2. Ahora son las 15:50:17.

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