FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ver PDF dentro de la aplicaci贸n
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Tue Jun 14, 2016 01:02 PM

Maravilloso. Muy bien.

Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Wed Jun 15, 2016 10:02 AM

Hola,

Estoy probando el ejecutable que has enviado, con un pdf de 302KB con 2 hojas, y no se v茅. aparece el cuadro dentro de la clase tRichEdit5, pero no carga el pdf

Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Wed Jun 15, 2016 11:15 AM
fgondi wrote:Hola,

Estoy probando el ejecutable que has enviado, con un pdf de 302KB con 2 hojas, y no se v茅. aparece el cuadro dentro de la clase tRichEdit5, pero no carga el pdf


Fernando
Construye el ejecutable con el source que he puesto y prueba de nuevo
Yo lo he probado con PDFs m谩s grandes

Si tienes alg煤n problema env铆ame un correo
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Thu Jun 16, 2016 08:17 AM

Esta versi贸n tambi茅n ve los ficheros dentro de un .zip

https://bitbucket.org/fivetech/fivewin- ... explor.exe

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Thu Jun 16, 2016 12:04 PM
Fernando,

Y porque no se encarga Windows de buscar el programa que tenga cada uno configurado ?

Code (fw): Select all Collapse
    nRet := ShellExecute( GetWndApp(), ,cFile, ,cFilePath( cFile ), SW_SHOW )
Salutacions, saludos, regards

"...programar es f谩cil, hacer programas es dif铆cil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Thu Jun 16, 2016 06:12 PM

Carles

Yo he entendido que necesita mostrar el pdf dentro de un "control" en su aplicaci贸n, y no en una ventana externa

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Fri Jun 17, 2016 06:56 AM
Vale,

Pues prueba con esto para jugar un poco con el tema...

Code (fw): Select all Collapse
#include 'fivewin.ch'

#define SW_SHOW 5
#define SW_HIDE 0

STATIC oWnd

*--------------
FUNCTION MAIN()
*--------------
聽 聽 
聽 聽 DEFINE WINDOW oWnd MDI 
聽 聽 ACTIVATE WINDOW oWnd ON INIT Test()
聽 聽 
RETU NIL

*--------------
FUNCTION Test()
*-------------- 
聽 聽 LOCAL cFile 聽 聽 := 'manual.pdf'
聽 聽 LOCAL nRet聽 聽 聽聽:= ShellExecute( oWnd:hWnd, ,cFile, ,cFilePath( cFile ), SW_HIDE )
聽 聽 LOCAL hWndPdf
聽 聽 
聽 聽 SysWait(1)
聽 聽 
聽 聽 hWndPdf := FindWindow(0, cFile + " - Adobe Reader" )聽 聽 聽 聽 

聽 聽 SetParent( hWndPdf, oWnd:hWnd )聽

RETU NIL
Salutacions, saludos, regards

"...programar es f谩cil, hacer programas es dif铆cil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Mon Jun 20, 2016 08:58 AM

Gracias Carles por la informaci贸n,

Ese sistema ya lo hab铆a probado (en concreto para capturar una excel), pero provoca problemas.

1.- Si ya est谩 abierta la aplicaci贸n externa, captura toda ella. Por tanto el documento que estuviese viendo, externo a mi aplicaci贸n, tambi茅n quedar铆a capturado dentro de mi aplicaci贸n.

2潞.- Si no est谩 abierto, parece que funciona bien, hasta que intenta abrir un documento externo a mi aplicaci贸n, sin haber cerrado la captura generada. Este documento externo se abre dentro de mi aplicaci贸n.

De nuevo muchas gracias Carles.

Seguir茅 trabajando con la opci贸n de Cristobal.

Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Tue Jun 21, 2016 06:06 AM

Fernando,

Entiendo :D . Y has probado de usar activex con el shell.explorer ? Esto seguro te funciona y solo tendrias de crear un html de 4 lineas para leer tus pdf's. La ventaja de usar shell.explorer es que seguro q esta en todos los ordenadores de tus clientes, otros activex ya implica gesti贸n de si existe o no. Si necesitas un ejemplo te lo publico

