Author: msahyoun Date: Fri Apr 5 07:43:07 2024 New Revision: 1916816 URL: http://svn.apache.org/viewvc?rev=1916816&view=rev Log: PDFBOX-5784: fix character alignment, draw dviders for comb
Added: pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf (with props) pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf-1.png (with props) Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/CombAlignmentTest.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=1916816&r1=1916815&r2=1916816&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 Apr 5 07:43:07 2024 @@ -379,6 +379,23 @@ class AppearanceGeneratorHelper { clipRect.getHeight()); contents.closeAndStroke(); } + + // draw the dividers for a comb field + if (borderColour != null && shallComb()) { + int maxLen = ((PDTextField) field).getMaxLen(); + PDRectangle bbox = resolveBoundingBox(widget, appearanceStream); + PDRectangle clipRect = applyPadding(bbox, Math.max(DEFAULT_PADDING, lineWidth/2)); + float lowerLeft = clipRect.getLowerLeftX(); + float height = clipRect.getHeight(); + + float combWidth = bbox.getWidth() / maxLen; + + for (int i= 0; i < maxLen - 1; i++) { + contents.moveTo(combWidth + combWidth * i, height); + contents.lineTo(combWidth + combWidth * i, lowerLeft); + } + contents.closeAndStroke(); + } } contents.close(); @@ -647,26 +664,29 @@ class AppearanceGeneratorHelper { int quadding = field.getQ(); int numChars = Math.min(value.length(), maxLen); - PDRectangle paddingEdge = applyPadding(appearanceStream.getBBox(), 1); - float combWidth = appearanceStream.getBBox().getWidth() / maxLen; float ascentAtFontSize = font.getFontDescriptor().getAscent() / FONTSCALE * fontSize; - float baselineOffset = paddingEdge.getLowerLeftY() - + (appearanceStream.getBBox().getHeight() - ascentAtFontSize) / 2; + + float baselineOffset = appearanceStream.getBBox().getLowerLeftY() + + (appearanceStream.getBBox().getHeight() - ascentAtFontSize)/2; float prevCharWidth = 0f; - float xOffset = combWidth / 2; + // set initial offset based on width of first char. + float firstCharWidth = font.getStringWidth(value.substring(0, 1)) / FONTSCALE * fontSize; + float initialOffset = (combWidth - firstCharWidth)/2; // add to initial offset if right aligned or centered if (quadding == 2) { - xOffset = xOffset + (maxLen - numChars) * combWidth; + initialOffset = initialOffset + (maxLen - numChars) * combWidth; } else if (quadding == 1) { - xOffset = xOffset + (maxLen - numChars) / 2 * combWidth; + initialOffset = initialOffset + Math.floorDiv(maxLen - numChars, 2) * combWidth; } + + float xOffset = initialOffset; for (int i = 0; i < numChars; i++) { @@ -675,7 +695,11 @@ class AppearanceGeneratorHelper { xOffset = xOffset + prevCharWidth / 2 - currCharWidth / 2; - contents.newLineAtOffset(xOffset, baselineOffset); + if (i == 0) { + contents.newLineAtOffset(initialOffset, baselineOffset); + } else { + contents.newLineAtOffset(xOffset, baselineOffset); + } contents.showText(combString); baselineOffset = 0; Modified: pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/CombAlignmentTest.java URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/CombAlignmentTest.java?rev=1916816&r1=1916815&r2=1916816&view=diff ============================================================================== --- pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/CombAlignmentTest.java (original) +++ pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/CombAlignmentTest.java Fri Apr 5 07:43:07 2024 @@ -18,6 +18,7 @@ package org.apache.pdfbox.pdmodel.intera import java.io.File; import java.io.IOException; + import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.TestPDFToImage; import org.junit.Before; @@ -55,6 +56,33 @@ public class CombAlignmentTest // compare rendering File file = new File(OUT_DIR, NAME_OF_PDF); document.save(file); + TestPDFToImage testPDFToImage = new TestPDFToImage(TestPDFToImage.class.getName()); + if (!testPDFToImage.doTestFile(file, IN_DIR.getAbsolutePath(), OUT_DIR.getAbsolutePath())) + { + // don't fail, rendering is different on different systems, result must be viewed manually + System.err.println("Rendering of " + file + + " failed or is not identical to expected rendering in " + IN_DIR + " directory"); + } + document.close(); + } + + // PDFBOX-5784 + @Test + public void testPDFBOX5784() throws IOException + { + + final String NAME_OF_PDF = "PDFBOX-5784.pdf"; + + PDDocument document = PDDocument.load(new File(IN_DIR, NAME_OF_PDF)); + PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); + for (PDField field : acroForm.getFieldTree()) { + if (!field.getPartialName().contains("acrobat")) { + field.setValue("WIaqg"); + } + } + // compare rendering + File file = new File(OUT_DIR, NAME_OF_PDF); + document.save(file); TestPDFToImage testPDFToImage = new TestPDFToImage(TestPDFToImage.class.getName()); if (!testPDFToImage.doTestFile(file, IN_DIR.getAbsolutePath(), OUT_DIR.getAbsolutePath())) { Added: pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf?rev=1916816&view=auto ============================================================================== Binary file - no diff available. Propchange: pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf ------------------------------------------------------------------------------ svn:mime-type = application/pdf Added: pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf-1.png URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf-1.png?rev=1916816&view=auto ============================================================================== Binary file - no diff available. Propchange: pdfbox/branches/2.0/pdfbox/src/test/resources/org/apache/pdfbox/pdmodel/interactive/form/PDFBOX-5784.pdf-1.png ------------------------------------------------------------------------------ svn:mime-type = image/png