如何在pdf报告中添加从相机或图库捕获的图像?

时间:2019-12-08 16:14:17

标签: java android kotlin mobile report

我正在开发一项功能,用户可以在其中创建所执行工作单的报告。通过此报告,您将获得订单本身的信息,例如客户名称,服务,位置等,以及捕获的服务图像。我已经设法用所需的数据(包括格式)生成报告。但是,我很难在同一报告中附加从相机或图库获得的图像。已经进行了无数次研究,而我所做的尝试并未显示在报告中。

从相机获取图像

private val pathImage: ArrayList<String> = arrayListOf<String>()

override fun onActivityResult(
    requestCode: Int,
    resultCode: Int,
    data: Intent?
) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == CAM && resultCode == Activity.RESULT_OK && data != null) {
        val novaIntent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)
        sendBroadcast(novaIntent)
        imageCam = uri.getPath().toString()
        if (imageCam != null) {
            Log.i("TAG", "Camera: " + imageCam)
            pathImage.add(imageCam)
        }
    } else if (requestCode == GALLERY && resultCode == Activity.RESULT_OK && data != null) {
        val clipData = data.clipData
        if (clipData != null) {
            for (i in 0 until clipData.itemCount) {
                val uri: Uri = clipData.getItemAt(i).uri
                pathImage.add(uri.path.toString())
            }
        } else {
            val uri = data.data
            if (uri != null) {
                pathImage.add(uri.path.toString())
            }
        }
    }
}

createReport

     val mDoc = Document()
    //pdf file name
    mFileName = SimpleDateFormat(
        "ddMMyyyy_HHmmss",
        Locale.getDefault()
    ).format(System.currentTimeMillis())
    //pdf file path
    mFilePath =
        Environment.getExternalStorageDirectory().toString() + "/" + mFileName + ".pdf"
    try {
        //create instance of PdfWriter class
        PdfWriter.getInstance(mDoc, FileOutputStream(mFilePath))
        //open the document for writing
        mDoc.open()

        //settings
        mDoc.setPageSize(PageSize.A4)
        mDoc.addCreationDate()
        mDoc.addAuthor(userDTO.user.fullname)
        mDoc.addCreator("Pratik Butani")
        mDoc.setPageSize(PageSize.LETTER)
        //font settings
        val mColorAccent = BaseColor(0, 153, 204, 255)
        val mHeadingFontSize = 20.0f
        val mValueFontSize = 16.0f
        //Font
        val fontName = BaseFont.createFont(
            "assets/fonts/brandon_medium.otf",
            BaseFont.IDENTITY_H,
            BaseFont.EMBEDDED,
            true
        )
        for ( image in pathImage) {
            val img = Image.getInstance(image)
            mDoc.setPageSize(img)
            mDoc.newPage()
            img.setAbsolutePosition(0f, 0f)
            mDoc.add(img)
        }

        //close document
        mDoc.close()
        } catch (e: Exception) {
        //if anything goes wrong causing exception, get and show exception message
        Toast.makeText(this@DetailsActivity, e.message, Toast.LENGTH_SHORT).show()
    }

返回错误: / document / image:8495:打开失败:ENOENT(没有此类文件或目录)

1 个答案:

答案 0 :(得分:1)

在此行onActivityResult的{​​{1}}方法中,从uri获取 uri的路径时,您做错了事。

您可以尝试以下方法从URI获取路径:

pathImage.add(uri.path.toString())

Here is the full gist将为您提供帮助。

谢谢。