如何在iText PDF中从SD卡加载并设置图片
如何用iText从SD卡加载图片到PDF(替换Assets文件夹方式)
嘿,我来帮你把从Assets加载图片的逻辑改成从SD卡读取~其实这个转换很简单,不用再绕Assets的InputStream了,直接读取SD卡上的图片文件路径就行,下面是具体的实现方案和代码:
核心思路
原来从Assets加载是先把文件转成InputStream再转ByteArray,现在直接用iText的Image.getInstance(String filePath)方法,传入SD卡上图片的绝对路径就能直接加载图片,省去了中间的流转换步骤。
完整代码示例
try { // 替换成你SD卡上图片的绝对路径 String imagePath = Environment.getExternalStorageDirectory() + "/prof_image.png"; // 先判断文件是否存在,避免找不到文件的异常 File imageFile = new File(imagePath); if (!imageFile.exists()) { // 这里可以加文件不存在的处理逻辑,比如提示用户 Log.e("ImageLoad", "图片文件不存在!"); return; } // 直接从SD卡路径加载图片到iText的Image对象 Image image = Image.getInstance(imagePath); // 接下来就可以像之前一样设置图片的位置、大小等属性了 // 比如:image.scaleToFit(100, 100); // 缩放图片 // 然后把image添加到PDF文档中 document.add(image); } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); }
重要注意事项
- 权限问题:
- 在
AndroidManifest.xml中添加读取外部存储的权限:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> - 如果你的应用目标是Android 6.0(API 23)及以上,还要动态申请权限,用户同意后才能访问SD卡。
- 对于Android 10(API 29)及以上,默认启用了Scoped Storage,如果要继续使用传统路径访问,需要在
AndroidManifest.xml的application标签里添加:android:requestLegacyExternalStorage="true"
- 在
- 路径正确性:
- 不要硬写死SD卡路径,建议用
Environment.getExternalStorageDirectory()来获取SD卡根目录,再拼接你的图片相对路径,这样适配性更好。 - 加载前一定要判断文件是否存在,避免抛出文件找不到的异常。
- 不要硬写死SD卡路径,建议用
内容的提问来源于stack exchange,提问作者ajay dhadhal
相关产品推荐
相关产品推荐

