вызов функции не соответствует какой-либо перегрузке - PullRequest
0 голосов
/ 25 марта 2019

Я разрабатываю библиотеку Java для управления различными видами штрих-кода в Crystal Report.Crystal Report предлагает SDK для Eclipse, а внутри нового проекта есть библиотека для разработки интеграции между ERP и CR.Одна из этой библиотеки управляет штрих-кодами, но это плохая библиотека, потому что я могу управлять только своего рода штрих-кодом.Я нашел документ для реализации UFL.В документе представлен простой пример, и благодаря этому я написал некоторый класс для управления тремя видами штрих-кода, но есть некоторая функция отчета Crystal с двумя параметрами, и пример не показывает, как получить правильную реализацию.Я пытался разработать новые классы для управления функциями такого типа, но всегда получаю сообщение об ошибке: «вызов функции не соответствует какой-либо перегрузке« имени функции »».

Для этой функцииЯ попытался передать только параметр, и приложение работает хорошо.Я сделал перегрузку метода, передав два параметра, но всегда получаю одно и то же сообщение об ошибке.

это часть моего кода

public final FormulaValue evaluate(FormulaValueReference[] arguments)
     throws FormulaFunctionCallException
  {

       StringValue dataStringArg = (StringValue)arguments[0].getFormulaValue();
       StringValue opzArg =(StringValue)arguments[1].getFormulaValue();

     String dataString = dataStringArg.getString();
     String opz=opzArg.getString();



    String returnVal = doTranslation(dataString,opz);

    return StringValue.fromString(returnVal);
   }

  protected abstract String translate(String inputData,String opz)
   throws InvalidBarcodeDataException;


