Package org.apache.pdfbox.preflight.font

Source Code of org.apache.pdfbox.preflight.font.SimpleFontValidator

/*****************************************************************************
*
* 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.preflight.font;

import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_DICTIONARY_INVALID;

import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.font.PDFontLike;
import org.apache.pdfbox.preflight.PreflightContext;
import org.apache.pdfbox.preflight.ValidationResult.ValidationError;
import org.apache.pdfbox.preflight.exception.ValidationException;
import org.apache.pdfbox.preflight.font.container.FontContainer;

public abstract class SimpleFontValidator<T extends FontContainer> extends FontValidator<T>
{
    protected PDFontLike font;
    protected COSDictionary fontDictionary;

    public SimpleFontValidator(PreflightContext context, PDFontLike font, COSDictionary fontDictionary, T fContainer)
    {
        super(context, fontDictionary, fContainer);
        this.fontDictionary = fontDictionary;
        this.font = font;
    }

    /**
     * Call this method to validate the font wrapped by this object. If the
     * validation failed, the error is updated in the FontContainer with the
     * right error code.
     *
     * Errors that are saved in the container will be added on the
     * PreflightContext if the font is used later.
     */
    @Override
    public void validate() throws ValidationException
    {
        checkMandatoryField();

        createFontDescriptorHelper();
        processFontDescriptorValidation();

        checkEncoding();
        checkToUnicode();
    }

    protected void checkMandatoryField()
    {
        String missingFields = "";
        boolean areFieldsPresent = fontDictionary.containsKey(COSName.TYPE);
        if (!areFieldsPresent)
        {
            missingFields = "type, ";
        }
        boolean subType = fontDictionary.containsKey(COSName.SUBTYPE);
        areFieldsPresent &= subType;
        if (!subType)
        {
            missingFields += "subType, ";
        }
        boolean baseFont = fontDictionary.containsKey(COSName.BASE_FONT);
        areFieldsPresent &= baseFont;
        if (!baseFont)
        {
            missingFields += "baseFont, ";
        }
        boolean firstChar = fontDictionary.containsKey(COSName.FIRST_CHAR);
        areFieldsPresent &= firstChar;
        if (!firstChar)
        {
            missingFields += "firstChar, ";
        }
        boolean lastChar = fontDictionary.containsKey(COSName.LAST_CHAR);
        areFieldsPresent &= lastChar;
        if (!lastChar)
        {
            missingFields += "lastChar, ";
        }
        boolean widths = fontDictionary.containsKey(COSName.WIDTHS);
        areFieldsPresent &= widths;
        if (!widths)
        {
            missingFields += "widths, ";
        }

        if (!areFieldsPresent)
        {
            if (missingFields.endsWith(", "))
            {
                missingFields = missingFields.substring(0, missingFields.length() - 2);
            }
            this.fontContainer.push(new ValidationError(ERROR_FONTS_DICTIONARY_INVALID,
                    this.font.getName()
                    + ": some required fields are missing from the Font dictionary: " + missingFields + "."));
        }
    }

    protected abstract void createFontDescriptorHelper();

    protected void processFontDescriptorValidation()
    {
        this.descriptorHelper.validate();
    }
}
TOP

Related Classes of org.apache.pdfbox.preflight.font.SimpleFontValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.