123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- /*
- * 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$ */
-
- package org.apache.fop.pdf;
-
- import org.apache.fop.fonts.FontType;
-
- /**
- * 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
- *
- * @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.
- * @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
- *
- * @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);
- }
- }
-
- /** @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)
- * @param cidSet the CIDSet stream
- */
- public void setCIDSet(AbstractPDFStream cidSet) {
- put("CIDSet", cidSet);
- }
-
- /** @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
- }*/
-
- }
|