All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jpedal.utils.Fonts Maven / Gradle / Ivy

There is a newer version: 7.15.25
Show newest version
/*
 * ===========================================
 * Java Pdf Extraction Decoding Access Library
 * ===========================================
 *
 * Project Info:  http://www.idrsolutions.com
 * Help section for developers at http://www.idrsolutions.com/support/
 *
 * (C) Copyright 1997-2017 IDRsolutions and Contributors.
 *
 * This file is part of JPedal/JPDF2HTML5
 *
 @LICENSE@
 *
 * ---------------
 * Fonts.java
 * ---------------
 */
package org.jpedal.utils;

import java.util.StringTokenizer;

/**
 * general font routines to create XML font token or extract information
 * from the token or create a font object
 */
public class Fonts {

    public static final String fe = "";

    public static final String fb = " Removes
     * duplicate font commands where a font is turned off with /FONT tag and
     * then turned back on again 
* This arises because we put font tokens into the data and then may merge * it together. */ public static final String cleanupTokens(final String input) { final StringBuilder output_data = new StringBuilder(); String current_token, current_font = ""; int pointer = 0; boolean next_font_is_identical = false; final StringTokenizer data_As_tokens = new StringTokenizer(input, "<>", true); String next_item = data_As_tokens.nextToken(); //work through all tokens in the data while (data_As_tokens.hasMoreTokens()) { if (next_item.equals("<") && data_As_tokens.hasMoreTokens()) { //get token current_token = next_item + data_As_tokens.nextToken() + data_As_tokens.nextToken(); pointer += current_token.length(); //where we are in original data next_item = ""; //set to no value //track font in use so we can eliminate font off/same font on in data if ((current_token.startsWith(fb))) { current_font = current_token; } //ignore if next font the same - otherewise keep if ((current_token.equals(fe))) { //don't lose if if we are about to end a token pair final int nextToken = input.indexOf('<', pointer - 1); final int nextEndToken = input.indexOf("', next_font_pointer_s); next_font_is_identical = false; if ((next_font_pointer_s != -1) && (next_font_pointer_e != -1)) { final String next_font = input.substring(next_font_pointer_s, next_font_pointer_e + 1); if (next_font.equals(current_font)) { next_font_is_identical = true; } } //add if no matches if (!next_font_is_identical) { output_data.append(current_token); } } } else if ((current_token.startsWith(fb)) & next_font_is_identical) { next_font_is_identical = false; //ignore next font command } else { output_data.append(current_token); } } else { //not token so put in data output_data.append(next_item); pointer += next_item.length(); //where we are in original data next_item = ""; } //read next item if not read already if ((data_As_tokens.hasMoreTokens())) { next_item = data_As_tokens.nextToken(); /*allow for it being the last item*/ if (!data_As_tokens.hasMoreTokens()) { //not token so put in data output_data.append(next_item); pointer += next_item.length(); } } } return output_data.toString(); } /** * extract font size from font string. If a value is not found * in the first value, the second will be used. */ public static final String getActiveFontTag( final String raw_string, final String full_value) { int start; final int end; String return_value = ""; start = raw_string.lastIndexOf(fb); if (start > -1) { end = raw_string.indexOf("\">", start); if (end > 0) { return_value = raw_string.substring(start, end + 2); } } else { start = full_value.lastIndexOf(fb); if (start > -1) { end = full_value.indexOf("\">", start); if (end > 0) { return_value = full_value.substring(start, end + 2); } } } return return_value; } /** * create XML font token for putting into stream */ public static final String createFontToken(String font_name, final int font_size) { final String font_token; //set font used and include styles for truetype (ie Arial,Bold) final int pointer = font_name.indexOf(','); if (pointer != -1) { final String weight = font_name.substring(pointer + 1); font_name = font_name.substring(0, pointer); font_token = fb + "face=\"" + font_name + "\" style=\"font-size:" + font_size + "pt;font-style:" + weight + "\">"; } else { font_token = fb + "face=\"" + font_name + "\" style=\"font-size:" + font_size + "pt\">"; } return font_token; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy