Example usage for com.lowagie.text.pdf BaseFont BBOXURY

List of usage examples for com.lowagie.text.pdf BaseFont BBOXURY

Introduction

In this page you can find the example usage for com.lowagie.text.pdf BaseFont BBOXURY.

Prototype

int BBOXURY

To view the source code for com.lowagie.text.pdf BaseFont BBOXURY.

Click Source Link

Document

The upper right y glyph coordinate.

Usage

From source file:org.eclipse.birt.report.engine.layout.pdf.font.FontInfo.java

License:Open Source License

protected void setupFontSize() {

    if (bf == null) {
        lineWidth = 1;//from  w  ww .j  a  v a2s .  c om
        fontHeight = fontSize;
        baselinePosition = fontSize;
        underlinePosition = fontSize;
        linethroughPosition = fontSize / 2;
        overlinePosition = 0;
        return;
    }

    float ascent = bf.getFontDescriptor(BaseFont.AWT_ASCENT, fontSize);
    float descent = bf.getFontDescriptor(BaseFont.AWT_DESCENT, fontSize);
    if (BaseFont.FONT_TYPE_T1 == bf.getFontType()) {
        // uses the FontBBox for Type1 font, refer to the implementation
        // of free type API
        ascent = bf.getFontDescriptor(BaseFont.BBOXURY, fontSize);
        descent = bf.getFontDescriptor(BaseFont.BBOXLLY, fontSize);
    }
    if (descent > 0) {
        // In some cases, the Type1 font (perhaps loading from PFM?) return
        // positive descent
        descent = -descent;
    }
    float baseline = bf.getFontDescriptor(BaseFont.UNDERLINE_POSITION, fontSize);
    float baseline_thickness = bf.getFontDescriptor(BaseFont.UNDERLINE_THICKNESS, fontSize);
    float strike = bf.getFontDescriptor(BaseFont.STRIKETHROUGH_POSITION, fontSize);
    float strike_thickness = bf.getFontDescriptor(BaseFont.STRIKETHROUGH_THICKNESS, fontSize);

    lineWidth = baseline_thickness;
    if (lineWidth == 0) {
        lineWidth = strike_thickness;
        if (lineWidth == 0) {
            lineWidth = fontSize / 20;
        }
    }
    fontHeight = ascent - descent;
    //TODO: the -lineWidth/2 should be move to the draw function
    baselinePosition = ascent - lineWidth / 2;
    underlinePosition = ascent - baseline - lineWidth / 2;
    if (strike == 0) {
        linethroughPosition = fontHeight / 2 - lineWidth / 2;
    } else {
        linethroughPosition = ascent - strike - lineWidth / 2;
    }
    //TODO: overline is not same with the HTML, we need change it in future.
    overlinePosition = 0;
}

From source file:org.pentaho.reporting.engine.classic.core.modules.output.pageable.pdf.internal.PdfLogicalPageDrawable.java

License:Open Source License

