在android

时间:2015-08-28 05:40:40

标签: android

大家好我已经写了一个ac #web服务,它以字节流的形式返回一个pdf作为response.Ance我从我的Android应用程序调用web服务我会将响应存储在一个数组字节中,直到这里我将能够做到但是之后我需要将该字节数组转换为pdf并且应该能够显示它。我有一个菜单页面,其中一旦按下按钮,就会调用带有文件名的Web服务并且点击按钮我应该能够打开pdf。这可能吗?或者还有一些其他更好的解决方案。我在网上查看了更好的理解,但我找不到一个可以帮助我更好地理解。我需要帮助请指导我们。如果你发表一个例子或链接会有所帮助。谢谢

感谢你的建议,但事情是我手头没有pdf我只有从web服务获得的数组字节所以我现在需要从这个数组字节重新生成pdf并显示它但我不是如何做到这一点

1 个答案:

答案 0 :(得分:0)

尝试按照以下步骤操作

  1. 将字节数组转换为 InputStream
val inputStream = ByteArrayInputStream(byteArray) 
  1. 将 InputStream 保存为 PDF 文件:
    suspend fun saveInputStreamAsPdfFile(inputStream: InputStream, applicationContext: Context): File? {
        var outputFile: File? = null
        withContext(Dispatchers.IO) {
            try {
                val directory = ContextCompat.getExternalFilesDirs(applicationContext, "documents").first()
                val outputDir = File(directory, "outputPath")
                outputFile = File(outputDir, UUID.randomUUID().toString() + ".pdf")
                if (!outputDir.exists()) {
                    outputDir.mkdirs()
                }
                val outputStream = FileOutputStream(outputFile, false)
                inputStream.use { fileOut -> fileOut.copyTo(outputStream) }
                outputStream.close()
            } catch (e: Exception) {
                // Something went wrong
            }
        }
        return outputFile
    }
  1. 使用 PdfRenderer 显示 PDF
var totalPdfPages: Int

fun showPdf(pdfFile: File) {
    val input = ParcelFileDescriptor.open(pdfFile, MODE_READ_ONLY)
    val renderer = PdfRenderer(input)
    val wrapper = PdfRendererWrapper(renderer)
    totalPdfPages = wrapper.getTotalPages()
    showPdfPage(0)
}

fun showPdfPage(currentPageIndex: Int) {
    val pageBitmap = wrapper.getBitmap(currentPageIndex)
    imageView.setImageBitmap(pageBitmap) // Show current page
}