Ir al contenido


Foto

mostrar un reporte en pdf desde web


  • Por favor identifícate para responder
14 respuestas en este tema

#1 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 01 septiembre 2011 - 01:11

Saludos amigos, eme aquí con un problema, necesito hacer un CGI que al pasarle un valor como parametro este CGI me imprima un reporte en formato PDF y lo muestre en una pagina web., esto por que el CGI será invocado por un sistema hecho en php y nomas llamará al CGI y recibira como respuesta el pdf.

Estoy usando DELPHI 2007 y QuickReports 4

Alguna idea, una sugerencia???

HELP :



  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 02 septiembre 2011 - 06:44

A ver amigo, ¿qué quieres invocar desde PHP?, un reporte hecho en Delphi + Quick y/o un reporte PDF desde BD???.

Saludos.

  • 0

#3 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 02 septiembre 2011 - 08:26

A ver amigo, ¿qué quieres invocar desde PHP?, un reporte hecho en Delphi + Quick y/o un reporte PDF desde BD???.

Saludos.


SI amigo, mira, yo tengo un sistema que genera un reporte y bueno ya lo puedo pasar a PDF, esto esta en delphi con quickreports, ahora mi cliente me solicita ver cierta información en web, bueno ya desarrolle un módulo que muestra la info requerida, pero ahora el cliente me solicito el mismo reporte, y este es por ID de la info que muestro, pero como ya lo tengo, lo único que quiero es pasar este reporte a un CGI para asi poder llamarlo desde la aplicaicon web (hecha en php).

si me explique?

y pos no sé ni por donde empezar, alguna idea?

:embarrassed:

  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 02 septiembre 2011 - 09:03

Hola amigo, te comento que yo tengo algo parecido. Hice un CGI en delphi que corre con apache, es cgi devuelve al navegador una imagen JPG que se visualiza en el navegador.

Quiero imaginar que en tu caso es muy parecido, necesitas un cgi  que envie el archivo pdf al navegador para su visualización. De ser así el criterio debe ser el mismo que el vio de la imagen desde mi cgi
  • 0

#5 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 02 septiembre 2011 - 09:15

Hola amigo, te comento que yo tengo algo parecido. Hice un CGI en delphi que corre con apache, es cgi devuelve al navegador una imagen JPG que se visualiza en el navegador.

Quiero imaginar que en tu caso es muy parecido, necesitas un cgi  que envie el archivo pdf al navegador para su visualización. De ser así el criterio debe ser el mismo que el vio de la imagen desde mi cgi


Que tal amigo, andale, es algo similar, obviamente cuando llamas al CGI le pasas un valor como parametro para que este internamente procese la info y regrese el pdf al navegador con la información adecuada...

  • 0

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 02 septiembre 2011 - 09:22

Te parece bien si te envio el código de php y del programa? o solo quieres el del CGI?
  • 0

#7 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 02 septiembre 2011 - 09:28

Te parece bien si te envio el código de php y del programa? o solo quieres el del CGI?


Gracias amigo pues si no tienes inconveniente, de ambos, para revisarlo. graicas
  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 02 septiembre 2011 - 09:48

Listo amigo enviado a tu correo de efectisoft
  • 0

#9 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 02 septiembre 2011 - 09:54

Excelente amigo, deja lo reviso y cualquier detalle si no lo entiendo te pregunto, un saludo.
  • 0

#10 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 02 septiembre 2011 - 11:32

Excelente amigo, deja lo reviso y cualquier detalle si no lo entiendo te pregunto, un saludo.


pero por supuesto amigo. :D en todo lo que pueda ayudarte.
  • 0

#11 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 02 septiembre 2011 - 12:52

Poli, fijate que dandome una idea con lo que me mandaste ya pude hacer lagunas cosas, pero al momento de crear el reporte me manda este error "Error There is no default printer currently selected", esto ya corriendo como CGI, por que unso la misma unidad para correrlo directametne con un sistema que adicione y ahi no me marca ningun error...

Que estare omitiendo? o por que me sale ese error en el navegaro web?


  • 0

#12 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 02 septiembre 2011 - 01:03

Que estare omitiendo? o por que me sale ese error en el navegaro web?


Seguramente se debe a que el cgi está corriendo fuera del contexto de usuario, vas a tener que incluir lo siguiente:



