保护 SXSSFWorkbook (Excel) 并将其转换为字节数组

Protect a SXSSFWorkbook (Excel) and convert it to a byte array

我正在开发一个 Java 函数,该函数预期 return 字节数组中受保护的 Excel 文件 (xlsx)。

public byte[] genProtectedExcel() {
    SXSSFWorkbook workbook = new SXSSFWorkbook();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    //Code of cells fill in...

    //Should be code of workbook encryption...

    workbook.write(baos);
    return baos.toByteArray();
}

我找到了一个使用 Apache POI 加密支持的解决方案:

POIFSFileSystem fs = new POIFSFileSystem();
EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);

Encryptor enc = info.getEncryptor();
enc.confirmPassword("foobaa");

InputStream is = <open the SXSSF workbook as stream>
OutputStream os = enc.getDataStream(fs);
IOUtils.copy(is, os);

但是,OutputStream 不能转换为 ByteArrayOutputStream。我试图找到一种将 OutputStream 转换为 ByteArray 的方法,但都失败了。 无论如何创建一个保护 excel 字节数组?

ByteArrayOutputStream baos = new ByteArrayOutputStream();

fs.writeFilesystem(baos );

return baos.toByteArray();