public class CodeEAN13
  extends CodeEAN13Base
{


   public String getIdentifier()
   {
    return "barcodeean13";
  }

protected String translate(String inputData, String opz) throws InvalidBarcodeDataException {
    Integer checkDigitSubtotal;
.....
}

Я за исключением показаотчет с таким штрих-кодом.Класс CodeEAN13 должен запустить алгоритм для вычисления строки для шрифта штрих-кода.

Это код из библиотек, когда программа запускается и отображается в трассировке стека.Для каждой строки трассировки я поставил соответствующий код.

//com.crystaldecisions.reports.formulas.FormulaService.compile(SourceFile:347)

public void compile(FormulaDefinitionBase paramFormulaDefinitionBase, FormulaContext paramFormulaContext)
    throws FormulaException
  {
    if (paramFormulaDefinitionBase == null) {
      throw new NullPointerException("A formula must be given.");
    }
    paramFormulaDefinitionBase.getFormulaInfo().a(paramFormulaContext);
  }

//com.crystaldecisions.reports.formulas.FormulaInfo.a(SourceFile:570)

void a(FormulaContext paramFormulaContext)
    throws FormulaException
  {
    if (this.jdField_try)
    {
      this.o = true;

      throw new FormulaException("JRC00000433", "", FormulaResources.a(), "RecursiveCompileDetected", this);
    }
    this.o = false;
    if (paramFormulaContext == null) {
      throw new NullPointerException("A formula context must be given.");
    }
    try
    {
      this.jdField_try = true;
      jdMethod_if(paramFormulaContext);
      this.t = this.jdField_long.getFormulaValueType();
      this.jdField_do.a();//(SourceFile:570)
    }
    catch (FormulaException localFormulaException)
    {
      if ((localFormulaException.getResourceKey().equals("RecursiveCompileDetected")) && (this.o)) {
        throw new FormulaException("JRC00000434", "", FormulaResources.a(), "RecursionNotAllowed", null, localFormulaException);
      }
      throw localFormulaException;
    }
    finally
    {
      this.jdField_try = false;
      jdMethod_if();
    }
  }

//com.crystaldecisions.reports.formulas.r.a(SourceFile:90)
public void a()
    throws FormulaException
  {
    FormulaInfo localFormulaInfo = this.a.getFormulaInfo();
    FormulaDefinitionBase localFormulaDefinitionBase = this.a.getFormula();
    String str1 = "Formula";
    String str2 = "";
    if ((localFormulaDefinitionBase instanceof CustomFunctionDefinition))
    {
      str1 = "Custom function";
      str2 = "'";
    }
    if (if.isDebugEnabled()) {
      if.debug("Compiling " + StringUtil.toLowerCaseEng(str1) + " " + str2 + localFormulaDefinitionBase.getFormulaForm() + str2 + "...");
    }
    localFormulaInfo.invalidate();
    try
    {
      ExpressionNode localExpressionNode = o.a(this.a).a();
      localExpressionNode = this.jdField_do.jdMethod_void(localExpressionNode);//(SourceFile:90)
      localExpressionNode = this.jdField_for.c(localExpressionNode);
      localFormulaInfo.a(localExpressionNode);

      localFormulaDefinitionBase.formulaInfoUpdated();
      if (if.isInfoEnabled()) {
        if.info(str1 + " " + str2 + localFormulaDefinitionBase.getFormulaForm() + str2 + " compiled.");
      }
    }
    catch (FormulaException localFormulaException)
    {
      if (if.isInfoEnabled()) {
        if.info(str1 + " " + str2 + localFormulaDefinitionBase.getFormulaForm() + str2 + " did not compile: " + localFormulaException);
      }
      localFormulaInfo.invalidate();

      throw localFormulaException;
    }
  }
}
//com.crystaldecisions.reports.formulas.c.void(SourceFile:70)
 public ExpressionNode jdMethod_void(ExpressionNode paramExpressionNode)
    throws FormulaException
  {
    ExpressionNode localExpressionNode = paramExpressionNode;

    this.jdField_int = 0;
    this.jdField_for = 0;

    FormulaDefinitionBase localFormulaDefinitionBase = this.a.getFormula();
    FormulaInfo localFormulaInfo = this.a.getFormulaInfo();

    localExpressionNode = jdMethod_do(localExpressionNode);//(SourceFile:70)

    FormulaValueType localFormulaValueType = a(localFormulaDefinitionBase, localFormulaInfo, localExpressionNode);
    if ((localExpressionNode != null) && (!localFormulaValueType.equals(localExpressionNode.getFormulaValueType())))
    {
      localExpressionNode = a(localExpressionNode, localFormulaValueType);
      if ((!new) && (!localExpressionNode.getFormulaValueType().equals(localFormulaValueType))) {
        throw new AssertionError("Coercion failed!!! This should never happen.");
      }
    }
    localFormulaInfo.a(localFormulaValueType);

    return localExpressionNode;
  }

  //com.crystaldecisions.reports.formulas.j.do(SourceFile:74)
  final ExpressionNode jdMethod_do(ExpressionNode paramExpressionNode)
    throws FormulaException
  {
    try
    {
      return a(paramExpressionNode);//(SourceFile:74)
    }
    catch (StackOverflowError localStackOverflowError)
    {
      throw new FormulaException("JRC00000461", "", FormulaResources.a(), "StackOverflow", this.a);
    }
  }

  //com.crystaldecisions.reports.formulas.j.a(SourceFile:250)
  ExpressionNode a(ExpressionNode paramExpressionNode)
    throws FormulaException
  {
    if (paramExpressionNode == null) {
      return null;
    }
    switch (paramExpressionNode.jdField_for.value())
    {
        ......
        case 30: 
      return jdMethod_for((MultiOperatorNode)paramExpressionNode);


//com.crystaldecisions.reports.formulas.c.for(SourceFile:1225)
 ExpressionNode jdMethod_for(MultiOperatorNode paramMultiOperatorNode)
    throws FormulaException
  {
    int i = paramMultiOperatorNode.size();
    if (i == 0) {
      return null;
    }
    for (int j = 0; j < i; j++)
    {
      ExpressionNode localExpressionNode = a(paramMultiOperatorNode.getOperand(j));//(SourceFile:1225)
      if (localExpressionNode == null) {
        return null;
      }
      paramMultiOperatorNode.setOperand(j, localExpressionNode);
    }
    paramMultiOperatorNode.jdField_try = paramMultiOperatorNode.getOperand(i - 1).jdField_try;

    return paramMultiOperatorNode;
  } 

  //com.crystaldecisions.reports.formulas.j.a(SourceFile:295)
  case 8: 
      return a((FunctionNode)paramExpressionNode);


//com.crystaldecisions.reports.formulas.j.a(SourceFile:3148)
 ExpressionNode a(FunctionNode paramFunctionNode)
    throws FormulaException
  {
    int i = paramFunctionNode.size();
    ExpressionNode[] arrayOfExpressionNode = ArrayPool.a(i, this.a);
    try
    {
      for (int j = 0; j < i; j++)
      {
        ExpressionNode localExpressionNode2 = a(paramFunctionNode.get(j), arrayOfExpressionNode);
        if (localExpressionNode2 == null) {
          return null;
        }
        arrayOfExpressionNode[j] = localExpressionNode2;
      }
      return a(paramFunctionNode, arrayOfExpressionNode);//(SourceFile:3148)
    }
    finally
    {
      ArrayPool.a(arrayOfExpressionNode, this.a);
    }
  }

 //com.crystaldecisions.reports.formulas.c.a(SourceFile:1809)



//com.crystaldecisions.reports.formulas.j.a(SourceFile:3507)
 FormulaException a(String paramString1, String paramString2, String paramString3, String[] paramArrayOfString, ExpressionNode paramExpressionNode)
  {
    return a(paramString1, paramString2, paramString3, paramArrayOfString, null, paramExpressionNode);
  }

  //com.crystaldecisions.reports.formulas.j.a(SourceFile:3528)
  FormulaException a(String paramString1, String paramString2, String paramString3, String[] paramArrayOfString, Throwable paramThrowable, ExpressionNode paramExpressionNode)
  {
    return new FormulaException(paramString1, paramString2,FormulaResources.a(), paramString3, paramArrayOfString, paramThrowable, this.a, paramExpressionNode);//(SourceFile:3528)
  }


   public FormulaException(String paramString1, String paramString2, CrystalResourcesFactory paramCrystalResourcesFactory, String paramString3, String[] paramArrayOfString, Throwable paramThrowable, FormulaEnvironment paramFormulaEnvironment, ExpressionNode paramExpressionNode)
  {
    super(paramString1, paramString2, paramCrystalResourcesFactory, paramString3, paramArrayOfString, paramThrowable);

    a(paramFormulaEnvironment, paramExpressionNode);
  }

Ответы [ 4 ]

0 голосов
/ 28 марта 2019

Проблема была в этом утверждении:

FormulaFunctionArgumentDefinition[] myArguments = {SimpleFormulaFunctionArgumentDefinition.string };

Правильная конфигурация для параметров:

FormulaFunctionArgumentDefinition[] myArguments = { SimpleFormulaFunctionArgumentDefinition.string,SimpleFormulaFunctionArgumentDefinition.string };

Очевидно, что в моей формуле Crystal Report есть два типа String или один тип String, которые зависят от формулы. Ниже приведен полный код для определения UFL для функции штрих-кода с двумя параметрами. Этот код устанавливает библиотеку UFL для Crystal Report.

import com.crystaldecisions.reports.common.CrystalResourcesFactory;
import com.crystaldecisions.reports.common.value.FormulaValue;
import com.crystaldecisions.reports.common.value.FormulaValueType;

import com.crystaldecisions.reports.common.value.StringValue;
import com.crystaldecisions.reports.formulas.FormulaFunction;
import com.crystaldecisions.reports.formulas.FormulaFunctionArgumentDefinition;
import com.crystaldecisions.reports.formulas.FormulaFunctionCallException;
import com.crystaldecisions.reports.formulas.FormulaValueReference;
import com.crystaldecisions.reports.formulas.SimpleFormulaFunctionArgumentDefinition;

public abstract class CodeEAN13Base
   implements FormulaFunction
 {
   FormulaFunctionArgumentDefinition[] myArguments = { SimpleFormulaFunctionArgumentDefinition.string,SimpleFormulaFunctionArgumentDefinition.string };

protected CrystalResourcesFactory resCrystal;



  public CodeEAN13Base()
   {
     this.resCrystal = new CrystalResourcesFactory("Messages");

   }


  protected final String doTranslation(String inputData,String opz)
 // protected final String doTranslation(String inputData)
   {
    String returnVal = "";

   //  returnVal = returnVal + translateCharWrapper(inputData);
     returnVal = returnVal + translateCharWrapper(inputData,opz);


    return returnVal;
   }



   @Override
   public final FormulaValue evaluate(FormulaValueReference[] arguments)
     throws FormulaFunctionCallException
  {

       StringValue dataStringArg = (StringValue)arguments[0].getFormulaValue();
       StringValue opzArg =(StringValue)arguments[1].getFormulaValue();

     String dataString = dataStringArg.getString();
     String opz=opzArg.getString();





    String returnVal = doTranslation(dataString,opz);

    return StringValue.fromString(returnVal);
   }

   @Override
   public final FormulaFunctionArgumentDefinition[] getArguments()
  {
     return this.myArguments;
  }

 @Override  
public final FormulaValueType getReturnType()
  {
     return FormulaValueType.string;
   }


   protected abstract String translate(String inputData,String opz)
   throws InvalidBarcodeDataException;

//protected abstract String translate(String inputData)
//throws InvalidBarcodeDataException;

 // private String translateCharWrapper(String inputData)
   private String translateCharWrapper(String inputData,String opz)
  {
     String returnString;

     try
    {
        // returnString = translate(inputData);
      returnString = translate(inputData,opz);
     } catch (InvalidBarcodeDataException e) {
      returnString = "";
     }

    return returnString;
  }



   @Override
   public void validateArgumentValues(FormulaValueReference[] arguments)
     throws FormulaFunctionCallException
   {}
 }

public class CodeEAN13
  extends CodeEAN13Base
{

    //protected String opz;



   @Override
   public String getIdentifier()
   {
    return "barcodeean13";
  }



  private static String oddBar(String code) {

        return String.valueOf((char)(65+Integer.parseInt(code)));

    }

  private static String evenBar(String code) {

        return String.valueOf((char)(75+Integer.parseInt(code)));

    }


@Override

    protected String translate(String inputData, String opz) throws InvalidBarcodeDataException {   

     Integer checkDigitSubtotal;
     String checkDigit;
      String temp = null;
      String code=inputData;
      String azalea_EAN13 = null;
      String opzM=opz;


//    if(!opzM.equals(null)) {
//     code=code+opzM;
//    }

      //Calculate the EAN-13 check digit.

      checkDigitSubtotal=3*(Integer.parseInt(code.substring(1, 2))+Integer.parseInt(code.substring(3, 4))+Integer.parseInt(code.substring(5, 6))
                           +Integer.parseInt(code.substring(7, 8))+Integer.parseInt(code.substring(9, 10))
                           +Integer.parseInt(code.substring(code.length()-1)));


      checkDigitSubtotal=checkDigitSubtotal+(Integer.parseInt(code.substring(0,1))+Integer.parseInt(code.substring(2, 3))
                                       +Integer.parseInt(code.substring(4, 5))+Integer.parseInt(code.substring(6, 7))
                                       +Integer.parseInt(code.substring(8, 9))+Integer.parseInt(code.substring(10, 11)));

  checkDigit=String.valueOf(300-checkDigitSubtotal);
  checkDigit=checkDigit.substring(checkDigit.length()-1);



 // Begin building the output string with the 1st character's human-readable, L guard bars & odd parity of 1st digit
   temp=(char)(194+Integer.parseInt(code.substring(0,1)))+"x"+oddBar(code.substring(1, 2));  

  // Build the remainder of left half of symbol's parity is based on 1st digit
   switch (code.substring(0,1)) {
   case "0":
      {
         //temp="U|x"; 
         temp=temp+oddBar(code.substring(2, 3));
         temp=temp+oddBar(code.substring(3, 4));
         temp=temp+oddBar(code.substring(4, 5));
         temp=temp+oddBar(code.substring(5, 6));
         temp=temp+oddBar(code.substring(6, 7));         
      }
    break;
   case "1":
      {
          //temp="[|x";
          temp=temp+oddBar(code.substring(2, 3)); 
          temp=temp+evenBar(code.substring(3, 4));
          temp=temp+oddBar(code.substring(4, 5));
          temp=temp+evenBar(code.substring(5, 6));
          temp=temp+evenBar(code.substring(6, 7));
      }
      break;
   case "2":
   {
       //temp="V|x";
       temp=temp+oddBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));
   }
   break;
   case "3":
   {
       //temp="W|x";
       temp=temp+oddBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));
   }
    break;
   case "4":
   {
       //temp="X|x";
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));

   }
   break;
   case "5":
   {
       //temp="Y|x";
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));

   }
   break;
   case "6":
   {
       //temp="Z|x";
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;
   case "7":
   {
       //temp="u|x";
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));



   }
   break;
   case "8":
   {
       //temp="\\|x";
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;
   case "9":
   {
       //temp="]|x";
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;

    default:
   }

////Add the center guard bars & the build right half of symbol using set C (0-9)


    return azalea_EAN13+opzM;
   }




 }

