Открыть PDF из Интернета, используя пользовательский вид - PullRequest
0 голосов
/ 16 апреля 2019

Мне нужно открыть PDF из Интернета в моем пользовательском представлении.Мне просто нужны информация в формате PDF и кнопка возврата.

Я видел следующую библиотеку: https://github.com/barteksc/AndroidPdfViewer

Я реализовал так, но не работает.

Как мне это сделать?

Макет

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ReaderActivity">

    <com.github.barteksc.pdfviewer.PDFView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/pdfView"/>

</LinearLayout>

Активность

class ReaderActivity : BaseAppCompatActivity()
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_reader)

        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        pdfView.fromUri(Uri.parse("https://si.ua.es/es/documentos/documentacion/pdf-s/mozilla12-pdf.pdf"))
            .pageSnap(true)
            .load()
    }
}

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

fromUri() для Uri, который может использоваться ContentResolver, например, со схемой content.

Если вы знаете, что PDF очень маленький, вы можете попробовать fromStream() вместо fromUri(). В противном случае вам необходимо сначала загрузить PDF (например, на getCacheDir()), а затем использовать fromFile(), так как вам может не хватить памяти, если вы попытаетесь использовать fromStream().

0 голосов
/ 16 апреля 2019

Это решение, которое сработало для меня:

val client = OkHttpClient()
val request = Request.Builder().url("URL TO PDF").build()

client.newCall(request).enqueue(object : Callback
{
    @Throws(IOException::class)
    override fun onResponse(call: Call, response: Response)
    {
        if (!response.isSuccessful)
        {
            throw IOException("Failed to download file: $response")
        }

        val stream = ByteArrayInputStream(response.body()?.bytes())
        pdfView.fromStream(stream).load()
    }

    override fun onFailure(call: Call, e: IOException)
    {
        e.printStackTrace()
    }
})

Где pdfView - это элемент, импортированный из этой библиотеки: https://github.com/barteksc/AndroidPdfViewer

...