⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 barcode128.java

📁 JFreeReport扩展库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/** * ======================================== * JFreeReport : a free Java report library * ======================================== * * Project Info:  http://www.object-refinery.com/jfreereport/index.html * Project Lead:  Thomas Morgner; * * (C) Copyright 2000-2002, by Simba Management Limited and Contributors. * * This library is free software; you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Foundation; * either version 2.1 of the License, or (at your option) any later version. * * This library 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along with this * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. * * The Original Code is 'iText, a free JAVA-PDF library'. * * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie. * All Rights Reserved. * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved. * * Contributor(s): all the names of the contributors are added in the source code * where applicable. * */package com.jrefinery.report.ext.barcode;import com.jrefinery.report.ElementAlignment;import org.jfree.ui.FloatDimension;import com.jrefinery.report.targets.FontDefinition;import java.awt.Color;import java.awt.Graphics2D;import java.awt.Image;import java.awt.geom.Dimension2D;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;/** Implements the code 128 and UCC/EAN-128. Other symbologies are allowed in raw mode.<p> * The code types allowed are:<br> * <ul> * <li><b>CODE128</b> - plain barcode 128. * <li><b>CODE128_UCC</b> - support for UCC/EAN-128. * <li><b>CODE128_RAW</b> - raw mode. The code attribute has the actual codes from 0 *     to 105 followed by '&#92;uffff' and the human readable text. * </ul> * The default parameters are: * <pre> * x = 0.8f; * font = BaseFont.createFont("Helvetica", "winansi", false); * size = 8; * baseline = size; * barHeight = size * 3; * textAlignment = Element.ALIGN_CENTER; * codeType = CODE128; * </pre> * * @author Paulo Soares (psoares@consiste.pt) */public class Barcode128 extends Barcode{  /** The bars to generate the code.   */  private static byte BARS[][] =      {        {2, 1, 2, 2, 2, 2},        {2, 2, 2, 1, 2, 2},        {2, 2, 2, 2, 2, 1},        {1, 2, 1, 2, 2, 3},        {1, 2, 1, 3, 2, 2},        {1, 3, 1, 2, 2, 2},        {1, 2, 2, 2, 1, 3},        {1, 2, 2, 3, 1, 2},        {1, 3, 2, 2, 1, 2},        {2, 2, 1, 2, 1, 3},        {2, 2, 1, 3, 1, 2},        {2, 3, 1, 2, 1, 2},        {1, 1, 2, 2, 3, 2},        {1, 2, 2, 1, 3, 2},        {1, 2, 2, 2, 3, 1},        {1, 1, 3, 2, 2, 2},        {1, 2, 3, 1, 2, 2},        {1, 2, 3, 2, 2, 1},        {2, 2, 3, 2, 1, 1},        {2, 2, 1, 1, 3, 2},        {2, 2, 1, 2, 3, 1},        {2, 1, 3, 2, 1, 2},        {2, 2, 3, 1, 1, 2},        {3, 1, 2, 1, 3, 1},        {3, 1, 1, 2, 2, 2},        {3, 2, 1, 1, 2, 2},        {3, 2, 1, 2, 2, 1},        {3, 1, 2, 2, 1, 2},        {3, 2, 2, 1, 1, 2},        {3, 2, 2, 2, 1, 1},        {2, 1, 2, 1, 2, 3},        {2, 1, 2, 3, 2, 1},        {2, 3, 2, 1, 2, 1},        {1, 1, 1, 3, 2, 3},        {1, 3, 1, 1, 2, 3},        {1, 3, 1, 3, 2, 1},        {1, 1, 2, 3, 1, 3},        {1, 3, 2, 1, 1, 3},        {1, 3, 2, 3, 1, 1},        {2, 1, 1, 3, 1, 3},        {2, 3, 1, 1, 1, 3},        {2, 3, 1, 3, 1, 1},        {1, 1, 2, 1, 3, 3},        {1, 1, 2, 3, 3, 1},        {1, 3, 2, 1, 3, 1},        {1, 1, 3, 1, 2, 3},        {1, 1, 3, 3, 2, 1},        {1, 3, 3, 1, 2, 1},        {3, 1, 3, 1, 2, 1},        {2, 1, 1, 3, 3, 1},        {2, 3, 1, 1, 3, 1},        {2, 1, 3, 1, 1, 3},        {2, 1, 3, 3, 1, 1},        {2, 1, 3, 1, 3, 1},        {3, 1, 1, 1, 2, 3},        {3, 1, 1, 3, 2, 1},        {3, 3, 1, 1, 2, 1},        {3, 1, 2, 1, 1, 3},        {3, 1, 2, 3, 1, 1},        {3, 3, 2, 1, 1, 1},        {3, 1, 4, 1, 1, 1},        {2, 2, 1, 4, 1, 1},        {4, 3, 1, 1, 1, 1},        {1, 1, 1, 2, 2, 4},        {1, 1, 1, 4, 2, 2},        {1, 2, 1, 1, 2, 4},        {1, 2, 1, 4, 2, 1},        {1, 4, 1, 1, 2, 2},        {1, 4, 1, 2, 2, 1},        {1, 1, 2, 2, 1, 4},        {1, 1, 2, 4, 1, 2},        {1, 2, 2, 1, 1, 4},        {1, 2, 2, 4, 1, 1},        {1, 4, 2, 1, 1, 2},        {1, 4, 2, 2, 1, 1},        {2, 4, 1, 2, 1, 1},        {2, 2, 1, 1, 1, 4},        {4, 1, 3, 1, 1, 1},        {2, 4, 1, 1, 1, 2},        {1, 3, 4, 1, 1, 1},        {1, 1, 1, 2, 4, 2},        {1, 2, 1, 1, 4, 2},        {1, 2, 1, 2, 4, 1},        {1, 1, 4, 2, 1, 2},        {1, 2, 4, 1, 1, 2},        {1, 2, 4, 2, 1, 1},        {4, 1, 1, 2, 1, 2},        {4, 2, 1, 1, 1, 2},        {4, 2, 1, 2, 1, 1},        {2, 1, 2, 1, 4, 1},        {2, 1, 4, 1, 2, 1},        {4, 1, 2, 1, 2, 1},        {1, 1, 1, 1, 4, 3},        {1, 1, 1, 3, 4, 1},        {1, 3, 1, 1, 4, 1},        {1, 1, 4, 1, 1, 3},        {1, 1, 4, 3, 1, 1},        {4, 1, 1, 1, 1, 3},        {4, 1, 1, 3, 1, 1},        {1, 1, 3, 1, 4, 1},        {1, 1, 4, 1, 3, 1},        {3, 1, 1, 1, 4, 1},        {4, 1, 1, 1, 3, 1},        {2, 1, 1, 4, 1, 2},        {2, 1, 1, 2, 1, 4},        {2, 1, 1, 2, 3, 2}      };  /** The stop bars.   */  private static byte BARS_STOP[] = {2, 3, 3, 1, 1, 1, 2};  /** The charset code change.   */  public static final char CODE_AB_TO_C = 99;  /** The charset code change.   */  public static final char CODE_AC_TO_B = 100;  /** The charset code change.   */  public static final char CODE_BC_TO_A = 101;  /** The code for UCC/EAN-128.   */  public static final char FNC1 = 102;  /** The start code.   */  public static final char START_A = 103;  /** The start code.   */  public static final char START_B = 104;  /** The start code.   */  public static final char START_C = 105;  private boolean uccCode;  /** Creates new Barcode128 */  public Barcode128()  {  }  public boolean isUccCode()  {    return uccCode;  }  public void setUccCode(boolean ucc)  {    this.uccCode = ucc;  }  /** Returns <CODE>true</CODE> if the next <CODE>numDigits</CODE>   * starting from index <CODE>textIndex</CODE> are numeric.   * @param text the text to check   * @param textIndex where to check from   * @param numDigits the number of digits to check   * @return the check result   */  private static boolean isNextCharsDigits(String text, int textIndex, int numDigits)  {    if (textIndex + numDigits > text.length())      return false;    while (numDigits-- > 0)    {      char c = text.charAt(textIndex++);      if (c < '0' || c > '9')        return false;    }    return true;  }  /**   * Packs the digits for charset C. It assumes that all the parameters   * are valid.   * @param text the text to pack   * @param textIndex where to pack from   * @param numDigits the number of digits to pack. It is always an even number   * @return the packed digits, two digits per character   */  private static String getPackedRawDigits(String text, int textIndex, int numDigits)  {    StringBuffer out = new StringBuffer();    while (numDigits > 0)    {      numDigits -= 2;      int c1 = text.charAt(textIndex++) - '0';      int c2 = text.charAt(textIndex++) - '0';      out.append((char) (c1 * 10 + c2));    }    return out.toString();  }  /** Converts the human readable text to the characters needed to   * create a barcode. Some optimization is done to get the shortest code.   * @param text the text to convert   * @param ucc <CODE>true</CODE> if it is an UCC/EAN-128. In this case   * the character FNC1 is added   * @return the code ready to be fed to getBarsCode128Raw()   */  public static String getRawText(String text, boolean ucc)  {    StringBuffer out = new StringBuffer();    int tLen = text.length();    if (tLen == 0)    {      out.append(START_B);      if (ucc)      {        out.append(FNC1);      }      return out.toString();    }    // check that the bar code is valid.    int character = 0;    for (int i = 0; i < tLen; i++)    {      character = text.charAt(character);      if (character > 127)      {        throw new IllegalArgumentException("There are illegal characters for barcode 128 in '" + text + "'.");      }    }    character = text.charAt(0);    char nextToken = START_B;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -