使用自定义视图从 Web 打开 PDF
Open PDF from web using custom view
我需要在自定义视图中从 Web 打开 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>
Activity
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()
}
}
fromUri()
用于 Uri
可以被 ContentResolver
使用,例如 content
方案。
如果您知道 PDF 很小,可以尝试 fromStream()
而不是 fromUri()
。否则,您需要先下载 PDF(例如下载到 getCacheDir()
),然后使用 fromFile()
,因为如果您尝试使用 fromStream()
,可能会 运行 内存不足.
这是对我有用的解决方案:
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
我需要在自定义视图中从 Web 打开 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>
Activity
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()
}
}
fromUri()
用于 Uri
可以被 ContentResolver
使用,例如 content
方案。
如果您知道 PDF 很小,可以尝试 fromStream()
而不是 fromUri()
。否则,您需要先下载 PDF(例如下载到 getCacheDir()
),然后使用 fromFile()
,因为如果您尝试使用 fromStream()
,可能会 运行 内存不足.
这是对我有用的解决方案:
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