You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2021/08/13 17:40:02 UTC

svn commit: r1892313 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java

Author: msahyoun
Date: Fri Aug 13 17:40:01 2021
New Revision: 1892313

URL: http://svn.apache.org/viewvc?rev=1892313&view=rev
Log:
PDFBOX-5256: support quadding for fields with comb flag

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1892313&r1=1892312&r2=1892313&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java Fri Aug 13 17:40:01 2021
@@ -625,11 +625,8 @@ class AppearanceGeneratorHelper {
      */
     private void insertGeneratedCombAppearance(PDPageContentStream contents, PDAppearanceStream appearanceStream,
             PDFont font, float fontSize) throws IOException {
-
-        // TODO: Currently the quadding is not taken into account
-        // so the comb is always filled from left to right.
-
         int maxLen = ((PDTextField) field).getMaxLen();
+        int quadding = ((PDTextField) field).getQ();
         int numChars = Math.min(value.length(), maxLen);
 
         PDRectangle paddingEdge = applyPadding(appearanceStream.getBBox(), 1);
@@ -643,7 +640,18 @@ class AppearanceGeneratorHelper {
 
         float xOffset = combWidth / 2;
 
-        for (int i = 0; i < numChars; i++) {
+        // add to initial offset if right aligned or centered
+        if (quadding == 2)
+        {
+            xOffset = xOffset + (maxLen - numChars) * combWidth;
+        }
+        else if (quadding == 1)
+        {
+            xOffset = xOffset + Math.floorDiv(maxLen - numChars, 2) * combWidth;
+        }
+ 
+        for (int i = 0; i < numChars; i++)
+        {
             String combString = value.substring(i, i + 1);
             float currCharWidth = font.getStringWidth(combString) / FONTSCALE * fontSize / 2;