diff --git a/validation-model/src/main/java/org/verapdf/gf/model/factory/operators/OperatorParser.java b/validation-model/src/main/java/org/verapdf/gf/model/factory/operators/OperatorParser.java index 3a30cb60d..577243374 100644 --- a/validation-model/src/main/java/org/verapdf/gf/model/factory/operators/OperatorParser.java +++ b/validation-model/src/main/java/org/verapdf/gf/model/factory/operators/OperatorParser.java @@ -24,6 +24,7 @@ package org.verapdf.gf.model.factory.operators; import org.verapdf.as.ASAtom; +import org.verapdf.as.io.ASMemoryInStream; import org.verapdf.cos.*; import org.verapdf.gf.model.factory.colors.ColorSpaceFactory; import org.verapdf.gf.model.impl.containers.StaticContainers; @@ -74,6 +75,7 @@ import org.verapdf.pdfa.flavours.PDFFlavours; import org.verapdf.tools.StaticResources; +import java.io.IOException; import java.util.*; import java.util.logging.*; @@ -623,9 +625,15 @@ private static void processInlineImage(List && (gs.isProcessColorOperators() || Boolean.TRUE.equals(imageParameters.getBooleanKey(ASAtom.IM)))) { arguments.add(imageParameters); - processedOperators.add(new GFOp_BI(new ArrayList<>())); + long streamLength = 0; + try { + streamLength = ((ASMemoryInStream) rawOperator.getImageData()).getStreamLength(); + } catch (IOException e) { + LOGGER.log(Level.SEVERE, "Error during computing inline image data stream length", e); + } + processedOperators.add(new GFOp_BI(new ArrayList<>())); processedOperators.add(new GFOp_ID(arguments)); - processedOperators.add(new GFOp_EI(arguments, resourcesHandler, gs.getFillColorSpace())); + processedOperators.add(new GFOp_EI(arguments, resourcesHandler, gs.getFillColorSpace(), streamLength)); } } diff --git a/validation-model/src/main/java/org/verapdf/gf/model/impl/operator/inlineimage/GFOp_EI.java b/validation-model/src/main/java/org/verapdf/gf/model/impl/operator/inlineimage/GFOp_EI.java index db3779542..2992a67b1 100644 --- a/validation-model/src/main/java/org/verapdf/gf/model/impl/operator/inlineimage/GFOp_EI.java +++ b/validation-model/src/main/java/org/verapdf/gf/model/impl/operator/inlineimage/GFOp_EI.java @@ -43,12 +43,14 @@ public class GFOp_EI extends GFOpInlineImage implements Op_EI { private final PDResourcesHandler resourcesHandler; private final org.verapdf.pd.colors.PDColorSpace inheritedFillCS; + private final long dataStreamLength; public GFOp_EI(List arguments, PDResourcesHandler resourcesHandler, - org.verapdf.pd.colors.PDColorSpace inheritedFillCS) { + org.verapdf.pd.colors.PDColorSpace inheritedFillCS, Long dataStreamLength) { super(arguments, OP_EI_TYPE); this.resourcesHandler = resourcesHandler; this.inheritedFillCS = inheritedFillCS; + this.dataStreamLength = dataStreamLength; } @Override @@ -63,7 +65,7 @@ private List getInlineImage() { COSBase parameters = this.arguments.get(0); org.verapdf.pd.images.PDInlineImage inlineImage = new org.verapdf.pd.images.PDInlineImage(new COSObject(parameters), - resourcesHandler.getObjectResources(), resourcesHandler.getPageResources()); + resourcesHandler.getObjectResources(), resourcesHandler.getPageResources(), dataStreamLength); List inlineImages = new ArrayList<>(MAX_NUMBER_OF_ELEMENTS); inlineImages.add(new GFPDInlineImage(inlineImage, this.inheritedFillCS)); return Collections.unmodifiableList(inlineImages); diff --git a/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/images/GFPDInlineImage.java b/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/images/GFPDInlineImage.java index 142d8ce7a..f3a066053 100644 --- a/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/images/GFPDInlineImage.java +++ b/validation-model/src/main/java/org/verapdf/gf/model/impl/pd/images/GFPDInlineImage.java @@ -160,4 +160,14 @@ private List getIntent() { public Boolean getisMask() { return false; } + + @Override + public Long getL() { + return ((org.verapdf.pd.images.PDInlineImage) this.simplePDObject).getL(); + } + + @Override + public Long getstreamLength() { + return ((org.verapdf.pd.images.PDInlineImage) this.simplePDObject).getStreamLength(); + } }