org.apache.pdfbox.pdmodel.font.FontInfo Maven / Gradle / Ivy
/*
* 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.
*/
package org.apache.pdfbox.pdmodel.font;
import org.apache.fontbox.FontBoxFont;
/**
* Information about a font on the system.
*
* @author John Hewson
*/
public abstract class FontInfo
{
/**
* Returns the PostScript name of the font.
*/
public abstract String getPostScriptName();
/**
* Returns the font's format.
*/
public abstract FontFormat getFormat();
/**
* Returns the CIDSystemInfo associated with the font, if any.
*/
public abstract CIDSystemInfo getCIDSystemInfo();
/**
* Returns a new FontBox font instance for the font. Implementors of this method must not
* cache the return value of this method unless doing so via the current {@link FontCache}.
*/
public abstract FontBoxFont getFont();
/**
* Returns the sFamilyClass field of the "OS/2" table, or -1.
*/
public abstract int getFamilyClass();
/**
* Returns the usWeightClass field of the "OS/2" table, or -1.
*/
public abstract int getWeightClass();
/**
* Returns the usWeightClass field as a Panose Weight.
*/
final int getWeightClassAsPanose()
{
int usWeightClass = getWeightClass();
switch (usWeightClass)
{
case -1: return 0;
case 0: return 0;
case 100: return 2;
case 200: return 3;
case 300: return 4;
case 400: return 5;
case 500: return 6;
case 600: return 7;
case 700: return 8;
case 800: return 9;
case 900: return 10;
default: return 0;
}
}
/**
* Returns the ulCodePageRange1 field of the "OS/2" table, or 0.
*/
public abstract int getCodePageRange1();
/**
* Returns the ulCodePageRange2 field of the "OS/2" table, or 0.
*/
public abstract int getCodePageRange2();
/**
* Returns the ulCodePageRange1 and ulCodePageRange1 field of the "OS/2" table, or 0.
*/
final long getCodePageRange()
{
long range1 = getCodePageRange1() & 0x00000000ffffffffL;
long range2 = getCodePageRange2() & 0x00000000ffffffffL;
return range2 << 32 | range1;
}
/**
* Returns the macStyle field of the "head" table, or -1.
*/
public abstract int getMacStyle();
/**
* Returns the Panose classification of the font, if any.
*/
public abstract PDPanoseClassification getPanose();
// todo: 'post' table for Italic. Also: OS/2 fsSelection for italic/bold.
// todo: ulUnicodeRange too?
@Override
public String toString()
{
return getPostScriptName() + " (" + getFormat() +
", mac: 0x" + Integer.toHexString(getMacStyle()) +
", os/2: 0x" + Integer.toHexString(getFamilyClass()) +
", cid: " + getCIDSystemInfo() + ")";
}
}