diff --git a/src/org/openbravo/erpCommon/utility/Utility.java b/src/org/openbravo/erpCommon/utility/Utility.java
--- a/src/org/openbravo/erpCommon/utility/Utility.java
+++ b/src/org/openbravo/erpCommon/utility/Utility.java
@@ -1991,6 +1991,27 @@
   }
 
   /**
+   * Provides the image as a byte array. This method is intended to be used by Jasper reports as it
+   * takes care to close the DAL connection in order to avoid connection leaks in case it is invoked
+   * from a sub-report.
+   * 
+   * @param id
+   *          The id of the image to display
+   * @return The image requested
+   * @see #getImage(String)
+   */
+  private static byte[] getImageForReport(String id) {
+    try {
+      return getImage(id);
+    } finally {
+      // Close the DAL connection used to retrieve the image with getImage(id)
+      // This is required if the method is invoked from a sub-report until issue
+      // https://issues.openbravo.com/view.php?id=30182 is fixed
+      OBDal.getInstance().commitAndClose();
+    }
+  }
+
+  /**
    * Provides the image as a byte array. These images are stored in the table AD_IMAGES as a BLOB
    * field.
    * 
@@ -2054,7 +2075,7 @@
    * @see #getImage(String)
    */
   public static BufferedImage showImage(String id) throws IOException {
-    return ImageIO.read(new ByteArrayInputStream(getImage(id)));
+    return ImageIO.read(new ByteArrayInputStream(getImageForReport(id)));
   }
 
   /**
