Ejemplo con Image2Pdf SOLUCIONADO

Post Reply
User avatar
Armando
Posts: 3271
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Been thanked: 2 times
Contact:

Ejemplo con Image2Pdf SOLUCIONADO

Post by Armando »

Amigos:

He descargado el ZIP de image2pdf y trato de probarla pero no encuentro la hebra, alguien podría tirarme
una punta?, si es un ejemplo mejor!.

He buscado en el foro pero los ejemplos que encontré tampoco me funcionan.

En el zip vienen varias DLLS, cual usar?

Saludos
Last edited by Armando on Thu Sep 06, 2012 2:00 am, edited 1 time in total.
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
José Vicente Beltrán
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España
Contact:

Re: Ejemplo con Image2Pdf

Post by José Vicente Beltrán »

Hola Armando,
Yo lo hago de la siguiente forma:

1.- creo un archivo 'opciones.txt' (que coloco junto al EXE Image2PDF) con el siguiente contenido:

Code: Select all | Expand


-UseActualImageDPI
-UseEMFDeviceSize
 


y después desde código FW llamo al EXE que convierte a PDF (no utilizo las DLL)

Code: Select all | Expand


    local nFor, cLista:= ""
    local cVerPDF := " -openpdf"

        FOR nFor := 1 TO len(aFiles)
            cLista += "-image "+aFiles[nFor]+" "  //-----------> array de WMF  a convertir
        NEXT

        if file(RutaDelExe+"opciones.txt")
            waitrun( RutaDelExe+cLista+;
                     "    -output "+RutaDelExe+cNombre+;   //------> nombre del documento PDF de salida
                        " -Options "+RutaDelExe+"opciones.txt"+;
                        cVerPDF+;      //-----> permite ver el PDF generado
                        " -License XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" )  //------> numero de licencia de uso
        else
            msgStop( "No existe el archivo:"+CRLF+CRLF+;
                        RutaDelExe+"opciones.txt", "Avisor")
        endif
 


Espero haber ayudado
Saludos :shock:
George
Posts: 726
Joined: Tue Oct 18, 2005 6:49 pm

Re: Ejemplo con Image2Pdf

Post by George »

Armando,
Aqui te dejo la funcion que añadi, en rpreview.prg, para salvar un archivo en formato PDF usando Image2Pdf.dll.

Code: Select all | Expand

FUNCTION SaveAsPDF(cRepName)
    // cRepName = Name of Report to be saved
    LOCAL result, hLib
    LOCAL cBuffer:=space(300)

    hLib = LOADLIBRARY( "Image2PDF.dll" )

    I2PDF_UseEMFDeviceSize()

    I2PDF_License("Image2PDF License Number") // Put here your Image2PDF License Number

    nRc :=  I2PDF_Log(".\log.txt", 3)

    I2PDF_MetaTextFitBoundingRect()

    nRc := I2PDF_UseEMFDeviceSize()

    nRc := I2PDF_MetaToNativePDF()

    nRc := I2PDF_SetDPI(0)                     //- or to whatever value you require

    DECLARE aEmf := {}
    aEmf := directory("*.emf")

    FOR nX := 1 TO  len(aEmf)
        nRc := I2PDF_AddImage(alltrim(aEmf[nX, F_NAME]))
    NEXT

    nResult := I2PDF_MakePDF(cRepName, 0, @cBuffer ,300)

    FreeLibrary(hLib)

    AEVAL(DIRECTORY(cAppliDir+"\*.EMF"), { |aFile| ferase(aFile[F_NAME])})   // cAppliDir is application path
RETURN (.T.)
 


Saludos,

George
User avatar
Armando
Posts: 3271
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Been thanked: 2 times
Contact:

Re: Ejemplo con Image2Pdf

Post by Armando »

José:

Agradezco el ejemplo, me amplia el panorama pues ahora conozco otra forma de ejecutar image2pdf, aunque
mi intención es usar la DLL, de todas formas muy agradecido con tu ejemplo.

George:

Voy a probar tu ejemplo ya daré mis resultados. Por cierto, necesito algunos wrappers???, alguna LIB?.

Nuevamente, muy agradecido a ambos.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
George
Posts: 726
Joined: Tue Oct 18, 2005 6:49 pm

Re: Ejemplo con Image2Pdf

Post by George »

Armando,
Aqui estan los wrappers:

Code: Select all | Expand

///////////////////////////////////////////////////////////////////////////
DLL32 Function I2PDF_AddImage(image as LPSTR);
AS LONG PASCAL FROM "I2PDF_AddImage" LIB "IMAGE2PDF.DLL"
//Public Shared Function I2PDF_AddImage(ByVal image As String) As Integer
  //  End Function

DLL32 Function I2PDF_SetProducer(producer as LPSTR);
AS LONG PASCAL FROM "I2PDF_SetProducer" LIB "IMAGE2PDF.DLL"
//Public Shared Function I2PDF_SetProducer(ByVal producer As String) As Integer
//    End Function


