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;
 


Reply via email to