PDA

Ver la Versión Completa : ReportBuilder, me muestra la pantalla de impresora al enviar a PDF


ArtPortEsp
23-08-2022, 21:36:10
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:

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 :

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.

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

ArtPortEsp
25-08-2022, 17:33:59
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.

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 Notevi
25-08-2022, 18:16:08
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
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 :


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


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


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

lPDFDevice.Free;