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 2024/08/04 14:26:58 UTC
svn commit: r1919669 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
Author: msahyoun
Date: Sun Aug 4 14:26:58 2024
New Revision: 1919669
URL: http://svn.apache.org/viewvc?rev=1919669&view=rev
Log:
PDFBOX5831: fix appearnce when using a numeric value
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java?rev=1919669&r1=1919668&r2=1919669&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDButton.java Sun Aug 4 14:26:58 2024
@@ -284,29 +284,24 @@ public abstract class PDButton extends P
@Override
void constructAppearances() throws IOException
{
- List<String> exportValues = getExportValues();
- if (!exportValues.isEmpty())
+ for (PDAnnotationWidget widget : getWidgets())
{
- // the value is the index value of the option. So we need to get that
- // and use it to set the value
- try
+ PDAppearanceDictionary appearance = widget.getAppearance();
+ if (appearance == null)
{
- int optionsIndex = Integer.parseInt(getValue());
- if (optionsIndex < exportValues.size())
- {
- updateByOption(exportValues.get(optionsIndex));
- }
- } catch (NumberFormatException e)
+ continue;
+ }
+ PDAppearanceEntry appearanceEntry = appearance.getNormalAppearance();
+ if (appearanceEntry.getCOSObject().containsKey(getCOSObject().getCOSName(COSName.V)))
{
- // silently ignore that
- // and don't update the appearance
+ widget.setAppearanceState(getCOSObject().getCOSName(COSName.V).getName());
+ }
+ else
+ {
+ widget.setAppearanceState(COSName.Off.getName());
}
}
- else
- {
- updateByValue(getValue());
- }
- }
+ }
/**
* Get the values to set individual buttons within a group to the on state.
Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java?rev=1919669&r1=1919668&r2=1919669&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java Sun Aug 4 14:26:58 2024
@@ -359,4 +359,43 @@ class TestRadioButtons
"the index shall be equals with the set value of 4");
}
}
+
+ /**
+ * PDFBOX-5831 Numeric value for Opt entry
+ *
+ * @throws IOException
+ * @throws URISyntaxException
+ */
+ @Test
+ void testPDFBox5831NumericValueForOpt() throws IOException, URISyntaxException
+ {
+ String sourceUrl = "https://issues.apache.org/jira/secure/attachment/13069137/AU_Erklaerung_final.pdf";
+
+ try (PDDocument testPdf = Loader.loadPDF(
+ RandomAccessReadBuffer.createBufferFromStream(new URI(sourceUrl).toURL().openStream())))
+ {
+ PDAcroForm acroForm = testPdf.getDocumentCatalog().getAcroForm();
+ PDRadioButton field = (PDRadioButton) acroForm.getField("Formular1[0].Seite1[0].TF_P[0].Optionsfeldliste[0]");
+
+ field.setValue(0);
+ assertEquals("1", field.getValue());
+ assertEquals(COSName.getPDFName("0"), field.getCOSObject().getDictionaryObject(COSName.V));
+ assertEquals(0, field.getSelectedIndex());
+
+ field.setValue("1");
+ assertEquals("1", field.getValue());
+ assertEquals(COSName.getPDFName("0"), field.getCOSObject().getDictionaryObject(COSName.V));
+ assertEquals(0, field.getSelectedIndex());
+
+ field.setValue(1);
+ assertEquals("2", field.getValue());
+ assertEquals(COSName.getPDFName("1"), field.getCOSObject().getDictionaryObject(COSName.V));
+ assertEquals(1, field.getSelectedIndex());
+
+ field.setValue("2");
+ assertEquals("2", field.getValue());
+ assertEquals(COSName.getPDFName("1"), field.getCOSObject().getDictionaryObject(COSName.V));
+ assertEquals(1, field.getSelectedIndex());
+ }
+ }
}