Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Como Crear un PDF con Rave (RvRenderPDF) (https://www.clubdelphi.com/foros/showthread.php?t=51265)

FGarcia 11-12-2007 05:28:36

Como Crear un PDF con Rave (RvRenderPDF)
 
Hola!

Actualmente uso este codigo para imprimir un reporte prediseñado en el Rave Reports:

Código Delphi [-]
with ADODiario do
      begin
        close;
        sql.Clear ;
        sql.Add('SELECT * FROM Captura ' +
              'WHERE ((hfCaptura BETWEEN :HFIni AND :HFFin) ' +
             'AND (Dispositivo = :Numero)) ' +
              'ORDER BY Consecutivo');
        Parameters.ParamByName('HFIni').Value := Inicio;
        Parameters.ParamByName('HFFin').Value := Final;
        Parameters.ParamByName('Numero').Value := IDDispositivo;
        open;
      end;
    
    if not ADODiario.IsEmpty then
      with frmMain.RvProject1 do
        begin
          SetParam('Titulo', strTitulo);
          SelectReport('ReporteDiario', false);
          Execute ;
        end
   else
       ShowMessage('No hay datos para imprimir');


Hasta aqui no hay problema funciona OK. Mi necesidad ademas de imprimirlo es que debo de guardar el reporte en formato PDF. Para esto Rave tiene un componente llamado RvRenderPDF. Este componente tiene una propiedad que requiere de dos parametros:

Cita:

RvRenderPDF.PrinterRender(NDRStream:TStream, OutputFiliName: TFileName);
Aqui es mi duda ¿de donde obtengo de acuerdo a el codigo anterior el objeto TStream?

gracias por la ayuda!

FGarcia 11-12-2007 06:27:50

Buscando encontre que debo de hacer esto:

Código Delphi [-]
//Declarar una variable
var 
   Informe: TMemoryStream;
 
//Modificar esta seccion del codigo
if not ADODiario.IsEmpty then
      begin
        Informe := TmemoryStream.Create ;  //Nueva linea
        with frmMain.RvProject1 do
        begin
          SetParam('Titulo', strTitulo);
          SelectReport('ReporteDiario', false);
          SaveToStream(Informe);
          Execute ;
          frmMain.RvRenderPDF1.PrintRender(Informe,'reportehoy.pdf'); //Nueva linea
        end;
      end;

al ejecutar aparece un error

---------------------------
Error
---------------------------
Unable to gain control of RAVE Data Communication System.
---------------------------
Cancel Retry
---------------------------

oprimo el boton retry El reporte impreso se genera adecuadamente pero el archivo pdf no:

---------------------------
Debugger Exception Notification
---------------------------
Project Jugoso.exe raised exception class EReportPrinter with message
'Unexpected header code [82] found in report file.'. Process stopped. Use Step
or Run to continue.
---------------------------
OK Help
---------------------------

el archivo reportehoy.pdf se crea, sin embargo al intentar abrirlo con Acrobat este dice que el archivo esta dañado. ¿Alguna idea?

Oriol Carreras 13-12-2007 16:38:47

Yo utilizo este codigo fuente y me ha funcionado:

necesitamos un TRvSystem, TRvProject y un TRvRenderPDF
Vinculamos el RvProject.Engine -> RvSystem


Código:

RvSystem.DefaultDest := rdFile;
RvSystem.DoNativeOutput := false;
RvSystem.RenderObject := RvRenderPdf;
RvSystem.OutputFileName := 'c:\ruta\mifichero.pfd';
RvSystem.SystemSetups := RvSystem.SystemSetups - [ssAllowSetup];
RvProject.Execute

Saludos.

uri.

FGarcia 13-12-2007 18:39:36

Gracias por responder, El codigo que pones ya lo habia visto sin embargo esto solo es valido para crear el archivo pdf, yo necesito que se imprima en la impresora y a la vez que se genere el archivo pdf. Revisando los foros de noticias encontre que para evitar el primer error que menciono en el post anterior debo declarar lo siguiente en codigo del dpr:

Código Delphi [-]
//en USES 
SysUtils, RpDefine,
 
//en el codigo de inicializacion:
 
{$R *.res}
 
begin

  RPDefine.DataID := IntToStr(Application.Handle);
  Application.Initialize;
  Application.Title := 'MiApp';

El segundo error aun no se que es o a que se debe. Agradesco tu ayuda y si tienes otra sugerencia sera bienvenida.

Oriol Carreras 13-12-2007 19:18:09

Eso me pasa por no leer lo que tengo que leer :)

Respecto al segundo error has provado en lugar de utilizar

Código:

SaveToStream(Informe);
utilizar

Código:

SaveRaveBlob(Informe);
ya que tambien tiene como parametro un TStream y tiene mas pinta de formatear el stream con el formato de Rave.
No lo he provado, ya me diras algo.

Y en el caso de que tampoco funcione, repetir el proceso dos veces:
1. para imprimir
2. para genererar el pfd
con la misma query, sin abrir ni cerrar los datos son los mismos.

saludos.

uri.

martita 23-06-2011 21:22:31

Ok, Pero No Aparece Preview
 
hola he provado el codigo que pusieron
pero se va directo a generar el archivo pdf y no muestra el reporte
en pantalla osea un preview, incluso le agregue una linea al codigo
que esta marcarda con asteriscos para ver si asi hacia preview
pero negativo se va directo a generar el pdf, como puedo hacer
para que me genere el preview en pantalla y tambien genere el pdf?

rvproject1.ProjectFile:=lreporte.Caption;
rvproject1.SetParam('periodo1',FormatDateTime('dd/mm/yyyy', cal1.Date));
rvproject1.SetParam('periodo2',FormatDateTime('dd/mm/yyyy', cal2.date));
rvproject1.SetParam('fecha',FormatDateTime('dd/mm/yyyy', date()));
rvproject1.SetParam('hora',FormatDateTime('HH:MM:SS', time()));
rvproject1.SetParam('equipo', edit1.text);
rvproject1.SetParam('chofer', edit2.text);

rvsystem1.DefaultDest:=rdpreview; //***** agregue esta linea
RvSystem1.DefaultDest := rdFile;
RvSystem1.DoNativeOutput := false;
RvSystem1.RenderObject := RvRenderPdf1;
RvSystem1.OutputFileName := 'c:\mifichero.pdf';
RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];
rvsystem1.DefaultDest:=rdpreview;

rvproject1.Execute;


La franja horaria es GMT +2. Ahora son las 22:52:28.

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