Spanish Fallo al leer PDFs, con Libreria PDFViewer [SOLUCIONADO]

JMMF

Member
Licensed User
Longtime User
Hola a todos

Mi intención es ver desde la propia app un PDF creado y guardado anteriormente

Intento verlo así

B4X:
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    Dim pdfv As PDFViewer               'Trabajos con Pdf(Libreria PDFViewer)
       Dim SMTP As SMTP                'Trabajos con Gmail(Libreria Net)
    Dim GD As GradientDrawable

    Private PnlVerPdf As Panel
End Sub

Sub Activity_Create(FirstTime As Boolean)
    If FirstTime Then
        Activity.AddMenuItem3("Enviar PDF","EnviarGmail",LoadBitmap(File.DirAssets,"enviarPDF.png"),True)
    End If
    ver_Pdf
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub ver_Pdf
'Titulo de Activity
    GD.Initialize("TL_BR",Array As Int(Colors.DarkGray,Colors.Black))
    Activity.Background=GD
    Activity.Title = Main.NombrePDF
   
'Crea el PnlVerPdf
    PnlVerPdf.Initialize("")
    PnlVerPdf.Background=GD
    Activity.AddView(PnlVerPdf,0,0,100%x,100%y)
    PnlVerPdf.Visible=True

'Crea el pdfv
    'Dim pc As Int = 0
    pdfv.init
    PnlVerPdf.AddView(pdfv,-1,-1,100%x,100%y)
       pdfv.getpdf(File.DirRootExternal & "/" & Main.NombrePDF)
       If pdfv.isValid Then
          pdfv.scrollToPage(0)
          'pc = pdfv.GetPageCount
          pdfv.zoom(2.0)
      Else
          Msgbox("Error pdf file!","Error")
          Activity.Finish
          Return
       End If
End Sub
Pero al poco tiempo la app se cierra.

No lo entiendoooooo.
 

JordiCP

Expert
Licensed User
Longtime User
pistas, pistas, necesitamos pistas

El mas importante ¿Te da algún mensaje de error en los logs?¿Y en pantalla?
¿Llega a mostrar el pdf?
¿Sucede con todos los pdfs o alguno en concreto? ¿has probado con alguno muy pequeño?
 

JMMF

Member
Licensed User
Longtime User
Pistas, pistas, toma pistas

Hola JordiCP.

Si que muestra todos los PDFs.
Pero si trasteas mucho con el (Arriba, abajo, derecha..)
Se bloquea la pantalla y me da esto en los logs.

** Activity (descargas) Resume **
** Activity (descargas) Pause, UserClosed = false **
** Activity (detallesdescarga) Create, isFirst = true **
** Activity (detallesdescarga) Resume **
** Activity (detallesdescarga) Pause, UserClosed = false **
** Activity (verpdf) Create, isFirst = true **
** Activity (verpdf) Resume **
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@9cb1f87
at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1305)
at android.graphics.Canvas.drawBitmap(Canvas.java:1439)
at cx.hell.android.lib.pagesview.PagesView.drawBitmap(PagesView.java:448)
at cx.hell.android.lib.pagesview.PagesView.drawPages(PagesView.java:415)
at cx.hell.android.lib.pagesview.PagesView.onDraw(PagesView.java:261)
at android.view.View.draw(View.java:17503)
at android.view.View.updateDisplayListIfDirty(View.java:16496)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3907)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3887)
at android.view.View.updateDisplayListIfDirty(View.java:16456)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3907)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3887)
at android.view.View.updateDisplayListIfDirty(View.java:16456)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3907)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3887)
at android.view.View.updateDisplayListIfDirty(View.java:16456)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3907)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3887)
at android.view.View.updateDisplayListIfDirty(View.java:16456)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3907)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3887)
at android.view.View.updateDisplayListIfDirty(View.java:16456)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:325)...

Si no trasteas y te sales de la Activity(verpdf) al poco tiempo sale en pantalla un mensaje. (Envases se ha detenido)

Gracias.
 

JordiCP

Expert
Licensed User
Longtime User
Pues parece una limitación de la propia librería del visor pdf cuando se le estressa mucho e intenta ir redibujando lo que tocaría.
¿Has probado de abrir y trastear el mismo archivo con algún ejemplo simple en que no haya involucradas otras actividades?

En cuanto al otro error (salir de la activity), quizás no tenga nada que ver con este y se pueda atacar por separado, pero necesitamos mas pistas :rolleyes:
 

JMMF

Member
Licensed User
Longtime User
Hola JordiCP.

El otro error (salir de la activity), Siempre ocurre cuando entro en la parte donde se leen los PDFs,
y no sale nada en los logs.

Pues si el problema es la librería, entonces conoces otra librería o forma de ver PDFs con la app.

Muchas gracias por todo.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Pues si el problema es la librería, entonces conoces otra librería o forma de ver PDFs con la app.

Hola, si es ver pdf lo puedes hacer asi:

B4X:
Sub VerPdf (DiryNombre As String)



    Dim Intent1 As Intent



    Try
    Intent1.Initialize(Intent1.ACTION_VIEW, "file://" & DiryNombre)
        Intent1.SetType("application/pdf")

        ' Se ponen todos los programas que abren pdf
        If Android6oSuperior Then
          Intent1.WrapAsIntentChooser("Abrir con")
        End If
      
        StartActivity(Intent1)
    Catch
    End Try

  
  

End Sub

La variable Android6oSuperior es un Boolean que me dice si es Android 6 o superior :D, lo he puesto asi por que en algunos dispositivos con Android 6 o 7 si no pones elegir visor de pdf, aunque tengas uno por defecto no funciona. Si no sabes como ver si es Android 6 o superior lo comentas y te lo escribo



Saludos
 
Last edited:

JMMF

Member
Licensed User
Longtime User
Gracias JordiCP, pero soy pobresito primo y no tengo android 5.
Voy probando la opción de Jesus y os cuento.

gracias a los dos.
 

JMMF

Member
Licensed User
Longtime User
JESUS ES UNA MAQUINA.
Perfecto...
B4X:
Sub Ver_Pdf
    Dim Intent1 As Intent
       Try
            Intent1.Initialize(Intent1.ACTION_VIEW, "file://" & File.DirRootExternal & "/" & Main.NombrePDF)
            Intent1.SetType("application/pdf")

            ' Se ponen todos los programas que abren pdf
            'If Android6oSuperior Then    ????????????????????????????????
                  Intent1.WrapAsIntentChooser("Abrir con")
            'End If
            StartActivity(Intent1)
        Catch
        End Try
End Sub
Así me funciona bien; ¿Necesito desarrollar la variable Android6oSuperior.?
Si es así y no es molestia, dime como.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Yo mantendria lo de si es 6 o superior aunque tu por ahora no lo uses, ya que en algun momento lo puedes usar u otra persona, si tienes 6 o superior lo ejecutará, y si no no lo hará.


B4X:
Sub Process_Globals
Dim FlagAndroid6oSuperior as Boolean
'.....
'.....
'.....


Sub Activity_Create(FirstTime As Boolean)

    Dim p As Phone
    Dim va As Int
    va = p.SdkVersion
    If va >= 23 Then 
      FlagAndroid6oSuperior = True
    Else
        FlagAndroid6oSuperior = False
    End If

Saludos
 
Top