Hello, I am encountering a problem with the scaling of digital signature images. I am providing a SignatureAppearance with an Image 4 times bigger than the signature field. It ends up 4 times smaller. It seems that the problem lies in that the image is first scaled down in PdfAppearance.getAppearance() (GRAPHIC mode), then a second time in BidiLine.processLine().
The rescale in BidiLine is triggered because the following condition sometimes become true due to the rounding of float operations (1.999997 < 2): img.isScaleToFitLineWhenOverflow() && yLine + 2 * descender - img.getScaledHeight() - ck.getImageOffsetY() - img.getSpacingBefore() < minY Then, the scale to apply is performed based on the original image size and not on the already scaled size: float scalePercent = (yLine + 2 * descender - ck.getImageOffsetY() - img.getSpacingBefore() - minY) / img.getHeight(); Here is the patch I am using to fix this problem: Index: src/main/java/com/itextpdf/text/pdf/BidiLine.java =================================================================== --- src/main/java/com/itextpdf/text/pdf/BidiLine.java (revision 5736) +++ src/main/java/com/itextpdf/text/pdf/BidiLine.java (working copy) @@ -359,7 +359,7 @@ if (img.isScaleToFitLineWhenOverflow() && yLine + 2 * descender - img.getScaledHeight() - ck.getImageOffsetY() - img.getSpacingBefore() < minY) { //float scalePercent = (yLine + 2 * descender - ck.getImageOffsetY() - img.getSpacingBefore() - minY) / img.getHeight() * 100; //img.scalePercent(scalePercent); - float scalePercent = (yLine + 2 * descender - ck.getImageOffsetY() - img.getSpacingBefore() - minY) / img.getHeight(); + float scalePercent = (yLine + 2 * descender - ck.getImageOffsetY() - img.getSpacingBefore() - minY) / img.getScaledHeight(); ck.setImageScalePercentage(scalePercent); } } @@ -390,7 +390,7 @@ if (img.isScaleToFitLineWhenOverflow()) { //float scalePercent = width / img.getWidth() * 100; //img.scalePercent(scalePercent); - float scalePercent = width / img.getWidth(); + float scalePercent = width / img.getScaledWidth(); ck.setImageScalePercentage(scalePercent); charWidth = width; } Julien ------------------------------------------------------------------------------ Own the Future-Intel® Level Up Game Demo Contest 2013 Rise to greatness in Intel's independent game demo contest. Compete for recognition, cash, and the chance to get your game on Steam. $5K grand prize plus 10 genre and skill prizes. Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d _______________________________________________ iText-questions mailing list iText-questions@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/itext-questions iText(R) is a registered trademark of 1T3XT BVBA. Many questions posted to this list can (and will) be answered with a reference to the iText book: http://www.itextpdf.com/book/ Please check the keywords list before you ask for examples: http://itextpdf.com/themes/keywords.php