/*******************************************************************************
*
* This positioning allows to select the location where the signature block is * placed in the document. *
* * @author wprinz */ public class SignaturePositioning implements Serializable { /** * */ private static final long serialVersionUID = 1L; /** * The x axis algorithm. * ** May be {@link AutoAxisAlgorithm} or {@link AbsoluteAxisAlgorithm} *
*/ protected AxisAlgorithm xAlgorithm = new AutoAxisAlgorithm(); /** * The y axis algorithm. * ** May be {@link AutoAxisAlgorithm} or {@link AbsoluteAxisAlgorithm} *
*/ protected AxisAlgorithm yAlgorithm = new AutoAxisAlgorithm(); /** * The width algorithm. * ** May be {@link AutoAxisAlgorithm} or {@link AbsoluteAxisAlgorithm} *
*/ protected AxisAlgorithm widthAlgorithm = new AutoAxisAlgorithm(); /** * The page algorithm. * ** May be {@link AutoPageAlgorithm}, {@link AbsolutePageAlgorithm} or * {@link NewPageAlgorithm} *
*/ protected PageAlgorithm pageAlgorithm = new AutoPageAlgorithm(); /** * Provides the position of the footline. * ** Only used if the pageAlgorithm is {@link AutoPageAlgorithm} and the * yAlgorithm is {@link AutoAxisAlgorithm} *
*/ protected float footerLine = 0.0f; protected void checkAxisAlgorithm(AxisAlgorithm algorithm) { if (algorithm == null) { throw new IllegalArgumentException("The algorithm must not be null."); } if (!(algorithm instanceof AutoAxisAlgorithm) && !(algorithm instanceof AbsoluteAxisAlgorithm)) { throw new IllegalArgumentException("The algorithm must be either Auto or Absolute."); } } protected void checkPageAlgorithm(PageAlgorithm algorithm) { if (algorithm == null) { throw new IllegalArgumentException("The algorithm must not be null."); } if (!(algorithm instanceof AutoPageAlgorithm) && !(algorithm instanceof AbsolutePageAlgorithm) && !(algorithm instanceof NewPageAlgorithm)) { throw new IllegalArgumentException("The algorithm must be either Auto or Absolute."); } } /** * @return the xAlgorithm */ public AxisAlgorithm getXAlgorithm() { return this.xAlgorithm; } /** * @param algorithm * the xAlgorithm to set */ public void setXAlgorithm(AxisAlgorithm algorithm) { checkAxisAlgorithm(algorithm); xAlgorithm = algorithm; } /** * @return the yAlgorithm */ public AxisAlgorithm getYAlgorithm() { return this.yAlgorithm; } /** * @param algorithm * the yAlgorithm to set */ public void setYAlgorithm(AxisAlgorithm algorithm) { checkAxisAlgorithm(algorithm); yAlgorithm = algorithm; } /** * @return the widthAlgorithm */ public AxisAlgorithm getWidthAlgorithm() { return this.widthAlgorithm; } /** * @param widthAlgorithm * the widthAlgorithm to set */ public void setWidthAlgorithm(AxisAlgorithm widthAlgorithm) { checkAxisAlgorithm(widthAlgorithm); this.widthAlgorithm = widthAlgorithm; } /** * @return the pageAlgorithm */ public PageAlgorithm getPageAlgorithm() { return this.pageAlgorithm; } /** * @param pageAlgorithm * the pageAlgorithm to set */ public void setPageAlgorithm(PageAlgorithm pageAlgorithm) { checkPageAlgorithm(pageAlgorithm); this.pageAlgorithm = pageAlgorithm; } /** * @return the footerLine */ public float getFooterLine() { return this.footerLine; } /** * @param footerLine * the footerLine to set */ public void setFooterLine(float footerLine) { this.footerLine = footerLine; } public SignaturePositioning() { } public SignaturePositioning(String position) throws PdfAsException { if (position != null) { StringTokenizer tokenizer = new StringTokenizer(position, ";"); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken().replaceAll(" ", ""); String[] sToken = token.split(":"); if (sToken == null || sToken.length != 2 || sToken[0].length() != 1) { throw new PdfAsException(ErrorCode.INVALID_SIGNATURE_POSITION, "Invalid signature position element: " + token); } char cmd = sToken[0].toLowerCase().charAt(0); String value = sToken[1]; switch (cmd) { case 'x': if ("auto".equalsIgnoreCase(value)) { this.setXAlgorithm(new AutoAxisAlgorithm()); } else { try { this.setXAlgorithm(new AbsoluteAxisAlgorithm(Float.parseFloat(value))); } catch (NumberFormatException e) { throw new PdfAsException(ErrorCode.INVALID_SIGNATURE_POSITION, "Invalid signature position element: " + token); } } break; case 'y': if ("auto".equalsIgnoreCase(value)) { this.setYAlgorithm(new AutoAxisAlgorithm()); } else { try { this.setYAlgorithm(new AbsoluteAxisAlgorithm(Float.parseFloat(value))); } catch (NumberFormatException e) { throw new PdfAsException(ErrorCode.INVALID_SIGNATURE_POSITION, "Invalid signature position element: " + token); } } break; case 'w': if ("auto".equalsIgnoreCase(value)) { this.setWidthAlgorithm(new AutoAxisAlgorithm()); } else { try { this.setWidthAlgorithm(new AbsoluteAxisAlgorithm(Float.parseFloat(value))); } catch (NumberFormatException e) { throw new PdfAsException(ErrorCode.INVALID_SIGNATURE_POSITION, "Invalid signature position element: " + token); } } break; case 'p': if ("auto".equalsIgnoreCase(value)) { this.setPageAlgorithm(new AutoPageAlgorithm()); } else if ("new".equalsIgnoreCase(value)) { this.setPageAlgorithm(new NewPageAlgorithm()); } else { try { this.setPageAlgorithm(new AbsolutePageAlgorithm(Integer.parseInt(value))); } catch (NumberFormatException e) { throw new PdfAsException(ErrorCode.INVALID_SIGNATURE_POSITION, "Invalid signature position element: " + token); } } break; case 'f': try { this.setFooterLine(Float.parseFloat(value)); } catch (NumberFormatException e) { throw new PdfAsException(ErrorCode.INVALID_SIGNATURE_POSITION, "Invalid signature position element: " + token); } break; default: throw new PdfAsException(ErrorCode.INVALID_SIGNATURE_POSITION, "Invalid signature position element: " + token); } } } } public String getPositionString() { StringBuilder sb = new StringBuilder(); AxisAlgorithm xAlgo = getXAlgorithm(); if(xAlgo instanceof AutoAxisAlgorithm) { sb.append("x:auto;"); } else if(xAlgo instanceof AbsoluteAxisAlgorithm) { sb.append("x:" + ((AbsoluteAxisAlgorithm)xAlgo).getAbsoluteValue() + ";"); } AxisAlgorithm yAlgo = getXAlgorithm(); if(yAlgo instanceof AutoAxisAlgorithm) { sb.append("y:auto;"); } else if(yAlgo instanceof AbsoluteAxisAlgorithm) { sb.append("y:" + ((AbsoluteAxisAlgorithm)yAlgo).getAbsoluteValue() + ";"); } AxisAlgorithm wAlgo = getWidthAlgorithm(); if(wAlgo instanceof AutoAxisAlgorithm) { sb.append("w:auto;"); } else if(wAlgo instanceof AbsoluteAxisAlgorithm) { sb.append("w:" + ((AbsoluteAxisAlgorithm)wAlgo).getAbsoluteValue() + ";"); } PageAlgorithm pAlgo = getPageAlgorithm(); if(pAlgo instanceof AutoPageAlgorithm) { sb.append("p:auto;"); } else if(pAlgo instanceof NewPageAlgorithm) { sb.append("p:new;"); } float footerLine = getFooterLine(); sb.append("f:" + + footerLine); return sb.toString(); } }