List of usage examples for com.lowagie.text.pdf BaseFont BBOXURY
int BBOXURY
To view the source code for com.lowagie.text.pdf BaseFont BBOXURY.
Click Source Link
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; }