diff options
4 files changed, 97 insertions, 4 deletions
| diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java new file mode 100644 index 00000000..c5279100 --- /dev/null +++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java @@ -0,0 +1,69 @@ +package at.gv.egiz.pdfas.common.utils; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; +import java.awt.image.IndexColorModel; +import java.awt.image.WritableRaster; + +public class ImageUtils { +	 +	public static BufferedImage removeAlphaChannel(BufferedImage src) { +		if (src.getColorModel().hasAlpha()) +        { +            // extract the alpha information +           // WritableRaster alphaRaster = src. +            //ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY),  +            //        false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); +            //alpha = new BufferedImage(cm, alphaRaster, false, null); +            // create a RGB image without alpha +             +            BufferedImage image = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_RGB); +            Graphics2D g = image.createGraphics(); +            g.setComposite(AlphaComposite.Src); +            g.drawImage(src, 0, 0, null); +            g.dispose(); +            return image; +        } +		return src; +	} +	 +	public static BufferedImage convertRGBAToIndexed(BufferedImage src) { +		BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), +				BufferedImage.TYPE_BYTE_INDEXED); +		Graphics g = dest.getGraphics(); +		g.setColor(new Color(231, 20, 189)); +		g.fillRect(0, 0, dest.getWidth(), dest.getHeight()); // fill with a +																// hideous color +																// and make it +																// transparent +		dest = makeTransparent(dest, 0, 0); +		dest.createGraphics().drawImage(src, 0, 0, null); +		return dest; +	} + +	public static BufferedImage makeTransparent(BufferedImage image, int x, +			int y) { +		ColorModel cm = image.getColorModel(); +		if (!(cm instanceof IndexColorModel)) +			return image; // sorry... +		IndexColorModel icm = (IndexColorModel) cm; +		WritableRaster raster = image.getRaster(); +		int pixel = raster.getSample(x, y, 0); // pixel is offset in ICM's +												// palette +		int size = icm.getMapSize(); +		byte[] reds = new byte[size]; +		byte[] greens = new byte[size]; +		byte[] blues = new byte[size]; +		icm.getReds(reds); +		icm.getGreens(greens); +		icm.getBlues(blues); +		IndexColorModel icm2 = new IndexColorModel(8, size, reds, greens, +				blues, pixel); +		return new BufferedImage(icm2, raster, image.isAlphaPremultiplied(), +				null); +	} +} diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java index ed7033eb..c40704b1 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/PdfAsImpl.java @@ -89,7 +89,7 @@ public class PdfAsImpl implements PdfAs, IConfigurationConstants {  		String signatureProfile = parameter.getSignatureProfileId();  		if (signatureProfile != null) { -			if (!settings.hasPrefix("sig_obj." + signatureProfile + ".key")) { +			if (!settings.hasPrefix("sig_obj." + signatureProfile)) {  				throw new PdfAsValidationException("error.pdf.sig.09",  						signatureProfile);  			} diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java index 39fe164c..82116474 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFAsVisualSignatureBuilder.java @@ -28,6 +28,7 @@ import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;  import org.apache.pdfbox.pdmodel.font.PDFont;  import org.apache.pdfbox.pdmodel.font.PDType1Font;  import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg; +import org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap;  import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;  import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;  import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; @@ -42,6 +43,7 @@ import org.slf4j.LoggerFactory;  import at.gv.egiz.pdfas.common.exceptions.PdfAsException;  import at.gv.egiz.pdfas.common.settings.ISettings; +import at.gv.egiz.pdfas.common.utils.ImageUtils;  import at.knowcenter.wag.egov.egiz.table.Entry;  import at.knowcenter.wag.egov.egiz.table.Style; @@ -383,8 +385,14 @@ public class PDFAsVisualSignatureBuilder extends PDVisibleSigBuilder {  										.getWidth();  							}  						} +						 +						if(img.getAlphaRaster() == null && img.getColorModel().hasAlpha()) { +							img = ImageUtils.removeAlphaChannel(img); +						}  						PDXObjectImage pdImage = new PDJpeg(template, img); + +						  						ImageObject image = new ImageObject(pdImage, size);  						images.put(img_ref, image);  						innerFormResources.addXObject(pdImage, "Im"); diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java index c6d515f9..e76c849e 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/stamping/pdfbox/PDFBoxTable.java @@ -80,20 +80,36 @@ public class PDFBoxTable {  		}  		if (style == null) { -			throw new IOException("Failed to determine Table style"); +			throw new IOException("Failed to determine Table style, for table " + abstractTable.getName());  		}  		String fontString = style.getFont();  		String vfontString = style.getValueFont(); +		 +		if(fontString == null || vfontString == null) { +			 +		} +		  		if (parent != null && style == parent.style) {  			font = parent.getFont();  			valueFont = parent.getValueFont();  		} else { - +			if(fontString == null && parent != null && parent.style != null) { +				fontString = parent.style.getFont(); +			} else if(fontString == null) { +				throw new IOException("Failed to determine Table font style, for table " + abstractTable.getName()); +			} +			  			font = new PDFBoxFont(fontString, settings); - +			 +			if(vfontString == null && parent != null && parent.style != null) { +				vfontString = parent.style.getValueFont(); +			} else if(fontString == null) { +				throw new IOException("Failed to determine value Table font style, for table " + abstractTable.getName()); +			} +			  			valueFont = new PDFBoxFont(vfontString, settings);  		}  		padding = style.getPadding(); | 
