123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed 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$ */
-
- package org.apache.fop.pdf;
-
- import org.apache.fop.fonts.FontType;
-
- /**
- * Class representing a /Font object.
- * <p>
- * A more complete object expressing the base font name and encoding of a
- * font along with an internal name for the font used within
- * streams of content.
- * <p>
- * Fonts are specified on page 198 and onwards of the PDF 1.3 spec.
- */
- public class PDFFont extends PDFObject {
-
- /**
- * the internal name for the font (eg "F1")
- */
- protected String fontname;
-
- /**
- * the font's subtype
- * (as defined by the constants FontType: TYPE0, TYPE1, MMTYPE1, TYPE3, TRUETYPE)
- */
- protected FontType subtype;
-
- /**
- * the base font name (eg "Helvetica")
- */
- protected String basefont;
-
- /**
- * the character encoding scheme used by the font.
- * It can be a String for standard encodings, or
- * a PDFEncoding for a more complex scheme, or
- * a PDFStream containing a CMap in a Type0 font.
- * If <code>null</code> then not written out in the PDF.
- */
- protected Object encoding;
-
- /**
- * the Unicode mapping mechanism
- */
- // protected PDFToUnicode mapping;
-
- /**
- * create the /Font object
- *
- * @param fontname the internal name for the font
- * @param subtype the font's subtype
- * @param basefont the base font name
- * @param encoding the character encoding schema used by the font
- */
- public PDFFont(String fontname, FontType subtype,
- String basefont,
- Object encoding /* , PDFToUnicode mapping */) {
-
- /* generic creation of PDF object */
- super();
-
- /* set fields using paramaters */
- this.fontname = fontname;
- this.subtype = subtype;
- this.basefont = basefont;
- this.encoding = encoding;
- // this.mapping = mapping;
- }
-
- /**
- * factory method with the basic parameters
- *
- * @param fontname the internal name for the font
- * @param subtype the font's subtype
- * @param basefont the base font name
- * @param encoding the character encoding schema used by the font
- * @return the generated PDFFont object
- */
- public static PDFFont createFont(String fontname,
- FontType subtype, String basefont,
- Object encoding) {
- if (subtype == FontType.TYPE0) {
- return new PDFFontType0(fontname, basefont,
- encoding);
- } else if ((subtype == FontType.TYPE1)
- || (subtype == FontType.MMTYPE1)) {
- return new PDFFontType1(fontname, basefont,
- encoding);
- } else if (subtype == FontType.TYPE3) {
- //return new PDFFontType3(number, fontname, basefont, encoding);
- return null; //NYI
- } else if (subtype == FontType.TRUETYPE) {
- return new PDFFontTrueType(fontname, basefont,
- encoding);
- } else {
- return null; // should not happend
- }
- }
-
- /**
- * factory method with the extended parameters
- * for Type1, MMType1 and TrueType
- *
- * @param fontname the internal name for the font
- * @param subtype the font's subtype
- * @param basefont the base font name
- * @param encoding the character encoding schema used by the font
- * @param firstChar the first character code in the font
- * @param lastChar the last character code in the font
- * @param widths an array of size (lastChar - firstChar +1)
- * @param descriptor the descriptor for other font's metrics
- * @return the generated PDFFont object
- */
- public static PDFFont createFont(String fontname,
- FontType subtype, String basefont,
- Object encoding, int firstChar,
- int lastChar, PDFArray widths,
- PDFFontDescriptor descriptor) {
-
- PDFFontNonBase14 font;
- if (subtype == FontType.TYPE0) {
- font = new PDFFontType0(fontname, basefont,
- encoding);
- font.setDescriptor(descriptor);
- return font;
- } else if ((subtype == FontType.TYPE1)
- || (subtype == FontType.MMTYPE1)) {
- font = new PDFFontType1(fontname, basefont,
- encoding);
- font.setWidthMetrics(firstChar, lastChar, widths);
- font.setDescriptor(descriptor);
- return font;
- } else if (subtype == FontType.TYPE3) {
- return null; //NYI, should not happend
- } else if (subtype == FontType.TRUETYPE) {
- font = new PDFFontTrueType(fontname, basefont,
- encoding);
- font.setWidthMetrics(firstChar, lastChar, widths);
- font.setDescriptor(descriptor);
- return font;
- } else {
- return null; // should not happend
- }
- }
-
- /**
- * get the internal name used for this font
- * @return the internal name
- */
- public String getName() {
- return this.fontname;
- }
-
- /**
- * Returns the PDF name for a certain font type.
- * @param fontType font type
- * @return String corresponding PDF name
- */
- protected String getPDFNameForFontType(FontType fontType) {
- if (fontType == FontType.TYPE0) {
- return fontType.getName();
- } else if (fontType == FontType.TYPE1) {
- return fontType.getName();
- } else if (fontType == FontType.MMTYPE1) {
- return fontType.getName();
- } else if (fontType == FontType.TYPE3) {
- return fontType.getName();
- } else if (fontType == FontType.TRUETYPE) {
- return fontType.getName();
- } else {
- throw new IllegalArgumentException("Unsupported font type: " + fontType.getName());
- }
- }
-
- /**
- * @see org.apache.fop.pdf.PDFObject#toPDFString()
- */
- public String toPDFString() {
- StringBuffer p = new StringBuffer(128);
- p.append(getObjectID());
- p.append("<< /Type /Font\n/Subtype /"
- + getPDFNameForFontType(this.subtype)
- + "\n/Name /" + this.fontname
- + "\n/BaseFont /" + this.basefont);
- if (encoding != null) {
- p.append("\n/Encoding ");
- if (encoding instanceof PDFEncoding) {
- p.append(((PDFEncoding)this.encoding).referencePDF());
- } else if (encoding instanceof PDFStream) {
- p.append(((PDFStream)this.encoding).referencePDF());
- } else {
- p.append("/").append((String)encoding);
- }
- }
- fillInPDF(p);
- p.append(" >>\nendobj\n");
- return p.toString();
- }
-
- /**
- * This method is called to receive the specifics for the font's subtype.
- * <p>
- * The given buffer already contains the fields common to all font types.
- *
- * @param target the buffer to be completed with the type specific fields
- */
- protected void fillInPDF(StringBuffer target) {
- //nop
- }
-
- }
|