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&reg; 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

Reply via email to