While not necessary to create a visible signature, that's what our requirements were. While I looked at the generic element support, I ended up using what I believed to be a simpler solution: I placed an anchor in the PDF where I wanted to place the signature and then used a PdfStamper to add the digital signature. The iReport snippet is just: <anchorNameExpression><![CDATA[new String("SIGNED_BY")]]></anchorNameExpression> and then the logic to extract the location from the anchor is: String[] dest = getNamedDestination(reader, "SIGNED_BY"); if (dest != null) { try { sigData.setSigPageNumber(Integer.parseInt(dest[0])); sigData.setSigLowerLeftX(Float.parseFloat(dest[1])); sigData.setSigLowerLeftY(Float.parseFloat(dest[2])+3.0f); sigData.setSigUpperRightX(sigData.getSigLowerLeftX()+150.0f); sigData.setSigUpperRightY(sigData.getSigLowerLeftY()+32.0f); if (logger.isDebugEnabled()) logger.debug("Set signature location to page "+sigData.getSigPageNumber()+" at "+ sigData.getSigLowerLeftX()+","+sigData.getSigLowerLeftY()+", "+ sigData.getSigUpperRightX()+", "+sigData.getSigUpperRightY()); } catch (Exception e) { logger.error("Caught exception processing destination: "+Arrays.asList(dest), e); } } } public static String[] getNamedDestination(PdfReader reader, String name) throws Exception { String[] parts = StringUtils.split((String)SimpleNamedDestination.getNamedDestination(reader, false).get(name), " "); return (parts == null || parts.length < 4) ? null : new String[] {parts[0], parts[2], parts[3]}; }