Author: tilman
Date: Sat Jul 25 14:37:38 2026
New Revision: 1936580
Log:
PDFBOX-6224: support the NoToggleToOff flag by Valery Bokov; closes #490
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
Sat Jul 25 14:37:35 2026 (r1936579)
+++
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java
Sat Jul 25 14:37:38 2026 (r1936580)
@@ -82,6 +82,29 @@ public final class PDRadioButton extends
}
/**
+ * From the PDF Spec <br>
+ * If set, exactly one radio button shall be selected at all times;
clicking the currently
+ * selected button has no effect. If clear, clicking the selected button
deselects it, leaving
+ * no button selected. This flag is meaningful only if the radio buttons
are mutually exclusive,
+ * i.e. {@link #isRadiosInUnison()} is false.
+ *
+ * @param noToggleToOff The new flag for noToggleToOff.
+ */
+ public void setNoToggleToOff(boolean noToggleToOff)
+ {
+ getCOSObject().setFlag(COSName.FF, FLAG_NO_TOGGLE_TO_OFF,
noToggleToOff);
+ }
+
+ /**
+ *
+ * @return true if the flag is set preventing a radio button from being
toggled to off.
+ */
+ public boolean isNoToggleToOff()
+ {
+ return getCOSObject().getFlag(COSName.FF, FLAG_NO_TOGGLE_TO_OFF);
+ }
+
+ /**
* This will get the selected index.
* <p>
* A RadioButton might have multiple same value options which are not
selected jointly if
Modified:
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
Sat Jul 25 14:37:35 2026 (r1936579)
+++
pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
Sat Jul 25 14:37:38 2026 (r1936580)
@@ -144,6 +144,34 @@ public class TestRadioButtons
}
/**
+ * Test getting/setting the NoToggleToOff flag (PDF spec Ff bit 15).
+ *
+ * @throws IOException If there is an error creating the field.
+ */
+ @Test
+ public void testNoToggleToOff() throws IOException
+ {
+ PDDocument doc = new PDDocument();
+ PDAcroForm acroForm = new PDAcroForm(doc);
+ PDRadioButton radioButton = new PDRadioButton(acroForm);
+
+ // default shall be false/unset
+ assertFalse(radioButton.isNoToggleToOff());
+
+ radioButton.setNoToggleToOff(true);
+ assertTrue(radioButton.isNoToggleToOff());
+ // spec bit 15 -> mask 1 << 14
+ assertEquals(1 << 14,
+ radioButton.getCOSObject().getInt(COSName.FF) & (1 << 14));
+
+ radioButton.setNoToggleToOff(false);
+ assertFalse(radioButton.isNoToggleToOff());
+ assertEquals(0, radioButton.getCOSObject().getInt(COSName.FF) & (1 <<
14));
+
+ doc.close();
+ }
+
+ /**
* PDFBOX-3656 Radio button field with FLAG_RADIOS_IN_UNISON false
*
* @throws IOException