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 2023/08/14 06:23:19 UTC
svn commit: r1911634 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
Author: tilman
Date: Mon Aug 14 06:23:18 2023
New Revision: 1911634
URL: http://svn.apache.org/viewvc?rev=1911634&view=rev
Log:
PDFBOX-5637: set/get field calculation order
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java?rev=1911634&r1=1911633&r2=1911634&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java Mon Aug 14 06:23:18 2023
@@ -676,6 +676,57 @@ public final class PDAcroForm implements
}
/**
+ * Return the calculation order in which field values should be recalculated when the value of
+ * any field changes. (Read about "Trigger Events" in the PDF specification)
+ *
+ * @return field list. Note these objects may not be identical to PDField objects retrieved from
+ * other methods (depending on cache setting). The best strategy is to call
+ * {@link #getCOSObject()} to check for identity. The list is not backed by the /CO COSArray in
+ * the document.
+ */
+ public List<PDField> getCalcOrder()
+ {
+ COSArray co = dictionary.getCOSArray(COSName.CO);
+ if (co == null)
+ {
+ return Collections.emptyList();
+ }
+
+ Iterable<PDField> fields = isCachingFields() ? fieldCache.values() : getFieldTree();
+
+ List<PDField> actuals = new ArrayList<PDField>();
+ for (int i = 0; i < co.size(); i++)
+ {
+ COSBase item = co.getObject(i);
+ for (PDField field : fields)
+ {
+ if (field.getCOSObject() == item)
+ {
+ actuals.add(field);
+ break;
+ }
+ }
+ }
+ return actuals;
+ }
+
+ /**
+ * Set the calculation order in which field values should be recalculated when the value of any
+ * field changes. (Read about "Trigger Events" in the PDF specification)
+ *
+ * @param fields The field list.
+ */
+ public void setCalcOrder(List<PDField> fields)
+ {
+ COSArray array = new COSArray();
+ for (PDField field : fields)
+ {
+ array.add(field);
+ }
+ dictionary.setItem(COSName.CO, array);
+ }
+
+ /**
* Set a handler to support JavaScript actions in the form.
*
* @return scriptingHandler