Salutacions, saludos, regards

"...programar es f谩cil, hacer programas es dif铆cil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Tue Jun 21, 2016 08:28 AM

Carles,

Usar el activex del Explorer fue mi primera opci贸n.
En versiones mas modernas del navegador, se abren directamente los pdf. En las antiguas no, pero, tal y como dices, con 4 l铆neas de c贸digo se puede forzar a que las abra.

El navegador usa internamente el activex de acrobat (si est谩 instalado) y ser铆a la opci贸n perfecta.

Sin embargo, tengo otros problemas, que estoy intentando resolver, que me obligan a ejecutar las aplicaciones con "Compatibilidad para XP" y al ejecutarse con esa compatibilidad no cargan los pdf's.

Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Tue Jun 21, 2016 12:16 PM

Fernando,

Para XP no se como poder hacerlo via activex :( . Ya contaras... (Yo si son casos puntuales como dices, chequearia la version win que usas y si es XP lanzaria un winexec() y sino via activex empotrado en la app)

Ya contaras como te has salido...

Salutacions, saludos, regards

"...programar es f谩cil, hacer programas es dif铆cil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 723
Joined: Tue Sep 04, 2007 08:45 AM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Thu Jun 23, 2016 08:12 AM

Cristobal:

Excelente programa. Muy profesional. Tiene un peque帽o "bug" cuando escoges del menu un tipo de fichero y no hay de ellos, se cancela con un error.

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Thu Jun 23, 2016 10:34 AM
Solucionado, gracias

https://bitbucket.org/fivetech/fivewin- ... explor.exe

Code (fw): Select all Collapse
#include "fivewin.ch"
#include "RichEdi5.ch"

//----------------------------------------------------------------------------//

REQUEST HB_CODEPAGE_ESWIN

Static oRTF
Static cRTF
Static nFilter
Static cDirName
Static aFilesTxt
Static aFilesImg
Static aFilesObj
Static aFilesAll

//----------------------------------------------------------------------------//

function Main()

   local aImages
   local oWnd
   local oFont
   local oBrush
   local oBrw
   local nWBrw   := 300

   FW_SetUnicode( .t. )
   HB_CDPSELECT( "ESWIN" )
   HB_SETCODEPAGE( "UTF8" ) // Harbour (not xHarbour) to display unicode filenames

   aFilesTxt := { "RTF", "ZIP", "TXT", "PRG", "C", "CPP", "H", "CH", "RC", "INI", "BAT", "MAK", "XML", "LOG", "PPO" }
   aFilesImg := { "BMP", "PNG", "JPG", "ICO", "DIB", "PCX", "GIF", "WMF" }
   aFilesObj := { "DOC", "XLS", "PPT", "PDF", "DOCX", "XLSX" }
   aFilesAll := { "DBF" }

   //ReadDir()
   
   nFilter  := 0
   cDirName := hb_CurDrive() + ":\" + CurDir()
   aImages  := ReadFolder()

   DEFINE FONT oFont NAME "VERDANA" SIZE 0,-14
   //DEFINE BRUSH oBrush FILE "..\bitmaps\backgrnd\stone.bmp"
   
   DEFINE WINDOW oWnd TITLE " FWExplorer: Visor de Documentos - [ TRichEdit Control ]"
   oWnd:SetFont( oFont )
   
   SET MESSAGE OF oWnd TO "" 2015
   DEFINE BUTTONBAR oWnd:oBar SIZE 70, 32 2015

   DEFINE BUTTON OF oWnd:oBar PROMPT "Exit"   CENTER ACTION ( oWnd:End() )   
   DEFINE BUTTON OF oWnd:oBar PROMPT "Rtf"    CENTER ACTION ( nFilter := 1, ;
          oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
   DEFINE BUTTON OF oWnd:oBar PROMPT "Text"   CENTER ACTION ( nFilter := 11, ;
          oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
   DEFINE BUTTON OF oWnd:oBar PROMPT "Images" CENTER ACTION ( nFilter := 2 , ;
          oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
   DEFINE BUTTON OF oWnd:oBar PROMPT "Object" CENTER ACTION ( nFilter := 3 , ;
          oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
   DEFINE BUTTON OF oWnd:oBar PROMPT "Dbf"    CENTER ACTION ( nFilter := 4 , ;
          oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
   DEFINE BUTTON OF oWnd:oBar PROMPT "All"    CENTER ACTION ( nFilter := 0 , ;
          oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )
   DEFINE BUTTON OF oWnd:oBar PROMPT "Folder" CENTER ;
      ACTION ( cDirName := cGetDir( "Select Folder", GetCurDir() + "\" ), ;
               SetCurDir( cDirName ), ;
               oBrw:aArrayData := ReadFolder(), oBrw:Refresh( .t. ), VerDoc( oBrw ) )

   @ oWnd:nHeight,0 XBROWSE oBrw SIZE nWBrw, -oWnd:nHeight ;
      PIXEL OF oWnd DATASOURCE aImages COLUMNS 1 CELL LINES NOBORDER

   WITH OBJECT oBrw
      :l2007 := .F.
      :aCols[ 1 ]:cHeader := "Files"
      :nStretchCol   := 1
      :bChange       := { | o | VerDoc( o ) }
      :bLDblClick    := { | o | LookOthers( oBrw ) }
      :bClrStd       := { || { If( oBrw:aRow[ 3 ] == 1, CLR_BLUE, CLR_HRED ), CLR_WHITE } }
      :bKeyDown      := { |n,f| if( n = VK_RETURN, Eval( oBrw:bLDblClick ), ) }
      :CreateFromCode()
   END

   WITH OBJECT oWnd
      :nWidth     := ScreenWidth()  * 0.6
      :nHeight    := ScreenHeight() * 0.6
   END

   @ oWnd:nHeight, nWBrw RICHEDIT5 oRTF VAR cRTF OF oWnd ;
     SIZE oWnd:nWidth - (nWBrw+18), oBrw:nHeight*1.82 PIXEL NOBORDER HSCROLL

   ACTIVATE WINDOW oWnd CENTERED ON INIT VerDoc( oBrw ) ;
   ON PAINT ( oRTF:SetSize( oWnd:nWidth - (nWBrw+18), oBrw:nHeight-2 ) ) //ON INIT oWnd:SetControl( oRTF )
   
   RELEASE FONT oFont
   //RELEASE BRUSH oBrush

return nil

//----------------------------------------------------------------------------//

Function VerDoc( oBrw )

   local nOpc      := 0
   local lText     := .F.
   //local cFile     := AnsiToWide( AllTrim( oBrw:aRow[ 2 ] ) )
   local cFile     := if( Len( oBrw:aArrayData ) > 0, AllTrim( oBrw:aRow[ 2 ] ), "" )
   local aFiles    := {}
   local cText     := ""
   
   if !Empty( cFile )
      if !Empty( Ascan( aFilesTxt, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
         nOpc  := 1
      endif
      if Empty( nOpc )
         if !Empty( Ascan( aFilesImg, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
            nOpc  := 2
         endif
      endif
      if Empty( nOpc )
         if !Empty( Ascan( aFilesObj, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
            nOpc  := 3
         endif
      endif
      if Empty( nOpc )
         if !Empty( Ascan( aFilesAll, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
            nOpc  := 4
         endif
      endif
   endif
   oRTF:SetClear()
   oRTF:SelectAll()
   oRTF:Del()

   Do Case
      Case nOpc = 0
         lText  := .T.
         oRTF:SetText( "<File Format not supported>" )
      
      Case nOpc = 1

         if Upper( cFileExt( cFile ) ) <> "RTF"
            if Upper( cFileExt( cFile ) ) == "ZIP"         
               aFiles := hb_GetFilesInZip( cFile )
               if !Empty( aFiles )
                  cText  += Upper( cFileNoPath( cFile ) ) + "=> " + CRLF
                  AEVal( aFiles, { | a | cText += Chr( 9 ) + Chr( 9 ) + Chr( 9 ) + a + CRLF } )
                  lText  := .T.
                  oRTF:SetText( cText )
               endif
            else
               lText  := .T.
               oRTF:SetText( MemoRead( cFile ) )
            endif
         else
            oRTF:LoadFromRTFFile( cFile )
         endif
      
      Case nOpc = 2
      
         oRTF:InsertPictureFile( cFile )

      Case nOpc = 3
         
         oRTF:InsertObject( cFile ) //+ Chr( 0 ) )

      Case nOpc = 4
         lText  := .T.
         oRTF:SetText( "<File Format not supported: Double Click or Intro>" )

      Otherwise
      
         oRTF:LoadRTF( cFile )      

   EndCase

Return nil

//----------------------------------------------------------------------------//

Static Function LookOthers( oBrw )

   local nOpc      := 0
   
   if !Empty( Ascan( aFilesTxt, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
      nOpc  := 1
   endif
   if Empty( nOpc )
      if !Empty( Ascan( aFilesImg, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
         nOpc  := 2
      endif
   endif
   if Empty( nOpc )
      if !Empty( Ascan( aFilesObj, Upper( cFileExt( oBrw:aRow[ 2 ] ) ) ) )
         nOpc  := 3
      endif
   endif
   if Empty( nOpc )
      if Upper( cFileExt( oBrw:aRow[ 2 ] ) ) = "DBF"
         XBrowse( oBrw:aRow[ 2 ] )
      else
         MsgInfo( "Format not supported", oBrw:aRow[ 2 ] )
      endif
   endif

Return nil

//----------------------------------------------------------------------------//

static function ReadFolder()

   local aImages  := {}
   local aSub     := { "*" }
   local c
   local x
   local cPath    := cDirName
   local aDir
   local aAlls    := {}

   AEVal( aFilesTxt, { | a | AAdd( aAlls, a ) } )
   AEVal( aFilesImg, { | a | AAdd( aAlls, a ) } )
   AEVal( aFilesObj, { | a | AAdd( aAlls, a ) } )
   AEVal( aFilesAll, { | a | AAdd( aAlls, a ) } )

   Do Case
      Case nFilter = 0
           aSub    := { "*" }
      Case nFilter = 1
           aSub    := { "rtf" } 
      Case nFilter = 11
           aSub    := aClone( aFilesTxt )
           aSub    := ADel( aSub, 1 )
           ASize( aSub, Len( aSub ) - 1 )
      Case nFilter = 2
           aSub    := aClone( aFilesImg )
      Case nFilter = 3
           aSub    := aClone( aFilesObj )
      Case nFilter = 4
           aSub    := { "dbf" } 
   EndCase
   
   for each c in aSub
      aDir     := Directory( cPath + "\*." + c )
      AEval( aDir, { | a | AAdd( aImages, { Lower( a[ 1 ] ), ;
                           Lower( TrueName( cPath + "\" + a[ 1 ] ) ), 0 } ) } )
   next
   For x = 1 to Len( aImages )
      if !Empty( Ascan( aAlls, Upper( cFileExt( aImages[ x ][ 2 ] ) ) ) )
         aImages[ x ][ 3 ] := 1
      endif
   Next x
   
   ASort( aImages,,,{ | x, y | Lower( x[ 1 ] ) < Lower( y[ 1 ] ) } )

return aImages

//----------------------------------------------------------------------------//
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Fri Jun 24, 2016 08:56 AM

Hola a todos,

retomando la soluci贸n propuesta por Antonio, y que adem谩s servir铆a para m谩s cosas...

https://bitbucket.org/chromiumembedded/cef

Chrome embebido en las aplicaciones. No es una tarea f谩cil pero seria m谩s que interesante poder tener un browser tan completo dentro de nuestras aplicaciones, y con su js y todo lo que eso conlleva.

驴Que os parece?

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Ver PDF dentro de la aplicaci贸n
Posted: Fri Jun 24, 2016 12:01 PM

Chrome MFC ...

https://github.com/VladimirRybakov/cef-mfc

m谩s cerca aun! Un control TCef no estaria mal :)

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"