DLL32 Function I2PDF_GetDLLVersion();
AS LONG PASCAL FROM "I2PDF_GetDLLVersion" LIB "IMAGE2PDF.DLL"
//Public Shared Function I2PDF_GetDLLVersion() As Integer
//    End Function


DLL32 Function I2PDF_License(code As LPSTR);
AS LPSTR PASCAL FROM "I2PDF_License" LIB "IMAGE2PDF.DLL"
// Public Shared Sub I2PDF_License(ByVal code As String)
//   End Sub


DLL32 Function I2PDF_MetaImageMaxMP(maxmp as LONG);
AS LONG PASCAL FROM "I2PDF_MetaImageMaxMP" LIB "IMAGE2PDF.DLL"
//Public Shared Function I2PDF_MetaImageMaxMP(ByVal maxmp As Double) As Integer
//    End Function

DLL32 Function I2PDF_DeleteImagesOnConvert();
AS VOID PASCAL FROM "I2PDF_DeleteImagesOnConvert" LIB "IMAGE2PDF.DLL"
//Public Shared Sub I2PDF_DeleteImagesOnConvert()


DLL32 Function I2PDF_SetDPI(dpi as LONG);
AS LONG PASCAL FROM "I2PDF_SetDPI" LIB "IMAGE2PDF.DLL"
//Public Shared Function I2PDF_SetDPI(ByVal dpi As Integer) As Integer
//   End Function

DLL32 Function I2PDF_MakePDF(output As LPSTR, options as LONG, @cBuffer As LPSTR, ;
    maxErrorTextSize As LONG);
AS LONG PASCAL FROM "I2PDF_MakePDF" LIB "IMAGE2PDF.DLL"
 //Public Shared Function I2PDF_MakePDF(ByVal output As String, ByVal int options,;
 //  ByRef errorText As String, ByVal maxErrorTextSize As Integer) As Integer
 // End Function

DLL32 Function I2PDF_SetPermissionPrint();
AS VOID PASCAL FROM "I2PDF_SetPermissionPrint" LIB "IMAGE2PDF.DLL"
//Public Shared Sub I2PDF_SetPermissionPrint()
//   End Sub


DLL32 Function I2PDF_MetaImageMaxMP_Int(maxmp as LONG);
AS LONG PASCAL FROM "I2PDF_MetaImageMaxMP_Int" LIB "IMAGE2PDF.DLL"
//Public Shared Function I2PDF_MetaImageMaxMP_Int(ByVal maxmp As Integer) As Integer
//   End Function

DLL32 Function I2PDF_UseEMFDeviceSize();
AS VOID PASCAL FROM "I2PDF_UseEMFDeviceSize" LIB "IMAGE2PDF.DLL"
//Public Shared Sub I2PDF_UseEMFDeviceSize()
//  End Sub

DLL32 Function I2PDF_MetaToNativePDF();
AS VOID PASCAL FROM "I2PDF_MetaToNativePDF" LIB "IMAGE2PDF.DLL"
//Public Shared Sub I2PDF_MetaToNativePDF()
//  End Sub

DLL32 Function I2PDF_Log(logFilename As LPSTR, logLevel as LONG);
AS LONG PASCAL FROM "I2PDF_Log" LIB "IMAGE2PDF.DLL"

DLL32 Function I2PDF_MetaTextFitBoundingRect();
AS VOID PASCAL FROM "I2PDF_MetaTextFitBoundingRect" LIB "IMAGE2PDF.DLL"
 


Espero te sean de utilidad.

George
User avatar
Armando
Posts: 3271
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Been thanked: 2 times
Contact:

Re: Ejemplo con Image2Pdf

Post by Armando »

George:

Ahora va mejorando !, ya compilo pero se me queda colgado en la prueba, sera que tengo
la dll o Lib equivocadas?, aquí mi código:

Code: Select all | Expand


FUNCTION SaveAsPDF(aFiles,pdfFileName)
    LOCAL imageFilename := "   "
    LOCAL ix
    LOCAL iErr := 0
    LOCAL errorText := "  "

   hLib := LoadLib32( "Image2PDF StdCall.DLL" )

   iErr := I2PDF_License( "YOUR LICENSE CODE HERE" )

   // ensure that any EMF files are converted at highest quality
//   iErr := I2PDF_MetaToNativePDF( )
//   iErr := I2PDF_UseEMFDeviceSize( )
//   iErr := I2PDF_SetDPI(0) // Set PDF DPI to the same as the image

   // Build the pages using the array of image files
   FOR ix := 1 TO LEN( aFiles )
      imageFilename := aFiles[ix]
      IF (iErr := I2PDF_AddImage(imageFilename)) # 0
         EXIT
      ENDIF
   NEXT

   // Create the PDF.
   iErr := I2PDF_MakePDF(Rtrim(pdfFilename), 0, errorText, 40 )

    MsgInfo(iErr)

   FreeLib32( hLib )
