use of com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode in project PdfBox-Android by TomRoush.
the class PageDrawer method showType3Glyph.
@Override
protected void showType3Glyph(Matrix textRenderingMatrix, PDType3Font font, int code, String unicode, Vector displacement) throws IOException {
PDGraphicsState state = getGraphicsState();
RenderingMode renderingMode = state.getTextState().getRenderingMode();
if (!RenderingMode.NEITHER.equals(renderingMode)) {
super.showType3Glyph(textRenderingMatrix, font, code, unicode, displacement);
}
}
use of com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode in project PdfBox-Android by TomRoush.
the class PageDrawer method endTextClip.
/**
* End buffering the text clipping path, if any.
*/
private void endTextClip() {
PDGraphicsState state = getGraphicsState();
RenderingMode renderingMode = state.getTextState().getRenderingMode();
// apply the buffered clip as one area
if (renderingMode.isClip() && !textClippings.isEmpty()) {
// PDFBOX-4150: this is much faster than using textClippingArea.add(new Area(glyph))
// https://stackoverflow.com/questions/21519007/fast-union-of-shapes-in-java
Path path = new Path();
for (Path shape : textClippings) {
path.addPath(shape);
}
state.intersectClippingPath(path);
textClippings = new ArrayList<Path>();
// PDFBOX-3681: lastClip needs to be reset, because after intersection it is still the same
// object, thus setClip() would believe that it is cached.
lastClip = null;
}
}
use of com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode in project PdfBox-Android by TomRoush.
the class PageDrawer method drawGlyph2D.
/**
* Render the font using the Glyph2D interface.
*
* @param glyph2D the Glyph2D implementation provided a Path for each glyph
* @param font the font
* @param code character code
* @param displacement the glyph's displacement (advance)
* @param at the transformation
* @throws IOException if something went wrong
*/
private void drawGlyph2D(Glyph2D glyph2D, PDFont font, int code, Vector displacement, AffineTransform at) throws IOException {
PDGraphicsState state = getGraphicsState();
RenderingMode renderingMode = state.getTextState().getRenderingMode();
Path path = glyph2D.getPathForCharacterCode(code);
if (path != null) {
// TODO: How should vertical fonts be handled?
if (!font.isEmbedded() && !font.isVertical() && !font.isStandard14() && font.hasExplicitWidth(code)) {
float fontWidth = font.getWidthFromFont(code);
if (// ignore spaces
fontWidth > 0 && Math.abs(fontWidth - displacement.getX() * 1000) > 0.0001) {
float pdfWidth = displacement.getX() * 1000;
at.scale(pdfWidth / fontWidth, 1);
}
}
// render glyph
// Shape glyph = at.createTransformedShape(path);
path.transform(at.toMatrix());
if (renderingMode.isFill()) {
// graphics.setComposite(state.getNonStrokingJavaComposite());
// graphics.setPaint(getNonStrokingPaint());
paint.setColor(getNonStrokingColor());
setClip();
if (isContentRendered()) {
paint.setStyle(Paint.Style.FILL);
canvas.drawPath(path, paint);
}
}
if (renderingMode.isStroke()) {
// graphics.setComposite(state.getStrokingJavaComposite());
// graphics.setPaint(getStrokingPaint());
paint.setColor(getStrokingColor());
// graphics.setStroke(getStroke());
setClip();
if (isContentRendered()) {
paint.setStyle(Paint.Style.STROKE);
canvas.drawPath(path, paint);
}
}
if (renderingMode.isClip()) {
// textClippings.add(glyph); TODO: PdfBox-Android
}
}
}
use of com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode in project PdfBox-Android by TomRoush.
the class SetTextRenderingMode method process.
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException {
if (arguments.isEmpty()) {
throw new MissingOperandException(operator, arguments);
}
COSBase base0 = arguments.get(0);
if (!(base0 instanceof COSNumber)) {
return;
}
COSNumber mode = (COSNumber) base0;
int val = mode.intValue();
if (val < 0 || val >= RenderingMode.values().length) {
return;
}
RenderingMode renderingMode = RenderingMode.fromInt(val);
context.getGraphicsState().getTextState().setRenderingMode(renderingMode);
}
Aggregations