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
[email protected]
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