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;