summaryrefslogtreecommitdiff
path: root/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover
diff options
context:
space:
mode:
Diffstat (limited to 'pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover')
-rw-r--r--pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java823
1 files changed, 406 insertions, 417 deletions
diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java
index 8ec31d63..0b6dc0aa 100644
--- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java
+++ b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java
@@ -16,15 +16,10 @@
package at.asit.pdfover.signer.pdfas;
//Imports
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
@@ -38,14 +33,7 @@ import at.asit.pdfover.signator.SignatureParameter;
import at.asit.pdfover.signator.SignaturePosition;
import at.gv.egiz.pdfas.api.io.DataSource;
import at.gv.egiz.pdfas.api.sign.pos.SignaturePositioning;
-import at.gv.egiz.pdfas.impl.signator.binary.BinarySignator_1_1_0;
import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureTypesException;
-import at.knowcenter.wag.egov.egiz.sig.SignatureObject;
-import at.knowcenter.wag.egov.egiz.table.Entry;
-import at.knowcenter.wag.egov.egiz.table.Style;
-import at.knowcenter.wag.egov.egiz.table.Table;
/**
* Implementation of SignatureParameter specific for PDF - AS Library
@@ -67,11 +55,13 @@ public class PdfAsSignatureParameter extends SignatureParameter {
/** The profile ID for the english signature block if a signature note is set */
private static final String PROFILE_ID_EN_NOTE = "SIGNATURBLOCK_SMALL_EN_NOTE";
- private static final int PLACEHOLDER_SCALE = 4;
-
private HashMap<String, String> genericProperties = new HashMap<String, String>();
- private int height = -1;
+// private static final int PLACEHOLDER_SCALE = 4;
+//
+// private int height = -1;
+//
+// private float perUnitHeight = 0;
/**
* Gets the PDFAS Positioning
@@ -117,7 +107,7 @@ public class PdfAsSignatureParameter extends SignatureParameter {
@Override
public void setProperty(String key, String value) {
this.genericProperties.put(key, value);
- this.height = -1;
+// this.height = -1;
}
@Override
@@ -131,7 +121,7 @@ public class PdfAsSignatureParameter extends SignatureParameter {
@Override
public void setSignatureLanguage(String signatureLanguage) {
super.setSignatureLanguage(signatureLanguage);
- this.height = -1;
+// this.height = -1;
}
@Override
@@ -141,29 +131,29 @@ public class PdfAsSignatureParameter extends SignatureParameter {
//return new SignatureDimension(getWidth(), getHeight());
}
- private static int getWidth() {
- return 276;
- }
-
- private int getHeight() {
- if (this.height < 0)
- {
- BufferedImage timage = new BufferedImage(1, 1,
- BufferedImage.TYPE_INT_RGB);
- try {
- this.height = (int) (getTableHeight(getSignatureTable(), null, getWidth() * PLACEHOLDER_SCALE, timage.getGraphics()) / PLACEHOLDER_SCALE);
- } catch (SignatureException e) {
- log.error("getTableHeight failed ...", e);
- } catch (SignatureTypesException e) {
- log.error("getTableHeight failed ...", e);
- }
- timage.flush();
- }
- if (this.height < 0)
- return 95;
-
- return this.height;
- }
+// private static int getWidth() {
+// return 276;
+// }
+//
+// private int getHeight() {
+// if (this.height < 0)
+// {
+// BufferedImage timage = new BufferedImage(1, 1,
+// BufferedImage.TYPE_INT_RGB);
+// try {
+// this.height = (int) (getTableHeight(getSignatureTable(), null, getWidth() * PLACEHOLDER_SCALE, timage.getGraphics()) / PLACEHOLDER_SCALE);
+// } catch (SignatureException e) {
+// log.error("getTableHeight failed ...", e);
+// } catch (SignatureTypesException e) {
+// log.error("getTableHeight failed ...", e);
+// }
+// timage.flush();
+// }
+// if (this.height < 0)
+// return 95;
+//
+// return this.height;
+// }
/**
* Get the Signature Profile ID for this set of parameters
@@ -232,383 +222,382 @@ public class PdfAsSignatureParameter extends SignatureParameter {
BufferedImage.TYPE_INT_RGB);
}
- /*
- try {
- PDFASHelper.getPdfAs();
-
-
- float width = getPlaceholderDimension().getWidth() * PLACEHOLDER_SCALE;
- float height = getPlaceholderDimension().getHeight() * PLACEHOLDER_SCALE;
-
- Table table = this.getSignatureTable();
-
- //log.info(table.toString());
-
- BufferedImage timage = new BufferedImage(1, 1,
- BufferedImage.TYPE_INT_RGB);
- float[] heights = this.getTableHeights(table, table.getStyle(),
- height, (int)width, timage.getGraphics());
- timage.flush();
- float mheight = 0;
-
- for(int i = 0; i < heights.length; i++) {
- mheight += heights[i];
- }
-
- this.height = (int) (mheight / PLACEHOLDER_SCALE);
-
- log.info("Width: " + width + " Height: " + height + " HShould: " + mheight);
- BufferedImage image = new BufferedImage((int) width, (int) mheight,
- BufferedImage.TYPE_INT_RGB);
- Graphics g = image.getGraphics();
-
- g.setColor(table.getStyle().getBgColor());
- g.fillRect(0, 0, (int) width, (int) mheight);
-
- g.setColor(Color.black);
- g.drawRect(0, 0, (int) width, (int) mheight);
-
- this.drawTable(0, 0, (int) width, (int) mheight, table,
- table.getStyle(), g, heights);
-
- g.dispose();
-
- //save(image, "png");
-
- return image;
- } catch (Exception ex) {
- try {
- return ImageIO.read(PdfAsSignatureParameter.class
- .getResourceAsStream("/img/fallbackPlaceholder.png"));
- } catch (IOException e) {
- return new BufferedImage(getPlaceholderDimension().getWidth(),
- getPlaceholderDimension().getHeight(),
- BufferedImage.TYPE_INT_RGB);
- }
- }*/
- }
-
- private Table getSignatureTable() throws SignatureException, SignatureTypesException {
- SignatureObject sign_obj = at.knowcenter.wag.egov.egiz.PdfAS
- .createSignatureObjectFromType(getSignatureProfileID());
-
- sign_obj.fillValues(' ', true, false);
- sign_obj.setKZ(BinarySignator_1_1_0.MY_ID);
- return sign_obj.getAbstractTable();
- }
-
- /**
- * used for debugging ..
- *
- * @param image
- * @param ext
- */
- @SuppressWarnings("unused")
- @Deprecated
- private static void save(BufferedImage image, String ext) {
- String fileName = "savingAnImage";
- File file = new File(fileName + "." + ext);
- try {
- ImageIO.write(image, ext, file); // ignore returned boolean
- log.debug("Saved as: " + file.getAbsolutePath());
- } catch (IOException e) {
- System.out.println("Write error for " + file.getPath() + ": "
- + e.getMessage());
- }
- }
-
- private static Font getFont(Style style) {
- String def = "COURIER-NORMAL-8";
- String fontString = style.getFont();
- String[] font_arr = fontString.split(",");
- if (font_arr.length != 3) {
- return Font.decode(def);
- }
- Font font = Font.decode(String.format("%s-%s-%s", font_arr[0], font_arr[2],
- font_arr[1]));
- return font.deriveFont((float) font.getSize() * PLACEHOLDER_SCALE);
+// Try to render signature block - disabled for now (just use images)
+//
+// try {
+// PDFASHelper.getPdfAs();
+//
+//
+// float width = getPlaceholderDimension().getWidth() * PLACEHOLDER_SCALE;
+// float height = getPlaceholderDimension().getHeight() * PLACEHOLDER_SCALE;
+//
+// Table table = this.getSignatureTable();
+//
+// //log.info(table.toString());
+//
+// BufferedImage timage = new BufferedImage(1, 1,
+// BufferedImage.TYPE_INT_RGB);
+// float[] heights = this.getTableHeights(table, table.getStyle(),
+// height, (int)width, timage.getGraphics());
+// timage.flush();
+// float mheight = 0;
+//
+// for(int i = 0; i < heights.length; i++) {
+// mheight += heights[i];
+// }
+//
+// this.height = (int) (mheight / PLACEHOLDER_SCALE);
+//
+// log.info("Width: " + width + " Height: " + height + " HShould: " + mheight);
+// BufferedImage image = new BufferedImage((int) width, (int) mheight,
+// BufferedImage.TYPE_INT_RGB);
+// Graphics g = image.getGraphics();
+//
+// g.setColor(table.getStyle().getBgColor());
+// g.fillRect(0, 0, (int) width, (int) mheight);
+//
+// g.setColor(Color.black);
+// g.drawRect(0, 0, (int) width, (int) mheight);
+//
+// this.drawTable(0, 0, (int) width, (int) mheight, table,
+// table.getStyle(), g, heights);
+//
+// g.dispose();
+//
+// //save(image, "png");
+//
+// return image;
+// } catch (Exception ex) {
+// try {
+// return ImageIO.read(PdfAsSignatureParameter.class
+// .getResourceAsStream("/img/fallbackPlaceholder.png"));
+// } catch (IOException e) {
+// return new BufferedImage(getPlaceholderDimension().getWidth(),
+// getPlaceholderDimension().getHeight(),
+// BufferedImage.TYPE_INT_RGB);
+// }
+// }
}
- /**
- * extracts the value font
- *
- * @param style
- * the table style
- * @return the value font
- */
- @SuppressWarnings("unused")
- private static Font getValueFont(Style style) {
- String def = "COURIER-NORMAL-8";
- String fontString = style.getValueFont();
- String[] font_arr = fontString.split(",");
- if (font_arr.length != 3) {
- return Font.decode(def);
- }
- Font font = Font.decode(String.format("%s-%s-%s", font_arr[0], font_arr[2],
- font_arr[1]));
- return font.deriveFont((float) font.getSize() * PLACEHOLDER_SCALE);
- }
-
- @SuppressWarnings("rawtypes")
- private int drawTable(int xoff, int yoff, int width, int height,
- Table table, Style parentstyle, Graphics g, float[] heights) {
- Style style = parentstyle;
- if (table.getStyle() != null) {
- style = table.getStyle();
- }
-
- log.debug(String.format((Locale) null, "Table@ %dx%d", xoff, yoff));
-
- Font oldFont = g.getFont();
- Font font = PdfAsSignatureParameter.getFont(style);
- g.setFont(font);
- // draw background
- // graphic.setColor(style.getBgColor());
- // graphic.fillRect(xoff, yoff, width, height);
-
- g.setColor(Color.black);
-
- // draw border
- if (style.getBorder() > 0) {
- g.setColor(Color.black);
- g.drawRect(xoff, yoff, width, height);
- }
- float[] colWidths = table.getColsRelativeWith();
- float sum = 0;
-
- for (int i = 0; i < colWidths.length; i++) {
- sum += colWidths[i];
- }
-
- float perUnit = width / sum;
-
- int padding = (int) (style.getPadding() * this.perUnitHeight * PLACEHOLDER_SCALE);
-
- ArrayList rows = table.getRows();
- float roffset = 0;
- for (int rowidx = 0; rowidx < rows.size(); rowidx++) {
- ArrayList cols = (ArrayList) rows.get(rowidx);
- int rsize = (int) heights[rowidx];
- for (int j = 0; j < cols.size(); j++) {
- Entry entry = (Entry) cols.get(j);
- float offset = 0;
- for (int k = 0; k < j; k++) {
- offset += colWidths[k] * perUnit;
- }
- if (entry.getType() == 0 || entry.getType() == 1) {
- // Text
- g.drawRect((int) (xoff + offset),
- (int) (yoff + roffset),
- (int) (colWidths[j] * perUnit), rsize);
-
- String[] lines = getLines(entry.getValue().toString(), (int)(colWidths[j] * perUnit), g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE);
-
- for(int i = 0; i < lines.length; i++) {
- g.drawString(lines[i].toString(), (int) (xoff
- + offset + padding / PLACEHOLDER_SCALE), (int) (yoff + padding
- + roffset + (i + 1) * g.getFontMetrics().getHeight() * this.perUnitHeight));
- }
- //g.drawString(entry.getValue().toString(), (int) (xoff
- // + offset + padding / PLACEHOLDER_SCALE), (int) (yoff + padding
- // + roffset + font.getSize() * this.perUnitHeight));
- } else if (entry.getType() == 2) {
- // Image ...
- BufferedImage image;
- try {
- if (this.getEmblem() != null
- && this.getEmblem().getFileName() != null
- && new File(this.getEmblem().getFileName())
- .exists()) {
- image = ImageIO.read(new File(this.getEmblem()
- .getFileName()));
- } else {
- image = ImageIO.read(new File(PDFASHelper
- .getWorkDir()
- + "/"
- + entry.getValue().toString()));
- }
- int imgWidth = 30 * PLACEHOLDER_SCALE;
- int imgHeight = 30 * PLACEHOLDER_SCALE;
- Image img = image.getScaledInstance(imgWidth, imgHeight,
- Image.SCALE_SMOOTH);
-
- g.drawImage(
- img,
- (int) (xoff + offset + padding + (((colWidths[j] * perUnit) - imgWidth - 2* padding)) / 2),
- (int) (yoff + roffset + padding + ((rsize - imgHeight - 2* padding) / 2)),
- null);
- } catch (IOException e) {
- log.warn("Failed to paint emblem to placeholder image");
- }
- } else {
- // Table
-
- int colWidth = (int) (colWidths[j] * perUnit);
-
- float[] cheights = this.getTableHeights(
- (Table) entry.getValue(), style, rsize, colWidth, g);
-
- this.drawTable(
- (int) (xoff + offset),
- (int) (yoff + roffset),
- (int) (colWidths[j] * perUnit),
- // (int)this.getTableHeight((Table)
- // entry.getValue(), style),
- rsize, (Table) entry.getValue(), style, g,
- cheights);
- /*
- * if (rsize < tsize) { rsize = tsize; }
- */
- }
- }
- roffset += rsize;
- }
-
- g.setFont(oldFont);
-
- return (int) roffset;
- }
-
- private float perUnitHeight = 0;
-
- private static String[] getLines(String text, int width, FontMetrics fmetric, int padding) {
- String currentline = text;
- int averageCharWi = fmetric.charWidth('c');
-
- int max_line_chars = (width - padding) / (averageCharWi);
- ArrayList<String> lines = new ArrayList<String>();
-
- while(currentline.length() > max_line_chars) {
- int cutidx = currentline.substring(0, max_line_chars).lastIndexOf(' ');
- if(cutidx < 1) {
- cutidx = max_line_chars - 1;
- } else {
- cutidx++;
- }
- String tmpLine = currentline.substring(0, cutidx);
- lines.add(tmpLine);
- currentline = currentline.substring(cutidx);
- }
- lines.add(currentline);
-
-
- String[] arrline = new String[lines.size()];
- for(int i = 0; i < lines.size(); i++) {
- arrline[i] = lines.get(i);
- }
-
- //log.debug(text + " needs " + lines.size() + " lines");
-
- return arrline;
- }
-
- @SuppressWarnings("rawtypes")
- private float[] getTableHeights(Table table, Style parentstyle, float height, int width, Graphics g) {
- ArrayList rows = table.getRows();
- float[] sizes = new float[rows.size()];
- Style style = parentstyle;
- if (table.getStyle() != null) {
- style = table.getStyle();
- }
- Font font = PdfAsSignatureParameter.getFont(style);
- g.setFont(font);
-
- float total_height = this.getTableHeight(table, parentstyle, width, g);
-
- float perUnit = height / total_height;
-
- this.perUnitHeight = perUnit;
-
- float[] colWidths = table.getColsRelativeWith();
- float sum = 0;
-
- for (int i = 0; i < colWidths.length; i++) {
- sum += colWidths[i];
- }
-
- float perUnitWidth = width / sum;
-
- for (int i = 0; i < rows.size(); i++) {
- Object robj = rows.get(i);
- ArrayList cols = (ArrayList) robj;
- float tsize = 0;
- float rsize = 0;
- for (int j = 0; j < cols.size(); j++) {
- Entry entry = (Entry) cols.get(j);
- if (entry.getType() == 0 || entry.getType() == 1) {
- int colWidth = (int) (colWidths[j] * perUnitWidth);
-
- float trsize = getLines(entry.getValue().toString(), colWidth, g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE).length * g.getFontMetrics().getHeight() + (style.getPadding() * PLACEHOLDER_SCALE * 2);
-
- if (rsize < trsize) {
- rsize = trsize;
- }
- } else if (entry.getType() == 3) {
-
- int colWidth = (int) (colWidths[j] * perUnitWidth);
-
- tsize = this
- .getTableHeight((Table) entry.getValue(), style, colWidth, g);
- if (rsize < tsize) {
- rsize = tsize;
- }
- }
- }
- sizes[i] = perUnit * rsize;
- }
-
- return sizes;
- }
-
- @SuppressWarnings("rawtypes")
- private float getTableHeight(Table table, Style parentstyle, int width, Graphics g) {
- ArrayList rows = table.getRows();
- Style style = parentstyle;
- if (table.getStyle() != null) {
- style = table.getStyle();
- }
- float size = 0;
-
- float[] colWidths = table.getColsRelativeWith();
- float sum = 0;
-
- for (int i = 0; i < colWidths.length; i++) {
- sum += colWidths[i];
- }
-
- float perUnitWidth = width / sum;
-
- for (int i = 0; i < rows.size(); i++) {
- Object robj = rows.get(i);
- ArrayList cols = (ArrayList) robj;
- float tsize = 0;
- float rsize = 0;
- for (int j = 0; j < cols.size(); j++) {
- Entry entry = (Entry) cols.get(j);
- if (entry.getType() == 0 || entry.getType() == 1) {
- int colWidth = (int) (colWidths[j] * perUnitWidth);
-
- float trsize = getLines(entry.getValue().toString(), colWidth, g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE).length * g.getFontMetrics().getHeight() + (style.getPadding() * PLACEHOLDER_SCALE * 2);
-
- if (rsize < trsize) {
- rsize = trsize;
- }
-
- /*if (rsize < ((style.getPadding() * PLACEHOLDER_SCALE * 2) + fontSize)) {
- rsize = ((style.getPadding() * PLACEHOLDER_SCALE * 2) + fontSize);
- }*/
- } else if (entry.getType() == 3) {
- int colWidth = (int) (colWidths[j] * perUnitWidth);
- tsize = this
- .getTableHeight((Table) entry.getValue(), style, colWidth, g);
- if (rsize < tsize) {
- rsize = tsize;
- }
- }
- }
- size += rsize;
- }
-
- return size;
- }
+// private Table getSignatureTable() throws SignatureException, SignatureTypesException {
+// SignatureObject sign_obj = at.knowcenter.wag.egov.egiz.PdfAS
+// .createSignatureObjectFromType(getSignatureProfileID());
+//
+// sign_obj.fillValues(' ', true, false);
+// sign_obj.setKZ(BinarySignator_1_1_0.MY_ID);
+// return sign_obj.getAbstractTable();
+// }
+//
+// /**
+// * used for debugging ..
+// *
+// * @param image
+// * @param ext
+// */
+// @SuppressWarnings("unused")
+// @Deprecated
+// private static void save(BufferedImage image, String ext) {
+// String fileName = "savingAnImage";
+// File file = new File(fileName + "." + ext);
+// try {
+// ImageIO.write(image, ext, file); // ignore returned boolean
+// log.debug("Saved as: " + file.getAbsolutePath());
+// } catch (IOException e) {
+// System.out.println("Write error for " + file.getPath() + ": "
+// + e.getMessage());
+// }
+// }
+//
+// @SuppressWarnings("rawtypes")
+// private int drawTable(int xoff, int yoff, int width, int height,
+// Table table, Style parentstyle, Graphics g, float[] heights) {
+// Style style = parentstyle;
+// if (table.getStyle() != null) {
+// style = table.getStyle();
+// }
+//
+// log.debug(String.format((Locale) null, "Table@ %dx%d", xoff, yoff));
+//
+// Font oldFont = g.getFont();
+// Font font = PdfAsSignatureParameter.getFont(style);
+// g.setFont(font);
+// // draw background
+// // graphic.setColor(style.getBgColor());
+// // graphic.fillRect(xoff, yoff, width, height);
+//
+// g.setColor(Color.black);
+//
+// // draw border
+// if (style.getBorder() > 0) {
+// g.setColor(Color.black);
+// g.drawRect(xoff, yoff, width, height);
+// }
+// float[] colWidths = table.getColsRelativeWith();
+// float sum = 0;
+//
+// for (int i = 0; i < colWidths.length; i++) {
+// sum += colWidths[i];
+// }
+//
+// float perUnit = width / sum;
+//
+// int padding = (int) (style.getPadding() * this.perUnitHeight * PLACEHOLDER_SCALE);
+//
+// ArrayList rows = table.getRows();
+// float roffset = 0;
+// for (int rowidx = 0; rowidx < rows.size(); rowidx++) {
+// ArrayList cols = (ArrayList) rows.get(rowidx);
+// int rsize = (int) heights[rowidx];
+// for (int j = 0; j < cols.size(); j++) {
+// Entry entry = (Entry) cols.get(j);
+// float offset = 0;
+// for (int k = 0; k < j; k++) {
+// offset += colWidths[k] * perUnit;
+// }
+// if (entry.getType() == 0 || entry.getType() == 1) {
+// // Text
+// g.drawRect((int) (xoff + offset),
+// (int) (yoff + roffset),
+// (int) (colWidths[j] * perUnit), rsize);
+//
+// String[] lines = getLines(entry.getValue().toString(), (int)(colWidths[j] * perUnit), g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE);
+//
+// for(int i = 0; i < lines.length; i++) {
+// g.drawString(lines[i].toString(), (int) (xoff
+// + offset + padding / PLACEHOLDER_SCALE), (int) (yoff + padding
+// + roffset + (i + 1) * g.getFontMetrics().getHeight() * this.perUnitHeight));
+// }
+// //g.drawString(entry.getValue().toString(), (int) (xoff
+// // + offset + padding / PLACEHOLDER_SCALE), (int) (yoff + padding
+// // + roffset + font.getSize() * this.perUnitHeight));
+// } else if (entry.getType() == 2) {
+// // Image ...
+// BufferedImage image;
+// try {
+// if (this.getEmblem() != null
+// && this.getEmblem().getFileName() != null
+// && new File(this.getEmblem().getFileName())
+// .exists()) {
+// image = ImageIO.read(new File(this.getEmblem()
+// .getFileName()));
+// } else {
+// image = ImageIO.read(new File(PDFASHelper
+// .getWorkDir()
+// + "/"
+// + entry.getValue().toString()));
+// }
+// int imgWidth = 30 * PLACEHOLDER_SCALE;
+// int imgHeight = 30 * PLACEHOLDER_SCALE;
+// Image img = image.getScaledInstance(imgWidth, imgHeight,
+// Image.SCALE_SMOOTH);
+//
+// g.drawImage(
+// img,
+// (int) (xoff + offset + padding + (((colWidths[j] * perUnit) - imgWidth - 2* padding)) / 2),
+// (int) (yoff + roffset + padding + ((rsize - imgHeight - 2* padding) / 2)),
+// null);
+// } catch (IOException e) {
+// log.warn("Failed to paint emblem to placeholder image");
+// }
+// } else {
+// // Table
+//
+// int colWidth = (int) (colWidths[j] * perUnit);
+//
+// float[] cheights = this.getTableHeights(
+// (Table) entry.getValue(), style, rsize, colWidth, g);
+//
+// this.drawTable(
+// (int) (xoff + offset),
+// (int) (yoff + roffset),
+// (int) (colWidths[j] * perUnit),
+// // (int)this.getTableHeight((Table)
+// // entry.getValue(), style),
+// rsize, (Table) entry.getValue(), style, g,
+// cheights);
+// /*
+// * if (rsize < tsize) { rsize = tsize; }
+// */
+// }
+// }
+// roffset += rsize;
+// }
+//
+// g.setFont(oldFont);
+//
+// return (int) roffset;
+// }
+//
+// private static Font getFont(Style style) {
+// String def = "COURIER-NORMAL-8";
+// String fontString = style.getFont();
+// String[] font_arr = fontString.split(",");
+// if (font_arr.length != 3) {
+// return Font.decode(def);
+// }
+// Font font = Font.decode(String.format("%s-%s-%s", font_arr[0], font_arr[2],
+// font_arr[1]));
+// return font.deriveFont((float) font.getSize() * PLACEHOLDER_SCALE);
+// }
+//
+// /**
+// * extracts the value font
+// *
+// * @param style
+// * the table style
+// * @return the value font
+// */
+// @SuppressWarnings("unused")
+// private static Font getValueFont(Style style) {
+// String def = "COURIER-NORMAL-8";
+// String fontString = style.getValueFont();
+// String[] font_arr = fontString.split(",");
+// if (font_arr.length != 3) {
+// return Font.decode(def);
+// }
+// Font font = Font.decode(String.format("%s-%s-%s", font_arr[0], font_arr[2],
+// font_arr[1]));
+// return font.deriveFont((float) font.getSize() * PLACEHOLDER_SCALE);
+// }
+//
+// private static String[] getLines(String text, int width, FontMetrics fmetric, int padding) {
+// String currentline = text;
+// int averageCharWi = fmetric.charWidth('c');
+//
+// int max_line_chars = (width - padding) / (averageCharWi);
+// ArrayList<String> lines = new ArrayList<String>();
+//
+// while(currentline.length() > max_line_chars) {
+// int cutidx = currentline.substring(0, max_line_chars).lastIndexOf(' ');
+// if(cutidx < 1) {
+// cutidx = max_line_chars - 1;
+// } else {
+// cutidx++;
+// }
+// String tmpLine = currentline.substring(0, cutidx);
+// lines.add(tmpLine);
+// currentline = currentline.substring(cutidx);
+// }
+// lines.add(currentline);
+//
+//
+// String[] arrline = new String[lines.size()];
+// for(int i = 0; i < lines.size(); i++) {
+// arrline[i] = lines.get(i);
+// }
+//
+// //log.debug(text + " needs " + lines.size() + " lines");
+//
+// return arrline;
+// }
+//
+// @SuppressWarnings("rawtypes")
+// private float[] getTableHeights(Table table, Style parentstyle, float height, int width, Graphics g) {
+// ArrayList rows = table.getRows();
+// float[] sizes = new float[rows.size()];
+// Style style = parentstyle;
+// if (table.getStyle() != null) {
+// style = table.getStyle();
+// }
+// Font font = PdfAsSignatureParameter.getFont(style);
+// g.setFont(font);
+//
+// float total_height = this.getTableHeight(table, parentstyle, width, g);
+//
+// float perUnit = height / total_height;
+//
+// this.perUnitHeight = perUnit;
+//
+// float[] colWidths = table.getColsRelativeWith();
+// float sum = 0;
+//
+// for (int i = 0; i < colWidths.length; i++) {
+// sum += colWidths[i];
+// }
+//
+// float perUnitWidth = width / sum;
+//
+// for (int i = 0; i < rows.size(); i++) {
+// Object robj = rows.get(i);
+// ArrayList cols = (ArrayList) robj;
+// float tsize = 0;
+// float rsize = 0;
+// for (int j = 0; j < cols.size(); j++) {
+// Entry entry = (Entry) cols.get(j);
+// if (entry.getType() == 0 || entry.getType() == 1) {
+// int colWidth = (int) (colWidths[j] * perUnitWidth);
+//
+// float trsize = getLines(entry.getValue().toString(), colWidth, g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE).length * g.getFontMetrics().getHeight() + (style.getPadding() * PLACEHOLDER_SCALE * 2);
+//
+// if (rsize < trsize) {
+// rsize = trsize;
+// }
+// } else if (entry.getType() == 3) {
+//
+// int colWidth = (int) (colWidths[j] * perUnitWidth);
+//
+// tsize = this
+// .getTableHeight((Table) entry.getValue(), style, colWidth, g);
+// if (rsize < tsize) {
+// rsize = tsize;
+// }
+// }
+// }
+// sizes[i] = perUnit * rsize;
+// }
+//
+// return sizes;
+// }
+//
+// @SuppressWarnings("rawtypes")
+// private float getTableHeight(Table table, Style parentstyle, int width, Graphics g) {
+// ArrayList rows = table.getRows();
+// Style style = parentstyle;
+// if (table.getStyle() != null) {
+// style = table.getStyle();
+// }
+// float size = 0;
+//
+// float[] colWidths = table.getColsRelativeWith();
+// float sum = 0;
+//
+// for (int i = 0; i < colWidths.length; i++) {
+// sum += colWidths[i];
+// }
+//
+// float perUnitWidth = width / sum;
+//
+// for (int i = 0; i < rows.size(); i++) {
+// Object robj = rows.get(i);
+// ArrayList cols = (ArrayList) robj;
+// float tsize = 0;
+// float rsize = 0;
+// for (int j = 0; j < cols.size(); j++) {
+// Entry entry = (Entry) cols.get(j);
+// if (entry.getType() == 0 || entry.getType() == 1) {
+// int colWidth = (int) (colWidths[j] * perUnitWidth);
+//
+// float trsize = getLines(entry.getValue().toString(), colWidth, g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE).length * g.getFontMetrics().getHeight() + (style.getPadding() * PLACEHOLDER_SCALE * 2);
+//
+// if (rsize < trsize) {
+// rsize = trsize;
+// }
+//
+// /*if (rsize < ((style.getPadding() * PLACEHOLDER_SCALE * 2) + fontSize)) {
+// rsize = ((style.getPadding() * PLACEHOLDER_SCALE * 2) + fontSize);
+// }*/
+// } else if (entry.getType() == 3) {
+// int colWidth = (int) (colWidths[j] * perUnitWidth);
+// tsize = this
+// .getTableHeight((Table) entry.getValue(), style, colWidth, g);
+// if (rsize < tsize) {
+// rsize = tsize;
+// }
+// }
+// }
+// size += rsize;
+// }
+//
+// return size;
+// }
}