delphi
  1. function NTLogon(User: string; Password: string; Dominio: String; Token: cardinal): String;
  2. begin
  3. Result := '';
  4. try
  5.   if LogonUser(PChar(User), Pchar(Dominio), PChar(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, Token) then
  6.   if ImpersonateLoggedOnUser(token) then
  7.     Result := 'Nada';
  8. except
  9.   on E: Exception do
  10.     Result := E.Message;
  11.   end;
  12. end;
  13.  
  14.  
  15. function NTLogoff(Token: cardinal): String;
  16. begin
  17.   Result := 'Nada';
  18. try
  19.   CloseHandle(Token);
  20. except
  21.   on E: Exception do
  22.     result := E.Message;
  23.   end;
  24. end;
  25.  
  26.  
  27. function Tworkflow.GetFlujograma(PsIdInstWrf: AnsiString): TFlujograma;
  28.   Var
  29.     LsMensaje      : String;      // Mensaje de esatus
  30.     Token          : integer;
  31. begin
  32.   Result := TFlujograma.Create;
  33.   Result.Estatus := 'Nada';
  34.   Try
  35.     if NTLogon('usuario','password','dominio',Token) = 'Nada' then begin
  36.     Result.Flujo := DameFlujograma(LsMensaje);
  37.     Result.Estatus := LsMensaje;
  38. end;
  39. NTLogoff(Token);
  40.   Except
  41.     On Error: Exception Do
  42.       Begin
  43.         Result.Estatus := Error.Message;
  44.       End;
  45.   End;
  46. end;


  • 0

#13 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 03 septiembre 2011 - 04:19

Excelente amigo, con eso ya no me marca error, pero fijate que se me ocurrio manejarlo con TMemoryStream para poderlo visualizar y ya no marca error sólo que el TMemoryStream me regresa vacio y no se muestra nada, te comento como lo tengo.



delphi
  1. {Esta es la funcion que utilizo para crear el reporte}
  2. function VistaPreviaStream(sValId: string; var msMemS: TMemoryStream; var sVal: string): Boolean;
  3. var
  4.   PDFfiltro: TQRPDFDocumentFilter;
  5.   sCFDFilePDF: string;
  6. begin
  7.   Result := True;
  8.  
  9.   sCFDFilePDF := sRutaExe+'REP_'+sValId+'.pdf';
  10.   {}
  11.   qrReporte := TqrReporte.Create(nil);
  12.   with qrReporte do
  13.     try
  14.       ReportTitle := 'Reporte '+sValId;
  15.       try
  16.         PDFfiltro := TQRPDFDocumentFilter.Create(sCFDFilePDF);
  17.         if qrReporte <> nil then begin
  18.           qrReporte.ExportToFilter(PDFfiltro);
  19.           msMemS := TMemoryStream(PDFfiltro.Stream);
  20.         end;
  21.       except
  22.         Result := False;
  23.       end;
  24.     finally
  25.       Free;
  26.     end;
  27. end;



Y asi es como lo estoy tratando de mostrar....



delphi
  1. ...
  2.   msStreamMem := TMemoryStream.Create;
  3.   msStreamMem.Clear;
  4.  
  5.   if NTLogon(sNTUsu,sNTPas,sNTDom,Token) = 'Nada' then begin
  6.     VistaPreviaStream(sID,msStreamMem,sMsg);
  7.   end;
  8.   NTLogoff(Token);
  9.  
  10.   if msStreamMem.Size = 0 then
  11.     raise(Exception.Create('No se puede mostrar'));
  12.  
  13.   Response.ContentType := 'application/pdf';
  14.   Response.ContentStream := msStreamMem;



de esto amigo, cabe mencionar que si me crea el reporte bien en la ruta que le doy, pero y ano lo puede mostrar.

  • 0

#14 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 03 septiembre 2011 - 08:56

Y no te convendría más hacer el cgi como Webservice amigo? de esa manera devuelves el stream a php contenido en la respuesta XML y php la lee usando SOAP. Así es como lo hago en el ejemplo que te envié amigo. U otra cosa, puedes devolver la respuesta usando uuencode que es el estándar usado en los adjuntos de correo, php lo recibe lo transforma y devuelve al navegador el pdf ya formado.

aqui más info http://www.livingint..._att_encode.htm
  • 0

#15 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 mensajes
  • LocationMéxico D.F.

Escrito 03 septiembre 2011 - 04:49

SI amigo, eso es lo que voy a hacer, por que tambien me interesa meterme en los webservices  como tales, pero fijate que revisando lo que hice, me encontre con dos detalles, el reporte que ya tengo, por alguna razon no lo puedo exportar a PDF desde el CGI, si mando llamara ese mismo procedure desde un sistema standalo furula de maravillas, caso para la araña...

Luego creo un reporte sencillo nuevo y ese si lo puedo exportar, pero ya no lo puedo cargar al TMemoryStram como lo estaba haciendo, tengo que invocar lo siguiente:

esto no me funciona::::


delphi
  1.       sCFDFilePDF := sRutaExe+'REP_'+sValId+'.pdf'
  2.         PDFfiltro := TQRPDFDocumentFilter.Create(sCFDFilePDF);
  3.         qrReporte.ExportToFilter(PDFfiltro);
  4.         msMemS := TMemoryStream(PDFfiltro.Stream);



Esto si me sirve y funcion OK:



delphi
  1.       sCFDFilePDF := sRutaExe+'REP_'+sValId+'.pdf'
  2.         PDFfiltro := TQRPDFDocumentFilter.Create(sCFDFilePDF);
  3.         qrReporte.ExportToFilter(PDFfiltro);
  4.         msMemS.LoadFromFile(sCFDFilePDF);



No se que sera, voy a intentar con lo que ma pasaste y te comento, nuevamente gracias y saludos, sigo en que si algo se me atora te comento... :)

Pstta:
Me refiero que si me atoro con el código...

Aclaro por aquellos que mal interpretan las cosas, jejeje saludos amigos...
  • 0




IP.Board spam blocked by CleanTalk.