You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2026/07/25 14:37:35 UTC
svn commit: r1936579 - in pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/interactive/form test/java/org/apache/pdfbox/pdmodel/interactive/form
Author: tilman
Date: Sat Jul 25 14:37:35 2026
New Revision: 1936579
Log:
PDFBOX-6224: support the NoToggleToOff flag by Valery Bokov; closes #490
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.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/PDRadioButton.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java Sat Jul 25 14:13:38 2026 (r1936578)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDRadioButton.java Sat Jul 25 14:37:35 2026 (r1936579)
@@ -81,6 +81,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/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java Sat Jul 25 14:13:38 2026 (r1936578)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/interactive/form/TestRadioButtons.java Sat Jul 25 14:37:35 2026 (r1936579)
@@ -137,6 +137,33 @@ class TestRadioButtons
}
/**
+ * Test getting/setting the NoToggleToOff flag (PDF spec Ff bit 15).
+ *
+ * @throws IOException If there is an error creating the field.
+ */
+ @Test
+ void testNoToggleToOff() throws IOException
+ {
+ try (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));
+ }
+ }
+
+ /**
* PDFBOX-3656 Radio button field with FLAG_RADIOS_IN_UNISON false
*
* @throws IOException