我正在开发一项功能,用户可以在其中创建所执行工作单的报告。通过此报告,您将获得订单本身的信息,例如客户名称,服务,位置等,以及捕获的服务图像。我已经设法用所需的数据(包括格式)生成报告。但是,我很难在同一报告中附加从相机或图库获得的图像。已经进行了无数次研究,而我所做的尝试并未显示在报告中。
从相机获取图像
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(没有此类文件或目录)
答案 0 :(得分:1)
在此行onActivityResult
的{{1}}方法中,从uri获取 uri的路径时,您做错了事。
您可以尝试以下方法从URI获取路径:
pathImage.add(uri.path.toString())
Here is the full gist将为您提供帮助。
谢谢。