0 голосов
/ 26 марта 2019

Часть журнала:

1922 [TSLVReader #1] DEBUG com.crystaldecisions.reports.formulas.Compiler  - Compiling formula {@ean13}...
1922 [TSLVReader #1] INFO com.crystaldecisions.reports.formulas.Compiler  - Formula {@ean13} did not compile: com.crystaldecisions.reports.formulas.FormulaException: Exception in the formulas '{@ean13}' a 'BarcodeEAN13('412345678901','567')':
the call to a function does not correspond to any overload of barcodeean13.
1922 [TSLVReader #1] WARN com.crystaldecisions.reports.reportdefinition.ReportDefinition  - com.crystaldecisions.reports.formulas.FormulaException: Exception in the formulas  '{@ean13}' a 'BarcodeEAN13('412345678901','567')':
the call to a function does not correspond to any overload of barcodeean13.
1923 [TSLVReader #1] ERROR com.crystaldecisions.reports.dataengine  - Formula error: recompile formulas failed
com.crystaldecisions.reports.formulas.FormulaException: Exception in the formulas  '{@ean13}' a 'BarcodeEAN13('412345678901','567')':
the call to a function does not correspond to any overload of barcodeean13.
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:3528)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:3507)
    at com.crystaldecisions.reports.formulas.c.a(SourceFile:1809)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:3148)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:295)
    at com.crystaldecisions.reports.formulas.c.for(SourceFile:1225)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:250)
    at com.crystaldecisions.reports.formulas.j.do(SourceFile:74)
    at com.crystaldecisions.reports.formulas.c.void(SourceFile:70)
    at com.crystaldecisions.reports.formulas.r.a(SourceFile:90)
    at com.crystaldecisions.reports.formulas.FormulaInfo.a(SourceFile:570)
    at com.crystaldecisions.reports.formulas.FormulaService.compile(SourceFile:347)
