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

如何在Android中使用iText加密PDF 运行代码出现SIGBUS崩溃如何解决

问题描述

需要为PDF文件添加密码保护,使用iText库实现该功能,已编写如下代码:

public void encryptPdf(String src, String dest) throws IOException, DocumentException {
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);

    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.setEncryption(USER, OWNER,
            PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
    stamper.close();
    reader.close();
}

运行时触发应用崩溃,错误日志如下:

Fatal signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 0xcdeae5c1 in tid 20493 (sdifa.pdfreader), pid 20493 (sdifa.pdfreader)
解决方案

该错误为Android环境下iText加密PDF的常见原生层内存访问异常,可按以下步骤修复:

  • 移除手动注入加密Provider的代码:Android端使用iText 5.x版本进行PDF加密时,无需主动调用Security.insertProviderAt注入BouncyCastleProvider,重复注入会触发原生层内存冲突,是本次崩溃的核心诱因。
  • 规范密码参数格式:setEncryption方法要求传入的用户密码、所有者密码必须为UTF-8编码的字节数组,若直接传入未编码的字符串或空对象,会触发非法内存访问。
  • 补全异常场景的资源释放逻辑:原有代码仅在正常运行时释放资源,异常场景下资源泄漏会导致后续内存操作异常。

修复后代码示例

public void encryptPdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = null;
    PdfStamper stamper = null;
    try {
        reader = new PdfReader(src);
        stamper = new PdfStamper(reader, new FileOutputStream(dest));
        // 密码转换为UTF-8字节数组,可按需替换为实际使用的密码
        byte[] USER_PWD = "user_password".getBytes(StandardCharsets.UTF_8);
        byte[] OWNER_PWD = "owner_password".getBytes(StandardCharsets.UTF_8);
        stamper.setEncryption(USER_PWD, OWNER_PWD,
                PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
    } finally {
        if (stamper != null) {
            stamper.close();
        }
        if (reader != null) {
            reader.close();
        }
    }
}

额外校验项

  • 确保源PDF路径src有可读权限,输出路径dest有可写权限,输出路径父目录不存在时提前创建
  • 若使用iText 7.x版本,加密API已调整,需使用EncryptProperties类配置加密规则,不可直接沿用5.x版本API

内容的提问来源于stack exchange,提问作者Syed Irfan Hussaini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:51:02