【发布时间】:2019-12-08 16:14:17
【问题描述】:
我正在开发一项功能,用户可以在其中创建已执行工作订单的报告。通过此报告,您将获得订单本身的信息,例如客户姓名、服务、位置等……以及捕获的服务图像。我已经设法用我想要的数据生成报告,包括格式。但是,我很难在同一份报告中附加从相机或图库中获取的图像。已经研究了无数次,我的尝试并没有出现在报告中的图像。
从相机获取图像
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())
}
}
}
}
创建报告
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: open failed: ENOENT (No such file or directory)
【问题讨论】:
-
那不是有效的路径。使用 uri 本身。或者 uri.toString().
-
但是当我得到相机返回 URI 时我已经这样做了,在:imageCam = uri.getPath ()。 toString()
-
没有。你不是。那是完全不同的东西。改为查看 uri.toString()。
-
那会是什么样子?你能帮帮我吗?
-
告诉 uri.toString() 的值。
标签: java android kotlin mobile report