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

📄 barcode128.java

📁 JFreeReport扩展库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    int index = 0;    if (isNextCharsDigits(text, index, 2))    {      // starts with 2 digits ..      nextToken = START_C;      out.append(nextToken);      if (ucc)      {        out.append(FNC1);      }      out.append(getPackedRawDigits(text, index, 2));      index = 2;    }    else if (character < ' ')    {      // the character is a ascii control character (0x00 - 0x1f) ..      nextToken = START_A;      out.append(nextToken);      if (ucc)      {        out.append(FNC1);      }      out.append((char) (character + 64));      index = 1;    }    else    {      out.append(nextToken);      if (ucc)      {        out.append(FNC1);      }      out.append((char) (character - ' '));      index = 1;    }    while (index < tLen)    {      switch (nextToken)      {        case START_A:          {            if (isNextCharsDigits(text, index, 4))            {              nextToken = START_C;              out.append(CODE_AB_TO_C);              out.append(getPackedRawDigits(text, index, 4));              index += 4;            }            else            {              character = text.charAt(index);              index += 1;              if (character > '_')              {                nextToken = START_B;                out.append(CODE_AC_TO_B);                out.append((char) (character - ' '));              }              else if (character < ' ')              {                out.append((char) (character + 64));              }              else              {                out.append((char) (character - ' '));              }            }          }          break;        case START_B:          {            if (isNextCharsDigits(text, index, 4))            {              nextToken = START_C;              out.append(CODE_AB_TO_C);              out.append(getPackedRawDigits(text, index, 4));              index += 4;            }            else            {              character = text.charAt(index++);              if (character < ' ')              {                nextToken = START_A;                out.append(CODE_BC_TO_A);                out.append((char) (character + 64));              }              else              {                out.append((char) (character - ' '));              }            }          }          break;        case START_C:          {            if (isNextCharsDigits(text, index, 2))            {              out.append(getPackedRawDigits(text, index, 2));              index += 2;            }            else            {              character = text.charAt(index++);              if (character < ' ')              {                nextToken = START_A;                out.append(CODE_BC_TO_A);                out.append((char) (character + 64));              }              else              {                nextToken = START_B;                out.append(CODE_AC_TO_B);                out.append((char) (character - ' '));              }            }          }          break;      }    }    return out.toString();  }  /**   * Generates the bars. The input has the actual barcodes, not   * the human readable text.   * @param text the barcode   * @return the bars   */  public static byte[] getBarsCode128Raw(String text)  {    StringBuffer b = new StringBuffer();    int idx = text.indexOf('\uffff');    if (idx >= 0)    {      b.append(text.substring(0, idx));    }    else    {      b.append(text);    }    // Calculate the checksum    int chkSum = b.charAt(0);    for (int k = 1; k < b.length(); ++k)    {      chkSum += k * b.charAt(k);    }    chkSum = chkSum % 103;    b.append((char) chkSum);    byte bars[] = new byte[(b.length() + 1) * 6 + 7];    int k;    for (k = 0; k < b.length(); ++k)    {      System.arraycopy(BARS[b.charAt(k)], 0, bars, k * 6, 6);    }    System.arraycopy(BARS_STOP, 0, bars, k * 6, 7);    return bars;  }  public String getStrippedCode()  {    return getCode();  }  public String getRawText()  {    return getRawText(getCode(), isUccCode());  }  /** Gets the maximum area that the barcode and the text, if   * any, will occupy. The lower left corner is always (0, 0).   * @return the size the barcode occupies.   */  public Dimension2D getBarcodeSize()  {    float fontX = 0;    float fontY = 0;    FontDefinition font = getFont();    if (font != null)    {      float baseline = getBaseline();      if (baseline > 0)      {        fontY = baseline - getFontDescent(font.getFont());      }      else      {        fontY = -baseline + font.getFontSize();      }      String fullCode = getStrippedCode();      BarcodeSizeCalculator calc = new BarcodeSizeCalculator(font);      fontX = calc.getStringWidth(fullCode, 0, fullCode.length());    }    float fullWidth = Math.max(getFullWidth(), fontX);    float fullHeight = getBarHeight() + fontY;    return new FloatDimension(fullWidth, fullHeight);  }  private float getFullWidth()  {    String rawText = getRawText();    int len = rawText.length();    float fullWidth = (len + 2) * 11 * getMinWidth() + 2 * getMinWidth();    return fullWidth;  }  /** Creates an <CODE>Image</CODE> with the barcode.   * @param barColor the color of the bars. It can be <CODE>null</CODE>   * @param textColor the color of the text. It can be <CODE>null</CODE>   * @return the <CODE>Image</CODE>   */  public Image createImageWithBarcode(Color barColor, Color textColor)  {    if (barColor == null)      throw new NullPointerException("BarColor must not be null");    if (textColor == null)      throw new NullPointerException("TextColor must not be null");    String fullCode = getStrippedCode();    String bCode = getRawText();//    int len = bCode.length();    float fullWidth = getFullWidth();    float barStartX = 0;    float barStartY = 0;    float textStartX = 0;    float textStartY = 0;    float textWidth = 0;    FontDefinition font = getFont();    if (font != null)    {      BarcodeSizeCalculator calc = new BarcodeSizeCalculator(font);      textWidth = calc.getStringWidth(fullCode, 0, fullCode.length());      float baseline = getBaseline();      if (baseline > 0)      {        textStartY = baseline - getFontDescent(font.getFont());      }      else      {        textStartY = -baseline + font.getFontSize();        barStartY = textStartY + getBaseline();      }    }    if (getTextAlignment() == ElementAlignment.RIGHT)    {      if (textWidth > fullWidth)        barStartX = textWidth - fullWidth;      else        textStartX = fullWidth - textWidth;    }    else if (getTextAlignment() == ElementAlignment.CENTER)    {      if (textWidth > fullWidth)        barStartX = (textWidth - fullWidth) / 2;      else        textStartX = (fullWidth - textWidth) / 2;    }    int imageX = (int) Math.max (fullWidth, textWidth);    int imageY = (int) (getBarHeight() + textStartY);    BufferedImage image = new BufferedImage (imageX, imageY, BufferedImage.TYPE_INT_ARGB);    Graphics2D g2 = image.createGraphics();    byte bars[] = getBarsCode128Raw(bCode);    g2.setPaint(barColor);    for (int k = 0; k < bars.length; ++k)    {      float w = bars[k] * getMinWidth();      // print every other bar ..      if ((k % 2) == 0)      {        Rectangle2D.Float rect = new Rectangle2D.Float(barStartX, barStartY, w, getBarHeight());        g2.fill(rect);      }      barStartX += w;    }    if (font != null)    {      g2.setFont(font.getFont());      g2.setPaint(textColor);      g2.drawString(fullCode, textStartX, textStartY);    }    g2.dispose();    return image;  }}

⌨️ 快捷键说明

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