protected void drawText(final RenderableText renderableText, final long contentX2) {
    if (renderableText.getLength() == 0) {
        return;/* w ww.  jav a  2s .c  o  m*/
    }

    final long posX = renderableText.getX();
    final long posY = renderableText.getY();
    final float x1 = (float) (StrictGeomUtility.toExternalValue(posX));

    final PdfContentByte cb;
    PdfTextSpec textSpec = (PdfTextSpec) getTextSpec();
    if (textSpec == null) {
        final StyleSheet layoutContext = renderableText.getStyleSheet();

        // The code below may be weird, but at least it is predictable weird.
        final String fontName = getMetaData()
                .getNormalizedFontFamilyName((String) layoutContext.getStyleProperty(TextStyleKeys.FONT));
        final String encoding = (String) layoutContext.getStyleProperty(TextStyleKeys.FONTENCODING);
        final float fontSize = (float) layoutContext.getDoubleStyleProperty(TextStyleKeys.FONTSIZE, 10);

        final boolean embed = globalEmbed || layoutContext.getBooleanStyleProperty(TextStyleKeys.EMBEDDED_FONT);
        final boolean bold = layoutContext.getBooleanStyleProperty(TextStyleKeys.BOLD);
        final boolean italics = layoutContext.getBooleanStyleProperty(TextStyleKeys.ITALIC);

        final BaseFontFontMetrics fontMetrics = getMetaData().getBaseFontFontMetrics(fontName, fontSize, bold,
                italics, encoding, embed, false);

        final PdfGraphics2D g2 = (PdfGraphics2D) getGraphics();
        final Color cssColor = (Color) layoutContext.getStyleProperty(ElementStyleKeys.PAINT);
        g2.setPaint(cssColor);
        g2.setFillPaint();
        g2.setStrokePaint();
        // final float translateY = (float) affineTransform.getTranslateY();

        cb = g2.getRawContentByte();

        textSpec = new PdfTextSpec(layoutContext, getMetaData(), g2, fontMetrics, cb);
        setTextSpec(textSpec);

        cb.beginText();
        cb.setFontAndSize(fontMetrics.getBaseFont(), fontSize);
    } else {
        cb = textSpec.getContentByte();
    }

    final BaseFontFontMetrics baseFontRecord = textSpec.getFontMetrics();
    final BaseFont baseFont = baseFontRecord.getBaseFont();
    final float ascent;
    if (legacyLineHeightCalc) {
        final float awtAscent = baseFont.getFontDescriptor(BaseFont.AWT_ASCENT, textSpec.getFontSize());
        final float awtLeading = baseFont.getFontDescriptor(BaseFont.AWT_LEADING, textSpec.getFontSize());
        ascent = awtAscent + awtLeading;
    } else {
        ascent = baseFont.getFontDescriptor(BaseFont.BBOXURY, textSpec.getFontSize());
    }
    final float y2 = (float) (StrictGeomUtility.toExternalValue(posY) + ascent);
    final float y = globalHeight - y2;

    final AffineTransform affineTransform = textSpec.getGraphics().getTransform();
    final float translateX = (float) affineTransform.getTranslateX();

    final FontNativeContext nativeContext = baseFontRecord.getNativeContext();
    if (baseFontRecord.isTrueTypeFont() && textSpec.isBold() && nativeContext.isNativeBold() == false) {
        final float strokeWidth = textSpec.getFontSize() / 30.0f; // right from iText ...
        if (strokeWidth == 1) {
            cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL);
        } else {
            cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE);
            cb.setLineWidth(strokeWidth);
        }
    } else {
        cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL);
    }

    // if the font does not declare to be italics already, emulate it ..
    if (baseFontRecord.isTrueTypeFont() && textSpec.isItalics() && nativeContext.isNativeItalics() == false) {
        final float italicAngle = baseFont.getFontDescriptor(BaseFont.ITALICANGLE, textSpec.getFontSize());
        if (italicAngle == 0) {
            // italics requested, but the font itself does not supply italics gylphs.
            cb.setTextMatrix(1, 0, PdfLogicalPageDrawable.ITALIC_ANGLE, 1, x1 + translateX, y);
        } else {
            cb.setTextMatrix(x1 + translateX, y);
        }
    } else {
        cb.setTextMatrix(x1 + translateX, y);
    }

    final OutputProcessorMetaData metaData = getMetaData();
    final GlyphList gs = renderableText.getGlyphs();
    final int offset = renderableText.getOffset();

    final CodePointBuffer codePointBuffer = getCodePointBuffer();
    if (metaData.isFeatureSupported(OutputProcessorFeature.FAST_FONTRENDERING)
            && isNormalTextSpacing(renderableText)) {
        final int maxLength = renderableText.computeMaximumTextSize(contentX2);
        final String text = gs.getText(renderableText.getOffset(), maxLength, codePointBuffer);

        cb.showText(text);
    } else {
        final PdfTextArray textArray = new PdfTextArray();
        final StringBuilder buffer = new StringBuilder(gs.getSize());
        final int maxPos = offset + renderableText.computeMaximumTextSize(contentX2);

        for (int i = offset; i < maxPos; i++) {
            final Glyph g = gs.getGlyph(i);
            final Spacing spacing = g.getSpacing();
            if (i != offset) {
                final float optimum = (float) StrictGeomUtility.toFontMetricsValue(spacing.getMinimum());
                if (optimum != 0) {
                    textArray.add(buffer.toString());
                    textArray.add(-optimum / textSpec.getFontSize());
                    buffer.setLength(0);
                }
            }

            final String text = gs.getGlyphAsString(i, codePointBuffer);
            buffer.append(text);
        }
        if (buffer.length() > 0) {
            textArray.add(buffer.toString());
        }
        cb.showText(textArray);
    }
}

