From 1a8704afc729bd1d85427c952e6cc7f9f0c69522 Mon Sep 17 00:00:00 2001 From: "valery.bokov" Date: Sat, 4 Oct 2025 20:27:35 +0200 Subject: [PATCH] extract setCOSValue in PDField.importFDF --- .../pdmodel/interactive/form/PDChoice.java | 13 ++++++ .../pdmodel/interactive/form/PDField.java | 42 +++++-------------- .../interactive/form/PDTerminalField.java | 26 ++++++++++++ 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java index 01d5461c621..d5a1228c5e3 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDChoice.java @@ -258,6 +258,19 @@ public void setSelectedOptionsIndex(List values) } } + @Override + protected void setCOSValue(COSBase fieldValue) throws IOException + { + if (fieldValue instanceof COSArray) + { + setValue(((COSArray) fieldValue).toCOSStringStringList()); + } + else + { + super.setCOSValue(fieldValue); + } + } + /** * Determines if Sort is set. * diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java index 1c5058f0063..cac413bd255 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDField.java @@ -23,8 +23,6 @@ import org.apache.pdfbox.cos.COSBase; import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSName; -import org.apache.pdfbox.cos.COSStream; -import org.apache.pdfbox.cos.COSString; import org.apache.pdfbox.pdmodel.common.COSObjectable; import org.apache.pdfbox.pdmodel.fdf.FDFField; import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions; @@ -227,6 +225,14 @@ public PDFormFieldAdditionalActions getActions() return aa != null ? new PDFormFieldAdditionalActions(aa) : null; } + protected void setCOSValue(COSBase fieldValue) throws IOException + { + if (fieldValue != null) + { + dictionary.setItem(COSName.V, fieldValue); + } + } + /** * This will import a fdf field from a fdf document. * @@ -236,36 +242,8 @@ public PDFormFieldAdditionalActions getActions() void importFDF(FDFField fdfField) throws IOException { COSBase fieldValue = fdfField.getCOSValue(); - - if (fieldValue != null && this instanceof PDTerminalField) - { - PDTerminalField currentField = (PDTerminalField) this; - - if (fieldValue instanceof COSName) - { - currentField.setValue(((COSName) fieldValue).getName()); - } - else if (fieldValue instanceof COSString) - { - currentField.setValue(((COSString) fieldValue).getString()); - } - else if (fieldValue instanceof COSStream) - { - currentField.setValue(((COSStream) fieldValue).toTextString()); - } - else if (fieldValue instanceof COSArray && this instanceof PDChoice) - { - ((PDChoice) this).setValue(((COSArray) fieldValue).toCOSStringStringList()); - } - else - { - throw new IOException("Error:Unknown type for field import" + fieldValue); - } - } - else if (fieldValue != null) - { - dictionary.setItem(COSName.V, fieldValue); - } + + setCOSValue(fieldValue); Integer ff = fdfField.getFieldFlags(); if (ff != null) diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTerminalField.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTerminalField.java index 319d2ded5bc..b7c8d504cae 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTerminalField.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDTerminalField.java @@ -23,6 +23,8 @@ import org.apache.pdfbox.cos.COSBase; import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSInteger; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.cos.COSStream; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.fdf.FDFField; import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions; @@ -95,6 +97,30 @@ public String getFieldType() return fieldType; } + @Override + protected void setCOSValue(COSBase fieldValue) throws IOException + { + if (fieldValue != null) + { + if (fieldValue instanceof COSName) + { + setValue(((COSName) fieldValue).getName()); + } + else if (fieldValue instanceof COSString) + { + setValue(((COSString) fieldValue).getString()); + } + else if (fieldValue instanceof COSStream) + { + setValue(((COSStream) fieldValue).toTextString()); + } + else + { + throw new IOException("Error:Unknown type for field import" + fieldValue); + } + } + } + @Override public void importFDF(FDFField fdfField) throws IOException {