0 голосов
/ 26 марта 2019
1922 [TSLVReader #1] DEBUG com.crystaldecisions.reports.formulas.Compiler  - Compiling formula {@ean13}...
1922 [TSLVReader #1] INFO com.crystaldecisions.reports.formulas.Compiler  - Formula {@ean13} did not compile: com.crystaldecisions.reports.formulas.FormulaException: Exception in the formulas '{@ean13}' a 'BarcodeEAN13('412345678901','567')':
the call to a function does not correspond to any overload of barcodeean13.
1922 [TSLVReader #1] WARN com.crystaldecisions.reports.reportdefinition.ReportDefinition  - com.crystaldecisions.reports.formulas.FormulaException: Exception in the formulas  '{@ean13}' a 'BarcodeEAN13('412345678901','567')':
the call to a function does not correspond to any overload of barcodeean13.
1923 [TSLVReader #1] ERROR com.crystaldecisions.reports.dataengine  - Formula error: recompile formulas failed
com.crystaldecisions.reports.formulas.FormulaException: Exception in the formulas  '{@ean13}' a 'BarcodeEAN13('412345678901','567')':
the call to a function does not correspond to any overload of barcodeean13.
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:3528)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:3507)
    at com.crystaldecisions.reports.formulas.c.a(SourceFile:1809)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:3148)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:295)
    at com.crystaldecisions.reports.formulas.c.for(SourceFile:1225)
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:250)
    at com.crystaldecisions.reports.formulas.j.do(SourceFile:74)
    at com.crystaldecisions.reports.formulas.c.void(SourceFile:70)
    at com.crystaldecisions.reports.formulas.r.a(SourceFile:90)
    at com.crystaldecisions.reports.formulas.FormulaInfo.a(SourceFile:570)
    at com.crystaldecisions.reports.formulas.FormulaService.compile(SourceFile:347)

