com.jaspersoft.ireport.designer.fonts.TTFFontsLoader.java Source code

Java tutorial

Introduction

Here is the source code for com.jaspersoft.ireport.designer.fonts.TTFFontsLoader.java

Source

/*
 * iReport - Visual Designer for JasperReports.
 * Copyright (C) 2002 - 2009 Jaspersoft Corporation. All rights reserved.
 * http://www.jaspersoft.com
 *
 * Unless you have purchased a commercial license agreement from Jaspersoft,
 * the following license terms apply:
 *
 * This program is part of iReport.
 *
 * iReport is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * iReport is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with iReport. If not, see <http://www.gnu.org/licenses/>.
 */
package com.jaspersoft.ireport.designer.fonts;

import com.jaspersoft.ireport.designer.*;
import com.jaspersoft.ireport.designer.utils.Misc;
import java.awt.Font;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author gtoffoli
 */
public class TTFFontsLoader {

    public static java.awt.Font loadFont(String file) {
        java.awt.Font f = null;
        try {
            f = java.awt.Font.createFont(Font.TRUETYPE_FONT, new java.io.FileInputStream(file));
        } catch (IllegalArgumentException ett) {
            System.out.println(ett.getMessage() + " No TrueType font");
        } catch (java.awt.FontFormatException ef) {
            System.out.println(ef.getMessage() + " FontFormatException");
        } catch (java.io.IOException ioex) {
            System.out.println(ioex.getMessage() + " IOException");
        } catch (Exception ex) {
            System.out.println(ex.getMessage() + " General Exception");
        }

        return f;
    }

    public static List<IRFont> loadTTFFonts() {
        return loadTTFFonts(null);
    }

    public static List<IRFont> loadTTFFonts(TTFFontsLoaderMonitor monitor) {
        if (monitor != null)
            monitor.fontsLoadingStarted();

        if (monitor != null) {
            monitor.fontsLoadingStatusUpdated("Initializing font loader"); //"fontsLoader.loadingFontsInit"
        }

        List<IRFont> fonts = new ArrayList<IRFont>();

        List<String> fontsPaths = IReportManager.getInstance().getFontpath();

        if (fontsPaths == null || fontsPaths.size() == 0) {
            fontsPaths = IReportManager.getInstance().getClasspath();
        }
        //            String path = System.getProperty("java.class.path");
        //            if (path != null && path.length()>0)
        //            {
        //                StringTokenizer st = new StringTokenizer(path,  System.getProperty("path.separator") );
        //
        //                while (st.hasMoreTokens())
        //                {
        //                    String path_str = st.nextToken();
        //                            
        //                    try { addFontNames(fonts, path_str, monitor); } catch (Exception ex) { 
        //                 
        //                        System.out.println( 
        //                                Misc.formatString("Invalid font found in: {0}", new Object[]{path_str})); //"fontListLoader.invalidFont"
        //                    }
        //                }
        //            }
        //        }
        //        else
        //        {
        for (String path_str : fontsPaths) {
            addFontNames(fonts, path_str, monitor);
        }
        //        }

        if (monitor != null)
            monitor.fontsLoadingFinished();
        return fonts;
    }

    public static void addFontNames(List<IRFont> fonts, String path_str, TTFFontsLoaderMonitor monitor) {
        java.text.MessageFormat formatter = new java.text.MessageFormat("Loaded font {0}");

        java.io.File file = new java.io.File(path_str);
        if (!file.exists()) {

            return;
        }
        if (file.isDirectory()) {
            String[] files = file.list(new java.io.FilenameFilter() {
                public boolean accept(java.io.File dir, String filename) {
                    // modified                             
                    //                            return filename.toUpperCase().endsWith(".TTF") ;
                    return filename.toUpperCase().endsWith(".TTF") || filename.toUpperCase().endsWith(".TTC");
                }
            });

            //added begin 
            com.lowagie.text.pdf.FontMapper fontMapper = new com.lowagie.text.pdf.DefaultFontMapper();

            if (files == null) {
                System.out.println(Misc.formatString("Unable to list files in: {0}", new Object[] { "" + file }));
                return;
            }
            for (int i = 0; i < files.length; ++i) {
                try {
                    if (files[i].toUpperCase().endsWith(".TTC")) {
                        try {
                            String[] names = com.lowagie.text.pdf.BaseFont
                                    .enumerateTTCNames(file.getPath() + File.separator + files[i]);
                            for (int a = 0; a < names.length; a++) {

                                java.awt.Font f = fontMapper.pdfToAwt(
                                        com.lowagie.text.FontFactory
                                                .getFont(file.getPath() + File.separator + files[i]).getBaseFont(),
                                        10);
                                if (f != null) {
                                    fonts.add(new IRFont(f, files[i]));
                                } else {
                                    System.out.println(Misc.formatString("Failed to load font {0}",
                                            new Object[] { "" + file.getPath() + File.separator + files[i] }));
                                }

                                if (monitor != null) {
                                    monitor.fontsLoadingStatusUpdated(formatter
                                            .format(new Object[] { file.getPath() + File.separator + files[i] }));
                                }
                            }
                        } catch (com.lowagie.text.DocumentException de) {
                            System.out.println(de);
                        } catch (java.io.IOException ioe) {
                            System.out.println(ioe);
                        }
                    } else {
                        //added end

                        java.awt.Font f = loadFont(file.getPath() + File.separator + files[i]);
                        if (f != null) {
                            fonts.add(new IRFont(f, files[i]));
                            //System.out.println(""+ f.getFamily() + " " + f.getFontName() +" ("+file.getPath() + file.separator +files[i]+")");
                        } else {
                            System.out.println(Misc.formatString("Failed to load font {0}",
                                    new Object[] { "" + file.getPath() + File.separator + files[i] }));
                        }

                        if (monitor != null) {
                            monitor.fontsLoadingStatusUpdated(
                                    formatter.format(new Object[] { file.getPath() + File.separator + files[i] }));
                        }
                    }

                } catch (Exception ex) {

                    System.out.println(
                            Misc.formatString("Invalid font found: {0}. Font skipped.", new Object[] { files[i] })); //"fontListLoader.invalidFont"
                }

            }
        } else if (path_str.toUpperCase().endsWith(".TTF")) {
            // Try to load this file...
            //System.out.println(""+ path_str);
        } else if (path_str.toUpperCase().endsWith(".TTC")) {
            // Try to load this file...
            //System.out.println("TTC: "+ path_str);
        }
    }
}