Search in sources :

Example 1 with RenderingMode

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);
    }
}
Also used : RenderingMode(com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode) PDGraphicsState(com.tom_roush.pdfbox.pdmodel.graphics.state.PDGraphicsState)

Example 2 with RenderingMode

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;
    }
}
Also used : Path(android.graphics.Path) RenderingMode(com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode) PDGraphicsState(com.tom_roush.pdfbox.pdmodel.graphics.state.PDGraphicsState)

Example 3 with RenderingMode

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
        }
    }
}
Also used : Path(android.graphics.Path) RenderingMode(com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode) PDGraphicsState(com.tom_roush.pdfbox.pdmodel.graphics.state.PDGraphicsState)

Example 4 with RenderingMode

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);
}
Also used : RenderingMode(com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode) MissingOperandException(com.tom_roush.pdfbox.contentstream.operator.MissingOperandException) COSNumber(com.tom_roush.pdfbox.cos.COSNumber) COSBase(com.tom_roush.pdfbox.cos.COSBase)

Aggregations

RenderingMode (com.tom_roush.pdfbox.pdmodel.graphics.state.RenderingMode)4 PDGraphicsState (com.tom_roush.pdfbox.pdmodel.graphics.state.PDGraphicsState)3 Path (android.graphics.Path)2 MissingOperandException (com.tom_roush.pdfbox.contentstream.operator.MissingOperandException)1 COSBase (com.tom_roush.pdfbox.cos.COSBase)1 COSNumber (com.tom_roush.pdfbox.cos.COSNumber)1