/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* $Id: PDFFontDescriptor.java 1610947 2014-07-16 09:10:53Z ssteiner $ */

package org.apache.fop.pdf;

import org.apache.fop.fonts.FontType;

Class representing a font descriptor (/FontDescriptor object).

Font descriptors are specified on page 222 and onwards of the PDF 1.3 spec.

/** * Class representing a font descriptor (/FontDescriptor object). * <p> * Font descriptors are specified on page 222 and onwards of the PDF 1.3 spec. */
public class PDFFontDescriptor extends PDFDictionary {
Create the /FontDescriptor object
Params:
  • ascent – the maximum height above the baseline
  • descent – the maximum depth below the baseline
  • capHeight – height of the capital letters
  • flags – various characteristics of the font
  • fontBBox – the bounding box for the described font
  • basefont – the base font name
  • italicAngle – the angle of the vertical dominant strokes
  • stemV – the width of the dominant vertical stems of glyphs
/** * Create the /FontDescriptor object * * @param ascent the maximum height above the baseline * @param descent the maximum depth below the baseline * @param capHeight height of the capital letters * @param flags various characteristics of the font * @param fontBBox the bounding box for the described font * @param basefont the base font name * @param italicAngle the angle of the vertical dominant strokes * @param stemV the width of the dominant vertical stems of glyphs */
public PDFFontDescriptor(String basefont, int ascent, int descent, int capHeight, int flags, PDFRectangle fontBBox, int italicAngle, int stemV) { super(); put("Type", new PDFName("FontDescriptor")); put("FontName", new PDFName(basefont)); put("FontBBox", fontBBox); put("Flags", flags); put("CapHeight", capHeight); put("Ascent", ascent); put("Descent", descent); put("ItalicAngle", italicAngle); put("StemV", stemV); }
Set the optional metrics.
Params:
  • avgWidth – The average width of characters in this font. The default value is 0.
  • maxWidth – The maximum width of characters in this font. The default value is 0.
  • missingWidth – missing width
  • leading – the desired spacing between lines of text. The default value is 0.
  • stemH – The vertical width of the dominant horizontal stems of glyphs in the font. The default value is 0.
  • xHeight – The y-coordinate of the top of flat non-ascending lowercase letters, measured from the baseline. The default value is 0.
/** * Set the optional metrics. * @param avgWidth The average width of characters in this font. * The default value is 0. * @param maxWidth The maximum width of characters in this font. * The default value is 0. * @param missingWidth missing width * @param leading the desired spacing between lines of text. * The default value is 0. * @param stemH The vertical width of the dominant horizontal stems of * glyphs in the font. The default value is 0. * @param xHeight The y-coordinate of the top of flat non-ascending * lowercase letters, measured from the baseline. The default value is 0. */
public void setMetrics(int avgWidth, int maxWidth, int missingWidth, int leading, int stemH, int xHeight) { if (avgWidth != 0) { put("AvgWidth", avgWidth); } if (maxWidth != 0) { put("MaxWidth", maxWidth); } if (missingWidth != 0) { put("MissingWidth", missingWidth); } if (leading != 0) { put("Leading", leading); } if (stemH != 0) { put("StemH", stemH); } if (xHeight != 0) { put("XHeight", xHeight); } }
Set the optional font file stream
Params:
  • subtype – the font type defined in the font stream
  • fontfile – the stream containing an embedded font
/** * Set the optional font file stream * * @param subtype the font type defined in the font stream * @param fontfile the stream containing an embedded font */
public void setFontFile(FontType subtype, AbstractPDFStream fontfile) { if (subtype == FontType.TYPE1) { put("FontFile", fontfile); } else if (fontfile instanceof PDFCFFStreamType0C || subtype == FontType.TYPE1C) { put("FontFile3", fontfile); } else { put("FontFile2", fontfile); } }
Returns:the FontFile or null if the font is not embedded
/** @return the FontFile or null if the font is not embedded */
public AbstractPDFStream getFontFile() { AbstractPDFStream stream; stream = (AbstractPDFStream)get("FontFile"); if (stream == null) { stream = (AbstractPDFStream)get("FontFile2"); } if (stream == null) { stream = (AbstractPDFStream)get("FontFile3"); } return stream; }
Sets the CIDSet stream for this font descriptor. (Optional)
Params:
  • cidSet – the CIDSet stream
/** * Sets the CIDSet stream for this font descriptor. (Optional) * @param cidSet the CIDSet stream */
public void setCIDSet(AbstractPDFStream cidSet) { put("CIDSet", cidSet); }
Returns:the CIDSet stream or null if not applicable
/** @return the CIDSet stream or null if not applicable */
public AbstractPDFStream getCIDSet() { return (AbstractPDFStream)get("CIDSet"); } /** * {@inheritDoc} */ /* public String toPDFString() { StringBuffer p = new StringBuffer(128); p.append(getObjectID() + "<< /Type /FontDescriptor" + "\n/FontName /" + this.basefont); p.append("\n/FontBBox "); p.append(fontBBox.toPDFString()); p.append("\n/Flags "); p.append(flags); p.append("\n/CapHeight "); p.append(capHeight); p.append("\n/Ascent "); p.append(ascent); p.append("\n/Descent "); p.append(descent); p.append("\n/ItalicAngle "); p.append(italicAngle); p.append("\n/StemV "); p.append(stemV); // optional fields if (stemH != 0) { p.append("\n/StemH "); p.append(stemH); } if (xHeight != 0) { p.append("\n/XHeight "); p.append(xHeight); } if (avgWidth != 0) { p.append("\n/AvgWidth "); p.append(avgWidth); } if (maxWidth != 0) { p.append("\n/MaxWidth "); p.append(maxWidth); } if (missingWidth != 0) { p.append("\n/MissingWidth "); p.append(missingWidth); } if (leading != 0) { p.append("\n/Leading "); p.append(leading); } if (fontfile != null) { if (subtype == FontType.TYPE1) { p.append("\n/FontFile "); } else { p.append("\n/FontFile2 "); } p.append(fontfile.referencePDF()); } if (getCIDSet() != null) { p.append("\n/CIDSet "); p.append(getCIDSet().referencePDF()); } // charSet for subset fonts // not yet implemented // CID optional field fillInPDF(p); p.append(" >>\nendobj\n"); return p.toString(); }*/ /** * Fill in the specifics for the font's descriptor. * <p> * The given buffer already contains the fields common to all descriptors. * * @param begin the buffer to be completed with the specific fields *//* protected void fillInPDF(StringBuffer begin) { //nop }*/ }