DM-326: extend removeInvisibleElements
This commit is contained in:
parent
ab3d274c8f
commit
e121ef52b9
@ -1,12 +1,14 @@
|
|||||||
package com.iqser.red.pdftronlogic.commons;
|
package com.iqser.red.pdftronlogic.commons;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.GeneralPath;
|
import java.awt.geom.GeneralPath;
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import com.google.common.primitives.Bytes;
|
import com.google.common.primitives.Bytes;
|
||||||
import com.google.common.primitives.Doubles;
|
import com.google.common.primitives.Doubles;
|
||||||
|
import com.pdftron.common.Matrix2D;
|
||||||
import com.pdftron.common.PDFNetException;
|
import com.pdftron.common.PDFNetException;
|
||||||
import com.pdftron.pdf.ColorPt;
|
import com.pdftron.pdf.ColorPt;
|
||||||
import com.pdftron.pdf.ColorSpace;
|
import com.pdftron.pdf.ColorSpace;
|
||||||
@ -48,6 +50,15 @@ public class Converter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public GeneralPath convertToGeneralPathAndTransformToInitialUserSpace(PathData pathData, Matrix2D ctm) throws PDFNetException{
|
||||||
|
GeneralPath linePath = Converter.convertToGeneralPath(pathData);
|
||||||
|
|
||||||
|
//transform path to initial user space
|
||||||
|
var affineTransform = new AffineTransform(ctm.getA(), ctm.getB(), ctm.getC(), ctm.getD(), ctm.getH(), ctm.getV());
|
||||||
|
linePath.transform(affineTransform);
|
||||||
|
return linePath;
|
||||||
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public static Color convertColor(ColorSpace colorSpace, ColorPt colorPt) {
|
public static Color convertColor(ColorSpace colorSpace, ColorPt colorPt) {
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,43 @@ public class ElementFeatures {
|
|||||||
int elementType;
|
int elementType;
|
||||||
Rectangle2D boundingBox;
|
Rectangle2D boundingBox;
|
||||||
|
|
||||||
|
public static ElementFeatures extractFeatures(Element element) throws PDFNetException {
|
||||||
|
|
||||||
|
return switch (element.getType()) {
|
||||||
|
case Element.e_path -> Path.builder()
|
||||||
|
.elementType(element.getType())
|
||||||
|
.boundingBox(Converter.toRectangle2D(element.getBBox()))
|
||||||
|
.isClippingPath(element.isClippingPath())
|
||||||
|
.isClipWindingFill(element.isClipWindingFill())
|
||||||
|
.isStroked(element.isStroked())
|
||||||
|
.isFilled(element.isFilled())
|
||||||
|
.isWindingFill(element.isWindingFill())
|
||||||
|
.fillColor(Converter.convertColor(element.getGState().getFillColorSpace(), element.getGState().getFillColor()))
|
||||||
|
.strokeColor(Converter.convertColor(element.getGState().getStrokeColorSpace(), element.getGState().getStrokeColor()))
|
||||||
|
.linePath(Converter.convertToGeneralPathAndTransformToInitialUserSpace(element.getPathData(), element.getCTM()))
|
||||||
|
.build();
|
||||||
|
case Element.e_text -> Text.builder()
|
||||||
|
.elementType(element.getType())
|
||||||
|
.boundingBox(Converter.toRectangle2D(element.getBBox()))
|
||||||
|
.text(element.getTextString())
|
||||||
|
.font(element.getGState().getFont().getType())
|
||||||
|
.fontsize(element.getGState().getFontSize())
|
||||||
|
.build();
|
||||||
|
case Element.e_image, Element.e_inline_image -> Image.builder()
|
||||||
|
.elementType(element.getType())
|
||||||
|
.boundingBox(Converter.toRectangle2D(element.getBBox()))
|
||||||
|
.dataSize(element.getImageDataSize())
|
||||||
|
.height(element.getImageHeight())
|
||||||
|
.width(element.getImageWidth())
|
||||||
|
.renderingIntent(element.getImageRenderingIntent())
|
||||||
|
.componentNum(element.getComponentNum())
|
||||||
|
.bitsPerComponent(element.getBitsPerComponent())
|
||||||
|
.build();
|
||||||
|
// This technically should never happen, it's a safetynet
|
||||||
|
default -> throw new RuntimeException("Feature Extraction is not supported for PDFTron.Element with type: " + element.getType());
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean almostMatches(Element element) throws PDFNetException {
|
public boolean almostMatches(Element element) throws PDFNetException {
|
||||||
|
|
||||||
@ -160,41 +197,6 @@ public class ElementFeatures {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static ElementFeatures extractFeatures(Element element) throws PDFNetException {
|
|
||||||
|
|
||||||
return switch (element.getType()) {
|
|
||||||
case Element.e_path -> Path.builder()
|
|
||||||
.elementType(element.getType())
|
|
||||||
.boundingBox(Converter.toRectangle2D(element.getBBox()))
|
|
||||||
.isClippingPath(element.isClippingPath())
|
|
||||||
.isClipWindingFill(element.isClipWindingFill())
|
|
||||||
.isStroked(element.isStroked())
|
|
||||||
.isFilled(element.isFilled())
|
|
||||||
.isWindingFill(element.isWindingFill())
|
|
||||||
.fillColor(Converter.convertColor(element.getGState().getFillColorSpace(), element.getGState().getFillColor()))
|
|
||||||
.strokeColor(Converter.convertColor(element.getGState().getStrokeColorSpace(), element.getGState().getStrokeColor()))
|
|
||||||
.linePath(Converter.convertToGeneralPath(element.getPathData()))
|
|
||||||
.build();
|
|
||||||
case Element.e_text -> Text.builder()
|
|
||||||
.elementType(element.getType())
|
|
||||||
.boundingBox(Converter.toRectangle2D(element.getBBox()))
|
|
||||||
.text(element.getTextString())
|
|
||||||
.font(element.getGState().getFont().getType())
|
|
||||||
.fontsize(element.getGState().getFontSize())
|
|
||||||
.build();
|
|
||||||
case Element.e_image, Element.e_inline_image -> Image.builder()
|
|
||||||
.elementType(element.getType())
|
|
||||||
.boundingBox(Converter.toRectangle2D(element.getBBox()))
|
|
||||||
.dataSize(element.getImageDataSize())
|
|
||||||
.height(element.getImageHeight())
|
|
||||||
.width(element.getImageWidth())
|
|
||||||
.renderingIntent(element.getImageRenderingIntent())
|
|
||||||
.componentNum(element.getComponentNum())
|
|
||||||
.bitsPerComponent(element.getBitsPerComponent())
|
|
||||||
.build();
|
|
||||||
// This technically should never happen, it's a safetynet
|
|
||||||
default -> throw new RuntimeException("Feature Extraction is not supported for PDFTron.Element with type: " + element.getType());
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package com.iqser.red.pdftronlogic.commons;
|
|||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Shape;
|
import java.awt.Shape;
|
||||||
import java.awt.geom.AffineTransform;
|
|
||||||
import java.awt.geom.GeneralPath;
|
import java.awt.geom.GeneralPath;
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -12,7 +11,6 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
import com.pdftron.common.Matrix2D;
|
|
||||||
import com.pdftron.common.PDFNetException;
|
import com.pdftron.common.PDFNetException;
|
||||||
import com.pdftron.pdf.ColorPt;
|
import com.pdftron.pdf.ColorPt;
|
||||||
import com.pdftron.pdf.ColorSpace;
|
import com.pdftron.pdf.ColorSpace;
|
||||||
@ -256,12 +254,7 @@ public class InvisibleElementRemovalService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GeneralPath linePath = Converter.convertToGeneralPath(pathData);
|
GeneralPath linePath = Converter.convertToGeneralPathAndTransformToInitialUserSpace(pathData, pathElement.getCTM());
|
||||||
|
|
||||||
//transform path to initial user space
|
|
||||||
var ctm = pathElement.getCTM();
|
|
||||||
var affineTransform = toAffineTransform(ctm);
|
|
||||||
linePath.transform(affineTransform);
|
|
||||||
|
|
||||||
var rect = linePath.getBounds2D();
|
var rect = linePath.getBounds2D();
|
||||||
|
|
||||||
@ -457,10 +450,7 @@ public class InvisibleElementRemovalService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static AffineTransform toAffineTransform(Matrix2D ctm) throws PDFNetException {
|
|
||||||
|
|
||||||
return new AffineTransform(ctm.getA(), ctm.getB(), ctm.getC(), ctm.getD(), ctm.getH(), ctm.getV());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user