我正在寻找原生的Google Android开发的PDF渲染器API。我在文档中看到以下代码示例:
// 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();
我认为这个例子使用了from File Object。我怎么能得到这个API的工作与一个URL从一个web服务器,如从一个网站的文档?如何在Android应用程序中加载PDF,而不需要将文件下载到本地存储?就像你可以运行Google docs查看器在webview中打开PDF一样,但是我不能采用这种方法,因为Google docs查看器在我所处的环境中被阻塞了。
我怎么能得到这个API的工作与URL从一个web服务器?
从服务器下载PDF文件到本地文件。然后,使用本地文件
我想学习的目的是如何在android应用程序中本地加载pdf,而不需要将文件下载到本地存储
恐怕你不能那样使用PdfRenderer
。它需要一个可搜索的FileDescriptor
,我所知道的唯一方法是创建一个本地文件。
您不能使用Pdf Renderer加载URL。但是你可以在你的webview中使用Google Docs来加载URL而不需要下载文件…
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()
}
}
这里的