Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,29 +56,29 @@ private FontFactory() {
// Disable default constructor
}

public static PDFont parseFont(org.verapdf.pd.font.PDFont rawFont, RenderingMode renderingMode,
public static PDFont parseFont(org.verapdf.pd.font.PDFont rawFont, String fontResourceName, RenderingMode renderingMode,
PDResourcesHandler resources, GraphicState inheritedGraphicState) {
if (rawFont == null) {
return new GFPDEmptyFont();
}
if (TYPE_3.equals(rawFont.getSubtype().getValue())) {
PDResources fontResources = ((PDType3Font) rawFont).getResources();
PDResourcesHandler pdResources = resources.getExtendedResources(fontResources);
return new GFPDType3Font((PDType3Font) rawFont, renderingMode, pdResources, inheritedGraphicState);
return new GFPDType3Font((PDType3Font) rawFont, renderingMode, pdResources, inheritedGraphicState, fontResourceName);
}
String id = GFIDGenerator.generateID(rawFont, renderingMode);
PDFont res = StaticContainers.getCachedFonts().get(id);
if (res == null) {
switch (rawFont.getSubtype().getValue()) {
case TYPE_0:
res = new GFPDType0Font((PDType0Font) rawFont, renderingMode);
res = new GFPDType0Font((PDType0Font) rawFont, renderingMode, fontResourceName);
break;
case TYPE_1:
case MM_TYPE_1:
res = new GFPDType1Font((PDType1Font) rawFont, renderingMode);
res = new GFPDType1Font((PDType1Font) rawFont, renderingMode, fontResourceName);
break;
case TRUE_TYPE:
res = new GFPDTrueTypeFont((PDTrueTypeFont) rawFont, renderingMode);
res = new GFPDTrueTypeFont((PDTrueTypeFont) rawFont, renderingMode, fontResourceName);
break;
}
StaticContainers.getCachedFonts().put(id, res);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public class GraphicState implements Cloneable {
private PDColorSpace strokeLastPatternUnderlyingColorSpace = null;
private RenderingMode renderingMode = RenderingMode.FILL;
private PDFont font;
private String fontResourceName;
private boolean overprintingFlagStroke = false;
private boolean overprintingFlagNonStroke = false;
private int opm = 0;
Expand Down Expand Up @@ -101,6 +102,14 @@ public void setFont(PDFont font) {
this.font = font;
}

public String getFontResourceName() {
return fontResourceName;
}

public void setFontResourceName(String fontResourceName) {
this.fontResourceName = fontResourceName;
}

public Double getScaleFactor() {
return scaleFactor;
}
Expand Down Expand Up @@ -157,6 +166,7 @@ public void copyProperties(GraphicState graphicState) {
this.strokeLastPatternUnderlyingColorSpace = graphicState.getStrokeLastPatternUnderlyingColorSpace();
this.renderingMode = graphicState.getRenderingMode();
this.font = graphicState.getFont();
this.fontResourceName = graphicState.getFontResourceName();
this.overprintingFlagStroke = graphicState.isOverprintingFlagStroke();
this.overprintingFlagNonStroke = graphicState.isOverprintingFlagNonStroke();
this.opm = graphicState.getOpm();
Expand All @@ -170,6 +180,7 @@ public void copyPropertiesFormExtGState(PDExtGState extGState) {
if (font != null) {
this.font = font;
}
this.fontResourceName = null;
COSNumber fontSize = extGState.getCOSFontSize();
if (fontSize != null) {
this.scaleFactor = fontSize.getReal();
Expand Down Expand Up @@ -198,6 +209,7 @@ protected GraphicState clone() {
clone.strokeLastPatternUnderlyingColorSpace = this.strokeLastPatternUnderlyingColorSpace;
clone.renderingMode = this.renderingMode;
clone.font = this.font;
clone.fontResourceName = this.fontResourceName;
clone.scaleFactor = this.scaleFactor;
clone.overprintingFlagStroke = this.overprintingFlagStroke;
clone.overprintingFlagNonStroke = this.overprintingFlagNonStroke;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,11 @@ void parseOperator(List<org.verapdf.model.operator.Operator> processedOperators,
processedOperators.add(new GFOp_Tr(arguments));
break;
case Operators.TF:
this.graphicState.setFont(resourcesHandler.getFont(getFirstCOSName(arguments)));
COSName fontResourceName = getFirstCOSName(arguments);
if (fontResourceName != null) {
this.graphicState.setFontResourceName(fontResourceName.getString());
}
this.graphicState.setFont(resourcesHandler.getFont(fontResourceName));
if (arguments.size() > 1) {
COSBase scaleFactor = arguments.get(1);
if (scaleFactor.getType().isNumber()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ public abstract class GFOpTextShow extends GFOperator implements OpTextShow {
public static final String STROKE_COLOR_SPACE = "strokeCS";

private final org.verapdf.pd.font.PDFont font;
private final String fontResourceName;
private final Double scaleFactor;

private final RenderingMode renderingMode;
Expand All @@ -90,6 +91,7 @@ protected GFOpTextShow(List<COSBase> arguments, GraphicState state, PDResourcesH
boolean isRealContent, final String opType) {
super(arguments, opType);
this.font = state.getFont();
this.fontResourceName = state.getFontResourceName();
this.scaleFactor = state.getScaleFactor();
this.renderingMode = state.getRenderingMode();
this.resourcesHandler = resourcesHandler;
Expand Down Expand Up @@ -190,7 +192,7 @@ public org.verapdf.model.pdlayer.PDColorSpace getVeraModelStrokeColorSpace() {
}

private List<PDFont> parseFont() {
PDFont font = FontFactory.parseFont(this.font, renderingMode, this.resourcesHandler, this.inheritedGraphicState);
PDFont font = FontFactory.parseFont(this.font, this.fontResourceName, renderingMode, this.resourcesHandler, this.inheritedGraphicState);
if (font != null) {
List<PDFont> result = new ArrayList<>(MAX_NUMBER_OF_ELEMENTS);
result.add(font);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ public class GFPDCIDFont extends GFPDFont implements PDCIDFont {
public static final int bufferSize = 2048;
private final String externalFontID;

public GFPDCIDFont(PDFont font, RenderingMode renderingMode, String externalFontID) {
super(font, renderingMode, CID_FONT_TYPE);
public GFPDCIDFont(PDFont font, RenderingMode renderingMode, String externalFontID, String fontResourceName) {
super(font, renderingMode, fontResourceName, CID_FONT_TYPE);
this.externalFontID = externalFontID;
if (font != null) {
FontProgram program = font.getFontProgram();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
public class GFPDEmptyFont extends GFPDFont {

public GFPDEmptyFont() {
super(null, RenderingMode.NEITHER, RESOURCE_TYPE);
super(null, RenderingMode.NEITHER, null, RESOURCE_TYPE);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,13 @@ public class GFPDFont extends GFPDResource implements PDFont {

protected boolean fontProgramParsed;
protected final RenderingMode renderingMode;
private final String resourceName;

protected GFPDFont(org.verapdf.pd.font.PDFont font,
RenderingMode renderingMode, final String type) {
RenderingMode renderingMode, String resourceName, final String type) {
super(font, type);
this.renderingMode = renderingMode;
this.resourceName = resourceName;
}

/**
Expand Down Expand Up @@ -189,4 +191,9 @@ private List<CosUnicodeName> getBaseFont() {
public Encoding getEncodingMapping() {
return this.pdFont.getEncodingMapping();
}

@Override
public String getExtraContext() {
return resourceName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
public abstract class GFPDSimpleFont extends GFPDFont implements PDSimpleFont {

protected GFPDSimpleFont(org.verapdf.pd.font.PDSimpleFont font,
RenderingMode renderingMode, final String type) {
super(font, renderingMode, type);
RenderingMode renderingMode, String fontResourceName, final String type) {
super(font, renderingMode, fontResourceName, type);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ public class GFPDTrueTypeFont extends GFPDSimpleFont implements PDTrueTypeFont {
public static final String TRUETYPE_FONT_TYPE = "PDTrueTypeFont";

public GFPDTrueTypeFont(org.verapdf.pd.font.truetype.PDTrueTypeFont font,
RenderingMode renderingMode) {
super(font, renderingMode, TRUETYPE_FONT_TYPE);
RenderingMode renderingMode, String fontResourceName) {
super(font, renderingMode, fontResourceName, TRUETYPE_FONT_TYPE);
if (font != null) {
this.fontProgramParsed = font.parseFontProgram();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ public class GFPDType0Font extends GFPDFont implements PDType0Font {
private final PDCIDFont descendantFont;
private org.verapdf.pd.font.PDCIDFont cidFont;

public GFPDType0Font(org.verapdf.pd.font.PDType0Font font, RenderingMode renderingMode) {
super(font, renderingMode, TYPE_0_FONT_TYPE);
public GFPDType0Font(org.verapdf.pd.font.PDType0Font font, RenderingMode renderingMode, String fontResourceName) {
super(font, renderingMode, fontResourceName, TYPE_0_FONT_TYPE);
this.descendantFont = this.calculateDescendantFont();
((org.verapdf.pd.font.PDType0Font) this.pdFont).setFontProgramFromDescendant(this.cidFont);
this.fontProgramParsed = this.descendantFont != null
Expand Down Expand Up @@ -98,7 +98,7 @@ private PDCIDFont calculateDescendantFont() {
((org.verapdf.pd.font.PDType0Font) this.pdFont).getCMap().getCMapFile(),
this.pdFont.getFontProgram(), this.pdFont.isSuccessfullyParsed());
this.cidFont = cidFont;
return new GFPDCIDFont(cidFont, renderingMode, GFIDGenerator.generateID(this.pdFont));
return new GFPDCIDFont(cidFont, renderingMode, GFIDGenerator.generateID(this.pdFont), null);
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ public class GFPDType1Font extends GFPDSimpleFont implements PDType1Font {
public static final String NOTDEF_STRING = ".notdef";

public GFPDType1Font(org.verapdf.pd.font.type1.PDType1Font pdFont,
RenderingMode renderingMode) {
super(pdFont, renderingMode, TYPE1_FONT_TYPE);
RenderingMode renderingMode, String fontResourceName) {
super(pdFont, renderingMode, fontResourceName, TYPE1_FONT_TYPE);
if (pdFont != null) {
FontProgram program = pdFont.getFontProgram();
if (program != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ public class GFPDType3Font extends GFPDSimpleFont implements PDType3Font {

public GFPDType3Font(org.verapdf.pd.font.type3.PDType3Font font,
RenderingMode renderingMode, PDResourcesHandler resources,
GraphicState inheritedGraphicState) {
super(font, renderingMode, TYPE3_FONT_TYPE);
GraphicState inheritedGraphicState, String fontResourceName) {
super(font, renderingMode, fontResourceName, TYPE3_FONT_TYPE);
this.resources = resources;
this.inheritedGraphicState = inheritedGraphicState;
}
Expand Down
Loading