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 2021/03/21 08:39:14 UTC
svn commit: r1887893 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java
Author: tilman
Date: Sun Mar 21 08:39:14 2021
New Revision: 1887893
URL: http://svn.apache.org/viewvc?rev=1887893&view=rev
Log:
PDFBOX-4892: refactor / reformat / simplify confusing code; avoid ClassCastException
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java?rev=1887893&r1=1887892&r2=1887893&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/common/PDStream.java Sun Mar 21 08:39:14 2021
@@ -25,6 +25,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
@@ -47,6 +50,8 @@ import org.apache.pdfbox.pdmodel.common.
*/
public class PDStream implements COSObjectable
{
+ private static final Log LOG = LogFactory.getLog(PDStream.class);
+
private final COSStream stream;
/**
@@ -276,34 +281,35 @@ public class PDStream implements COSObje
*/
public List<Object> getDecodeParms() throws IOException
{
- List<Object> retval = null;
+ // See PDF Ref 1.5 implementation note 7, the DP is sometimes used instead.
+ COSBase dp = stream.getDictionaryObject(COSName.DECODE_PARMS, COSName.DP);
- COSBase dp = stream.getDictionaryObject(COSName.DECODE_PARMS);
- if (dp == null)
- {
- // See PDF Ref 1.5 implementation note 7, the DP is sometimes used
- // instead.
- dp = stream.getDictionaryObject(COSName.DP);
- }
if (dp instanceof COSDictionary)
{
Map<?, ?> map = COSDictionaryMap.convertBasicTypesToMap((COSDictionary) dp);
- retval = new COSArrayList<>(map, dp, stream, COSName.DECODE_PARMS);
- }
- else if (dp instanceof COSArray)
+ return new COSArrayList<>(map, dp, stream, COSName.DECODE_PARMS);
+ }
+
+ if (dp instanceof COSArray)
{
COSArray array = (COSArray) dp;
List<Object> actuals = new ArrayList<>(array.size());
for (int i = 0; i < array.size(); i++)
{
- actuals.add(COSDictionaryMap
- .convertBasicTypesToMap((COSDictionary) array
- .getObject(i)));
+ COSBase base = array.getObject(i);
+ if (base instanceof COSDictionary)
+ {
+ actuals.add(COSDictionaryMap.convertBasicTypesToMap((COSDictionary) base));
+ }
+ else
+ {
+ LOG.warn("Expected COSDictionary, got " + base + ", ignored");
+ }
}
- retval = new COSArrayList<>(actuals, array);
+ return new COSArrayList<>(actuals, array);
}
- return retval;
+ return null;
}
/**
@@ -380,28 +386,34 @@ public class PDStream implements COSObje
*/
public List<Object> getFileDecodeParams() throws IOException
{
- List<Object> retval = null;
-
COSBase dp = stream.getDictionaryObject(COSName.F_DECODE_PARMS);
+
if (dp instanceof COSDictionary)
{
Map<?, ?> map = COSDictionaryMap.convertBasicTypesToMap((COSDictionary) dp);
- retval = new COSArrayList<>(map, dp, stream, COSName.F_DECODE_PARMS);
- }
- else if (dp instanceof COSArray)
+ return new COSArrayList<>(map, dp, stream, COSName.F_DECODE_PARMS);
+ }
+
+ if (dp instanceof COSArray)
{
COSArray array = (COSArray) dp;
List<Object> actuals = new ArrayList<>(array.size());
for (int i = 0; i < array.size(); i++)
{
- actuals.add(COSDictionaryMap
- .convertBasicTypesToMap((COSDictionary) array
- .getObject(i)));
+ COSBase base = array.getObject(i);
+ if (base instanceof COSDictionary)
+ {
+ actuals.add(COSDictionaryMap.convertBasicTypesToMap((COSDictionary) base));
+ }
+ else
+ {
+ LOG.warn("Expected COSDictionary, got " + base + ", ignored");
+ }
}
- retval = new COSArrayList<>(actuals, array);
+ return new COSArrayList<>(actuals, array);
}
- return retval;
+ return null;
}
/**
@@ -411,8 +423,7 @@ public class PDStream implements COSObje
*/
public void setFileDecodeParams(List<?> decodeParams)
{
- stream.setItem("FDecodeParams",
- COSArrayList.converterToCOSArray(decodeParams));
+ stream.setItem("FDecodeParams", COSArrayList.converterToCOSArray(decodeParams));
}
/**