#android #pdf #pdf-reader
#Android #PDF #программа чтения pdf
Вопрос:
Мне нужно открыть 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()
}
}
Ответ №1:
fromUri()
предназначен для a Uri
, который может использоваться ContentResolver
, например, со content
схемой.
Если вы знаете, что PDF-файл очень маленький, вы можете попробовать fromStream()
вместо fromUri()
. В противном случае вам нужно будет сначала загрузить PDF-файл (например, в getCacheDir()
), а затем использовать fromFile()
, так как при попытке использования у вас может закончиться память fromStream()
.
Комментарии:
1. PDF-файл будет состоять максимум из 2-3 страниц, так что я должен пойти
fromStream()
, я полагаю.2. @Lechucico: Вы можете попробовать. Вам нужно будет получить
InputStream
доступ к содержимому PDF-файла из вашего любимого API HTTP-клиента (например, OkHttp).
Ответ №2:
Это решение, которое сработало для меня:
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