RETURN (.T.)
 


Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
George
Posts: 726
Joined: Tue Oct 18, 2005 6:49 pm

Re: Ejemplo con Image2Pdf

Post by George »

Posiblemente es un problema con la DLL.
Trata con otra de las DLL.
Te sugiero tambien que verfiques los resultados a cada una de las llamadas que haces a la funciones.
Por ejemplo:

Code: Select all | Expand

hLib = LOADLIBRARY( "Image2PDF.dll" )
     msginfo(hLib)
     MsgInfo(I2PDF_GetDLLVersion())
 
User avatar
Armando
Posts: 3271
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Been thanked: 2 times
Contact:

Re: Ejemplo con Image2Pdf

Post by Armando »

George:

Ya compila bien y no se cuelga, te muestro el resultado de los MsgInfo()

Code: Select all | Expand


FUNCTION SaveAsPDF(aFiles,pdfFileName)
    LOCAL imageFilename := "   "
    LOCAL ix
    LOCAL iErr := 0
    LOCAL errorText := "  "

    MsgInfo(pdfFileName)                                    // C:\PdvWin\Pdfs\Prueba.Pdf

   hLib := LoadLib32( "Image2PDF.DLL" )

    MsgInfo(hLib,"hLib")                                    // 268435456
   MsgInfo(I2PDF_GetDLLVersion(),"Versión")        // 273

   iErr := I2PDF_License( "YOUR LICENSE CODE HERE" )

    MsgInfo(iErr,"Licencia")                            //

   // ensure that any EMF files are converted at highest quality
   iErr := I2PDF_MetaToNativePDF( )
    MsgInfo(iErr,"MetaNative")                          // nil
   iErr := I2PDF_UseEMFDeviceSize( )
    MsgInfo(iErr,"UseEMF")                              // nil
   iErr := I2PDF_SetDPI(0) // Set PDF DPI to the same as the image
    MsgInfo(iErr,"SetDPI")                              // 0

   // Build the pages using the array of image files
   FOR ix := 1 TO LEN( aFiles )
      imageFilename := aFiles[ix]
        MsgInfo(ImageFileName,"FileName")           // C:\Users\Armando\AppData\Local\Temp\21064705.Emf
      IF (iErr := I2PDF_AddImage(imageFilename)) # 0
            MsgInfo(iErr,"iErr")                            // No pasa por aquí
         EXIT
      ENDIF
   NEXT

   // Create the PDF.
   iErr := I2PDF_MakePDF(Rtrim(pdfFilename), 0, errorText, 40 )

    MsgInfo(errorText)
    MsgInfo(iErr,"iErr1")                               // 3  creo que aquí esta el problema

   FreeLib32( hLib )
RETURN (.T.)
 


Al final de cada línea con MsgInfo() esta el resultado, revisando un poco veo que el problema esta
en la llamada a I2PDF_MakePDF, el contenido de la variable errorText es: GetEMFBound failed

Y el error 3 segun la doc de image2pdf es: Internal PDF generation error, podrían ser los nombres largos???

Saludos y muchas gracias por tu apoyo
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
George
Posts: 726
Joined: Tue Oct 18, 2005 6:49 pm

Re: Ejemplo con Image2Pdf

Post by George »

Armando,
Trata de esta manera:

Code: Select all | Expand

nResult := I2PDF_MakePDF(cRepName, 0, @cBuffer ,300)

Donde cRepName es el nombre del reporte y cBuffer es una variable char(300) que debes pasarla por referencia.
Verifica el resultado de nResult.

George
User avatar
Armando
Posts: 3271
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Been thanked: 2 times
Contact:

Re: Ejemplo con Image2Pdf

Post by Armando »

George:

El resultado es el mismo: :cry:

Texto del error: GetEmfBounds failed
Número de error: 3

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
acuellar
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Ejemplo con Image2Pdf SOLUCIONADO

Post by acuellar »

Hola Armando.

El rpreview ya guarda en formato PDF usando Office
Tambien existe el nconvert.exe de XnView que es menos complicado.

Por si quiren pasar un TXT a PDF les dejo este pequeño programa.
http://200.58.169.10/acr/txt2pdf.rar

Solo hay que escribir el siguiente código:

Code: Select all | Expand


 WaitRun("txt2pdf C:\prueba\RRHH\TXTFILE.TXT C:\prueba\PDFFILE",0)
 


Espero les sirva

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
Armando
Posts: 3271
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Been thanked: 2 times
Contact:

Re: Ejemplo con Image2Pdf SOLUCIONADO

Post by Armando »

Adhemar:

Muchas gracias por el tip y por el programa, por el momento ya brinque la línea gracias
a este excelente foro y en especial a George.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Post Reply