java - 错误:打开失败:ENOENT(没有这样的文件或目录)在文档 pdf 中添加画廊图像
问题描述
在我正在创建的 pdf 文档中添加移动图库中的图像时遇到困难。传递图像路径返回以下错误:错误:无法打开:ENOENT(此文件或目录不存在)。我创建了一个类,用户可以从图库中选择照片或通过相机捕获新图像。我将这些图像的路径存储在数组列表中。所以我需要将这些路径传递给创建 pdf 文档的函数。
private val pathImage: ArrayList<String> = arrayListOf()
private fun openCam() {
imageCapture.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
if (checkPermission()) {
val diretorio: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val imagem =
File(diretorio.path + "/" + System.currentTimeMillis().toString() + ".jpg")
uri = Uri.fromFile(imagem)
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(intent, CAM)
} else {
requestPermission()
}
}
})
private fun openGatelry() {
imageGallery.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
val intent = Intent()
intent.type = "image/*"
intent.action = Intent.ACTION_GET_CONTENT
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
startActivityForResult(Intent.createChooser(intent, R.string.select_picture.toString()), GALLERY)
}
})
}
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)
val imageCam = uri.getPath()
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())
showImages()
}
} else {
val uri = data.data
if (uri != null) {
pathImage.add(uri.path.toString())
showImages()
}
}
}
}
// Do something when user press the positive button
val mDoc = Document()
//pdf file name
val mFileName = SimpleDateFormat(
"ddMMyyyy_HHmmss",
Locale.getDefault()
).format(System.currentTimeMillis())
//pdf file path
val mFilePath =
Environment.getExternalStorageDirectory().toString() + "/" + mFileName + ".pdf"
try {
//create instance of PdfWriter class
PdfWriter.getInstance(mDoc, FileOutputStream(mFilePath))
//open the document for writing
mDoc.open()
val image = Image.getInstance("/storage/emulated/0/Pictures/1573066971461.jpg")
mDoc.add(image)
//close document
mDoc.close()
解决方案
在使用该文件之前,请确保它存在
// Make sure the directory exists.
File(mFilePath).mkdirs()
在访问之前还要检查图像文件是否存在。
File imageFile = new File("/storage/emulated/0/Pictures/1573066971461.jpg");
if(imageFile.exists())
除此之外不要忘记从用户那里获取权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
推荐阅读
- python - 如何在python中使用子图的整数
- ms-access - MSACCESS 报告 - 显示或隐藏“按标题分组”
- python - pygame 在使用 wasd 键绑定时遇到问题
- typescript - 构造函数参数中的 TS typeof 丢失类型和 VSCode 自动完成
- c# - 针对 SQL Server 数据运行 XUnit 测试时出错 - 为 Tests.UnitTest1.Test1 上的 Tests.SqlServerDataAttribute 指定的数据发现器不存在
- c# - 无法从 System.Security.AccessControl.FileSystemSecurity 中删除访问权限:参数名称:fileSystemRights
- swift - 如何以编程方式从第一个视图控件到第二个视图控件进入选项卡视图控件
- css - 使用 Foundation 6 for Sites 创建类似可打印报纸的两栏布局
- python - 使用 Python Turtle 绘制名称 'QUINN'
- javascript - DateFormat.js SyntaxError:意外的令牌导出