You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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卡根目录,再拼接你的图片相对路径,这样适配性更好。
    • 加载前一定要判断文件是否存在,避免抛出文件找不到的异常。

内容的提问来源于stack exchange,提问作者ajay dhadhal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:35:33