Lucas Siqueira

Active Member
Licensed User
Longtime User
AbrirPDF:
Sub AbrirPDF(diretorioDoArquivo As String, nomeDoArquivo As String)
    Try
        #If B4A
        ' Plataforma: Android
        Dim provider As FileProvider
        provider.Initialize
      
        ' Copia o arquivo para o diretório compartilhado
        Wait For (File.CopyAsync(diretorioDoArquivo, nomeDoArquivo, provider.SharedFolder, nomeDoArquivo)) Complete (Success As Boolean)
        Log("Android - Cópia do arquivo realizada com sucesso: " & Success)
      
        If Success = False Then
            Log("Android - Erro: falha ao copiar o arquivo para o diretório compartilhado.")
            Return
        End If

        ' Configura a Intent para abrir o PDF
        Dim docIntent As Intent
        docIntent.Initialize(docIntent.ACTION_VIEW, "")
        provider.SetFileUriAsIntentData(docIntent, nomeDoArquivo)
        docIntent.SetType("application/pdf")
        docIntent.Flags = Bit.Or(1, 2) ' FLAG_GRANT_READ_URI_PERMISSION
        StartActivity(docIntent)
      
        #Else If B4I
        ' Plataforma: iOS
        ' Verifica se o arquivo existe
        If File.Exists(diretorioDoArquivo, nomeDoArquivo) = False Then
            Log("iOS - Erro: arquivo PDF não encontrado em " & diretorioDoArquivo & "/" & nomeDoArquivo)
            Return
        End If

        ' Inicializa o DocumentInteraction para abrir o PDF
        Dim docInteraction As DocumentInteraction
        docInteraction.Initialize("docInteraction", diretorioDoArquivo, nomeDoArquivo)
        'docInteraction.OpenFile(B4XPages.GetNativeParent(Me).RootPanel) ' compartilhar arquivo
        docInteraction.PreviewFile(B4XPages.GetNativeParent(Me)) ' visualizar arquivo
        Log("iOS - PDF aberto com sucesso.")
      
        #Else If B4J
        ' Plataforma: Desktop
        ' Verifica se o arquivo existe
        If File.Exists(diretorioDoArquivo, nomeDoArquivo) = False Then
            Log("B4J - Erro: arquivo PDF não encontrado em " & diretorioDoArquivo & "/" & nomeDoArquivo)
            Return
        End If

        ' Abre o PDF usando o JFX
        Private fx As JFX
        fx.ShowExternalDocument(File.GetUri(diretorioDoArquivo, nomeDoArquivo))
        Log("B4J - PDF aberto com sucesso.")
        #End If
    Catch
        Log("Erro ao abrir o PDF: " & LastException)
    End Try
End Sub
 
Last edited:

jesuslizonsoluciones

Member
Licensed User
Longtime User
Good morning



When I run from b4a the Openpdf I get the following problem:



I get an error in the copy


Idioma=Main.IdiomaDocumentos(1)





Hotel=Main.LocalizadorReserva(0)


Dim Descargapdf As String = Hotel & "-derechos_ "& Idioma & ".pdf"



'Descargapdf="H04-derechos_ GBR.pdf"

Log(Descargapdf)

'OpenPDF(File.DirAssets,"H04-derechos_GBR.pdf")

OpenPDF(File.DirAssets,Descargapdf)


but if I enter it in the following way I don't get an error.

OpenPDF(File.DirAssets,"H04-derechos_GBR.pdf")
 

Lucas Siqueira

Active Member
Licensed User
Longtime User
Tenha certeza que o arquivo em pdf exista em sua pasta files do seu projeto b4a no momento em que você está compilando o aplicativo.

outra observação, como no b4a utilizamos fileProvider, precisa adicionar em seu manifest o seguinte código:
B4X:
AddManifestText(<uses-permission
   android:name="android.permission.WRITE_EXTERNAL_STORAGE"
   android:maxSdkVersion="18" />
)
AddApplicationText(
  <provider
  android:name="android.support.v4.content.FileProvider"
  android:authorities="$PACKAGE$.provider"
  android:exported="false"
  android:grantUriPermissions="true">
  <meta-data
  android:name="android.support.FILE_PROVIDER_PATHS"
  android:resource="@xml/provider_paths"/>
  </provider>
)
CreateResource(xml, provider_paths,
   <files-path name="name" path="shared" />
)

referência: https://www.b4x.com/android/forum/threads/class-fileprovider-share-files.97865/
 
Top