Search in sources :

Example 1 with Encoding

use of org.apache.pdfbox.pdmodel.font.encoding.Encoding in project pdfbox by apache.

the class PDSimpleFont method readEncoding.

/**
 * Reads the Encoding from the Font dictionary or the embedded or substituted font file.
 * Must be called at the end of any subclass constructors.
 *
 * @throws IOException if the font file could not be read
 */
protected void readEncoding() throws IOException {
    COSBase encoding = dict.getDictionaryObject(COSName.ENCODING);
    if (encoding != null) {
        if (encoding instanceof COSName) {
            COSName encodingName = (COSName) encoding;
            this.encoding = Encoding.getInstance(encodingName);
            if (this.encoding == null) {
                LOG.warn("Unknown encoding: " + encodingName.getName());
                // fallback
                this.encoding = readEncodingFromFont();
            }
        } else if (encoding instanceof COSDictionary) {
            COSDictionary encodingDict = (COSDictionary) encoding;
            Encoding builtIn = null;
            Boolean symbolic = getSymbolicFlag();
            boolean isFlaggedAsSymbolic = symbolic != null && symbolic;
            COSName baseEncoding = encodingDict.getCOSName(COSName.BASE_ENCODING);
            boolean hasValidBaseEncoding = baseEncoding != null && Encoding.getInstance(baseEncoding) != null;
            if (!hasValidBaseEncoding && isFlaggedAsSymbolic) {
                builtIn = readEncodingFromFont();
            }
            if (symbolic == null) {
                symbolic = false;
            }
            this.encoding = new DictionaryEncoding(encodingDict, !symbolic, builtIn);
        }
    } else {
        this.encoding = readEncodingFromFont();
    }
    // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol"
    String standard14Name = Standard14Fonts.getMappedFontName(getName());
    // assign the glyph list based on the font
    if ("ZapfDingbats".equals(standard14Name)) {
        glyphList = GlyphList.getZapfDingbats();
    } else {
        // StandardEncoding and Symbol are in the AGL
        glyphList = GlyphList.getAdobeGlyphList();
    }
}
Also used : DictionaryEncoding(org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding) COSName(org.apache.pdfbox.cos.COSName) COSDictionary(org.apache.pdfbox.cos.COSDictionary) COSBase(org.apache.pdfbox.cos.COSBase) MacRomanEncoding(org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding) DictionaryEncoding(org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding) WinAnsiEncoding(org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding) Encoding(org.apache.pdfbox.pdmodel.font.encoding.Encoding) StandardEncoding(org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding)

Example 2 with Encoding

use of org.apache.pdfbox.pdmodel.font.encoding.Encoding in project pdfbox by apache.

the class TrueTypeFontValidator method checkEncoding.

@Override
protected void checkEncoding() {
    PDTrueTypeFont ttFont = (PDTrueTypeFont) font;
    PDFontDescriptor fd = ttFont.getFontDescriptor();
    if (fd != null) {
        /*
             * only MacRomanEncoding or WinAnsiEncoding are allowed for a non symbolic font.
             */
        if (fd.isNonSymbolic()) {
            Encoding encodingValue = ttFont.getEncoding();
            if (!(encodingValue instanceof MacRomanEncoding || encodingValue instanceof WinAnsiEncoding)) {
                this.fontContainer.push(new ValidationError(ERROR_FONTS_ENCODING, fd.getFontName() + ": The Encoding is invalid for the NonSymbolic TTF"));
            }
        }
        /*
             * For symbolic font, no encoding entry is allowed and only one encoding entry is expected into the FontFile
             * CMap (Check latter when the FontFile stream will be checked)
             */
        if (fd.isSymbolic() && fontDictionary.getItem(COSName.ENCODING) != null) {
            this.fontContainer.push(new ValidationError(ERROR_FONTS_ENCODING, fd.getFontName() + ": The Encoding should be missing for the Symbolic TTF"));
        }
    }
}
Also used : PDTrueTypeFont(org.apache.pdfbox.pdmodel.font.PDTrueTypeFont) Encoding(org.apache.pdfbox.pdmodel.font.encoding.Encoding) MacRomanEncoding(org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding) WinAnsiEncoding(org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding) MacRomanEncoding(org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding) ValidationError(org.apache.pdfbox.preflight.ValidationResult.ValidationError) WinAnsiEncoding(org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding) PDFontDescriptor(org.apache.pdfbox.pdmodel.font.PDFontDescriptor)

Aggregations

Encoding (org.apache.pdfbox.pdmodel.font.encoding.Encoding)2 MacRomanEncoding (org.apache.pdfbox.pdmodel.font.encoding.MacRomanEncoding)2 WinAnsiEncoding (org.apache.pdfbox.pdmodel.font.encoding.WinAnsiEncoding)2 COSBase (org.apache.pdfbox.cos.COSBase)1 COSDictionary (org.apache.pdfbox.cos.COSDictionary)1 COSName (org.apache.pdfbox.cos.COSName)1 PDFontDescriptor (org.apache.pdfbox.pdmodel.font.PDFontDescriptor)1 PDTrueTypeFont (org.apache.pdfbox.pdmodel.font.PDTrueTypeFont)1 DictionaryEncoding (org.apache.pdfbox.pdmodel.font.encoding.DictionaryEncoding)1 StandardEncoding (org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding)1 ValidationError (org.apache.pdfbox.preflight.ValidationResult.ValidationError)1