[英]Pdf Renderer API Android From URL
我正在研究PDF 渲染器 API原生於 Google Android 開發。 我在文檔中看到以下代碼示例:
// create a new renderer
PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());
// let us just render all pages
final int pageCount = renderer.getPageCount();
for (int i = 0; i < pageCount; i++) {
Page page = renderer.openPage(i);
// say we render for showing on the screen
page.render(mBitmap, null, null, Page.RENDER_MODE_FOR_DISPLAY);
// do stuff with the bitmap
// close the page
page.close();
}
// close the renderer
renderer.close();
我認為這個例子使用的是文件 Object。我如何才能讓這個 API 與來自網絡服務器的 URL 一起工作,例如來自網站的文檔? 如何在不需要將文件下載到本地存儲的 Android 應用程序中本地加載 PDF? 類似於如何運行 Google 文檔查看器以在 webview 中打開 PDF - 但我不能采用這種方法,因為 Google 文檔查看器在我所在的環境中被阻止。
我如何才能使用此API來處理來自網絡服務器的URL?
將PDF從服務器下載到本地文件。 然后,使用本地文件。
我想學習的目的是如何在Android應用程序中本地加載pdf,不需要將文件下載到本地存儲
AFAIK,你不能用那種方式使用PdfRenderer
。 它需要一個可搜索的FileDescriptor
,而我知道創建其中一個的唯一方法是使用本地文件。
您無法使用Pdf渲染器加載URL。 但您可以在網頁瀏覽中使用Google文檔加載網址而無需下載文件...
webView.loadUrl("https://docs.google.com/gview?embedded=true&url=" + YOUR_URL);
我會先下載 pdf 然后在 pdfView 中顯示
private fun downloadPdf(): File? {
val client = OkHttpClient()
val request = Request.Builder().url(urlString)
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()
val inputStream: InputStream? = response.body?.byteStream()
val pdfFile = File.createTempFile("myFile", ".pdf", cacheDir)
inputStream?.readBytes()?.let { pdfFile.writeBytes(it) }
return pdfFile
}
然后做這樣的事情:
CoroutineScope(IO).launch {
val pdfDownloaded = downloadPdf()
if (pdfDownloaded != null) {
pdfView.fromFile(pdfDownloaded)
}
withContext(Main) {
pdfView.visibility = View.VISIBLE
hideProgress()
pdfView.show()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.