From source file:org.pentaho.reporting.libraries.fonts.itext.BaseFontFontMetrics.java

License:Open Source License

public BaseFontFontMetrics(final FontNativeContext record, final BaseFont baseFont, final float size) {
    if (baseFont == null) {
        throw new NullPointerException("BaseFont is invalid.");
    }//www . j a v a2 s .c  o m

    this.record = record;
    this.baseFont = baseFont;
    this.size = size;
    this.cpBuffer = new char[4];
    this.cachedWidths = new long[256 - 32];
    Arrays.fill(cachedWidths, -1);

    sizeScaled = FontStrictGeomUtility.toInternalValue(size);

    this.ascent = (long) baseFont.getFontDescriptor(BaseFont.AWT_ASCENT, sizeScaled);
    this.descent = (long) -baseFont.getFontDescriptor(BaseFont.AWT_DESCENT, sizeScaled);
    this.leading = (long) baseFont.getFontDescriptor(BaseFont.AWT_LEADING, sizeScaled);
    italicsAngle = FontStrictGeomUtility
            .toInternalValue(baseFont.getFontDescriptor(BaseFont.ITALICANGLE, size));
    maxAscent = (long) baseFont.getFontDescriptor(BaseFont.BBOXURY, sizeScaled);
    maxDescent = (long) -baseFont.getFontDescriptor(BaseFont.BBOXLLY, sizeScaled);
    maxCharAdvance = (long) baseFont.getFontDescriptor(BaseFont.AWT_MAXADVANCE, sizeScaled);

    final int[] charBBox = this.baseFont.getCharBBox('x');
    if (charBBox != null) {
        this.xHeight = (long) (charBBox[3] * size);
    }
    if (this.xHeight == 0) {
        this.xHeight = getAscent() / 2;
    }
    this.trueTypeFont = baseFont.getFontType() == BaseFont.FONT_TYPE_TT
            || baseFont.getFontType() == BaseFont.FONT_TYPE_TTUNI;
}

From source file:org.xhtmlrenderer.pdf.ITextTextRenderer.java

License:Open Source License

public FSFontMetrics getFSFontMetrics(FontContext context, FSFont font, String string) {
    FontDescription descr = ((ITextFSFont) font).getFontDescription();
    BaseFont bf = descr.getFont();/*from   w  ww. j a va2  s. c  o m*/
    float size = font.getSize2D();
    ITextFSFontMetrics result = new ITextFSFontMetrics();
    result.setAscent(bf.getFontDescriptor(BaseFont.BBOXURY, size));
    result.setDescent(-bf.getFontDescriptor(BaseFont.BBOXLLY, size));

    result.setStrikethroughOffset(-descr.getYStrikeoutPosition() / 1000f * size);
    if (descr.getYStrikeoutSize() != 0) {
        result.setStrikethroughThickness(descr.getYStrikeoutSize() / 1000f * size);
    } else {
        result.setStrikethroughThickness(size / 12.0f);
    }

    result.setUnderlineOffset(-descr.getUnderlinePosition() / 1000f * size);
    result.setUnderlineThickness(descr.getUnderlineThickness() / 1000f * size);

    return result;
}