Stacktrace сообщает вам, что вам нужно знать, однако я не могу предоставить более конкретную информацию, потому что Crystal Reports, похоже, платная, и они не предоставляют документацию (по крайней мере, бесплатно), поэтому я не могу посмотреть наИсточник jar.
Несмотря на это, этот фрагмент говорит вам большинство из того, что вам нужно знать:

1923 [TSLVReader #1] ERROR com.crystaldecisions.reports.dataengine  - Formula error: recompile formulas failed
com.crystaldecisions.reports.formulas.FormulaException: Exception in the formulas  '{@ean13}' a 'BarcodeEAN13('412345678901','567')':
the call to a function does not correspond to any overload of barcodeean13.
    at com.crystaldecisions.reports.formulas.j.a(SourceFile:3528)

Эта строка:

com.crystaldecisions.reports.formulas.FormulaException  

Сообщает вам, что выброшено исключениевзято из исходного кода Crystal Reports, а не из-за конкретной ошибки Java.Поэтому если вы можете, вы должны либо обратиться к документации (если у вас есть доступ), либо проверить исходный код, чтобы увидеть, какие условия вызывают его выброс .Если вы не знаете, как это сделать, вы можете добавить часть этой информации в вопрос, и я или кто-то другой можем попытаться оказать вам помощь.

at com.crystaldecisions.reports.formulas.j.a(SourceFile:3528)

Часть в скобках говорит вам, где искатьисточник исключения, SourceFile, вероятно, но не обязательно в строке 3528. Этот номер строки на практике может отличаться, особенно если код, который вы просматриваете, декомпилируется, поэтому, если все не выстраивается в соответствие с ожиданиями, вам может понадобиться поискатьвокруг для точной линии.

К сожалению, без документации или исходного кода вам будет сложно помочь вам в дальнейшем.

0 голосов
/ 26 марта 2019

Это полный код

import com.crystaldecisions.reports.formulas.FormulaFunction;
import com.crystaldecisions.reports.formulas.FormulaFunctionLibrary;



 public class BarcodeLibrary
   implements FormulaFunctionLibrary
 {
   private final FormulaFunction[] functionArray = {new Code39(), new Code39Ascii(), new CodeI2of5(), new Code2of5()
                                                    ,new CodeC128SetA(),new CodeEAN13()};

   public FormulaFunction getFunction(int functionNumber)
   {
     return this.functionArray[functionNumber];
   }

   public int size()
   {
    return this.functionArray.length;
  }
 }

*************************************************************************
import com.crystaldecisions.reports.common.CrystalResourcesFactory;
import com.crystaldecisions.reports.common.value.FormulaValue;
import com.crystaldecisions.reports.common.value.FormulaValueType;
import com.crystaldecisions.reports.common.value.StringValue;
import com.crystaldecisions.reports.formulas.FormulaFunction;
import com.crystaldecisions.reports.formulas.FormulaFunctionArgumentDefinition;
import com.crystaldecisions.reports.formulas.FormulaFunctionCallException;
import com.crystaldecisions.reports.formulas.FormulaValueReference;
import com.crystaldecisions.reports.formulas.SimpleFormulaFunctionArgumentDefinition;

public abstract class CodeEAN13Base
   implements FormulaFunction
 {
   FormulaFunctionArgumentDefinition[] myArguments = { SimpleFormulaFunctionArgumentDefinition.string };

protected CrystalResourcesFactory resCrystal;



  public CodeEAN13Base()
   {
     this.resCrystal = new CrystalResourcesFactory("Messages");

   }


  protected final String doTranslation(String inputData,String opz)

   {
    String returnVal = "";

     returnVal = returnVal + translateCharWrapper(inputData,opz);



    return returnVal;
   }


   @Override
   public final FormulaValue evaluate(FormulaValueReference[] arguments)
     throws FormulaFunctionCallException
  {

       StringValue dataStringArg = (StringValue)arguments[0].getFormulaValue();
       StringValue opzArg =(StringValue)arguments[1].getFormulaValue();

     String dataString = dataStringArg.getString();
     String opz=opzArg.getString();



    String returnVal = doTranslation(dataString,opz);

    return StringValue.fromString(returnVal);
   }

   @Override
   public final FormulaFunctionArgumentDefinition[] getArguments()
  {
     return this.myArguments;
  }

 @Override  
public final FormulaValueType getReturnType()
  {
     return FormulaValueType.string;
   }


   protected abstract String translate(String inputData,String opz)
   throws InvalidBarcodeDataException;

//protected abstract String translateChar(String inputData)
//throws InvalidBarcodeDataException;

 // private String translateCharWrapper(String inputData)
   private String translateCharWrapper(String inputData,String opz)
  {
     String returnString;

     try
    {
        // returnString = translateChar(inputData);
      returnString = translate(inputData,opz);
     } catch (InvalidBarcodeDataException e) {
      returnString = "";
     }

    return returnString;
  }

   @Override
   public void validateArgumentValues(FormulaValueReference[] arguments)
     throws FormulaFunctionCallException
   {}
 }

*************************************************************************
public class CodeEAN13
  extends CodeEAN13Base
{

    protected String opz;



   @Override
   public String getIdentifier()
   {
    return "barcodeean13";
  }



  private static String oddBar(String code) {

        return String.valueOf((char)(65+Integer.parseInt(code)));

    }

  private static String evenBar(String code) {

        return String.valueOf((char)(75+Integer.parseInt(code)));

    }





@Override
protected String translate(String inputData, String opz) throws InvalidBarcodeDataException {
    // TODO Auto-generated method stub
    Integer checkDigitSubtotal;
  String checkDigit;
      String temp = null;
      String code=inputData;
      String azalea_EAN13 = null;
      Object opzM=opz;

      if(!opzM.equals(null)) {
       code=code+opzM;
      }

      //Calculate the EAN-13 check digit.

      checkDigitSubtotal=3*(Integer.parseInt(code.substring(1, 2))+Integer.parseInt(code.substring(3, 4))+Integer.parseInt(code.substring(5, 6))
                           +Integer.parseInt(code.substring(7, 8))+Integer.parseInt(code.substring(9, 10))
                           +Integer.parseInt(code.substring(code.length()-1)));


  checkDigitSubtotal=checkDigitSubtotal+(Integer.parseInt(code.substring(0,1))+Integer.parseInt(code.substring(2, 3))
                                       +Integer.parseInt(code.substring(4, 5))+Integer.parseInt(code.substring(6, 7))
                                       +Integer.parseInt(code.substring(8, 9))+Integer.parseInt(code.substring(10, 11)));

  checkDigit=String.valueOf(300-checkDigitSubtotal);
  checkDigit=checkDigit.substring(checkDigit.length()-1);



 // Begin building the output string with the 1st character's human-readable, L guard bars & odd parity of 1st digit
   temp=(char)(194+Integer.parseInt(code.substring(0,1)))+"x"+oddBar(code.substring(1, 2));  

  // Build the remainder of left half of symbol's parity is based on 1st digit
   switch (code.substring(0,1)) {
   case "0":
      {
         temp=temp+oddBar(code.substring(2, 3));
         temp=temp+oddBar(code.substring(3, 4));
         temp=temp+oddBar(code.substring(4, 5));
         temp=temp+oddBar(code.substring(5, 6));
         temp=temp+oddBar(code.substring(6, 7));         
      }
    break;
   case "1":
      {
          temp=temp+oddBar(code.substring(2, 3)); 
          temp=temp+evenBar(code.substring(3, 4));
          temp=temp+oddBar(code.substring(4, 5));
          temp=temp+evenBar(code.substring(5, 6));
          temp=temp+evenBar(code.substring(6, 7));
      }
      break;
   case "2":
   {
       temp=temp+oddBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));
   }
   break;
   case "3":
   {
       temp=temp+oddBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));
   }
    break;
   case "4":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));

   }
   break;
   case "5":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));

   }
   break;
   case "6":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;
   case "7":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+oddBar(code.substring(5, 6));
       temp=temp+evenBar(code.substring(6, 7));



   }
   break;
   case "8":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+oddBar(code.substring(3, 4));
       temp=temp+evenBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;
   case "9":
   {
       temp=temp+evenBar(code.substring(2, 3));
       temp=temp+evenBar(code.substring(3, 4));
       temp=temp+oddBar(code.substring(4, 5));
       temp=temp+evenBar(code.substring(5, 6));
       temp=temp+oddBar(code.substring(6, 7));

   }
   break;

    default:
   }

////Add the center guard bars & the build right half of symbol using set C (0-9)

    return azalea_EAN13;
   }


 }


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...