JavaScript无法识别所需输出的反斜杠

时间:2014-01-16 16:57:52

标签: javascript barcode code39

我这里有一个JS程序,使用显示HTML和CSS生成Code39条形码,以显示白线和黑线。 JS文件很好,但我需要这段代码来生成反斜杠的条形码的一部分。问题是,常规Code39都包含在脚本的数组和函数中,但扩展Code39不是,而且这是包含反斜杠的部分。 (我想要实现的最终结果是输入文档的服务器路径并将其显示在条形码中。)

这可能有助于解释Code39:http://en.wikipedia.org/wiki/Code_39

好的,这就是我所做的:在barcode.html文件中,在第19行之后,我输入了一个反斜杠。无论在此输入什么,都会在两个星号之间的条形码下显示,并且条形码将与加载页面时的下面的数字重合。 (我现在的反斜杠附有所有黑色的虚拟图案)。在code39.js文件中,在第357行和第358行,我添加了反斜杠和其他字符(当然使用两个反斜杠)。我也在399和408行的下面添加了相同的数组,但我仍然无法让JS识别反斜杠,它只是在条形码上吐出“0”,这是我得到的结果输入的值未在脚本中指定。任何和所有的帮助表示赞赏!

barcode.html文件:

<!DOCTYPE html PUBLIC>
<html>
<head>
    <title>Barcode</title>
    <script type="text/javascript" src="code39.js"></script>
    <style type="text/css">
    #barcode {font-weight: normal; font-style: normal; line-height:normal; sans-serif; font-size: 12pt}
    </style>
</head>
<body>

Input : 123456<br/>
Barcode : Code39<br/>
Check Digit : 1 (On)<br/><br/>

Output : <br/><br/>

<div id="externalbox" style="width:5in">
<div id="inputdata" >\</div>
</div>

<br />

<script type="text/javascript">
/* <![CDATA[ */
  function get_object(id) {
   var object = null;
   if (document.layers) {
    object = document.layers[id];
   } else if (document.all) {
    object = document.all[id];
   } else if (document.getElementById) {
    object = document.getElementById(id);
   }
   return object;
  }
get_object("inputdata").innerHTML=DrawCode39Barcode(get_object("inputdata").innerHTML,1);
/* ]]> */
</script>

</body>
</html>

code39.js脚本文件:

/*
 * Code39 barcode
 */

        function DrawCode39Barcode(data,
                           checkDigit)
        {
            return DrawHTMLBarcode_Code39(data,checkDigit,"yes","in", 0,3,1,3,"bottom","center", "","black","white"); 
        }

        function DrawHTMLBarcode_Code39(data,
                            checkDigit,
                            humanReadable,
                            units,
                            minBarWidth,
                            width,height,
                            barWidthRatio,
                            textLocation,
                            textAlignment,
                            textStyle,
                            foreColor,
                            backColor)
        {
            return DrawBarcode_Code39(data,
                         checkDigit,
                         humanReadable,
                         units,
                         minBarWidth,
                         width,height,
                         barWidthRatio,
                         textLocation,
                         textAlignment,
                         textStyle,
                         foreColor,
                         backColor,
                         "html");
        }

            function DrawBarcode_Code39(data,
                            checkDigit,
                            humanReadable,
                            units,
                            minBarWidth,
                            width,height,
                            barWidthRatio,
                            textLocation,
                            textAlignment,
                            textStyle,
                            foreColor,
                            backColor,
                            mode)
        {

              if (foreColor==undefined)
                foreColor="black";
              if (backColor==undefined)
                backColor="white";

              if (textLocation==undefined)
                textLocation="bottom";
              else if (textLocation!="bottom" && textLocation!="top")
                textLocation="bottom";
              if (textAlignment==undefined)
                textAlignment="center";
              else if (textAlignment!="center" && textAlignment!="left" && textAlignment!="right")
                textAlignment="center";
              if (textStyle==undefined)
                textStyle="";
              if (barWidthRatio==undefined)
                barWidthRatio=3;              
              if (height==undefined)
                height=1;
              else if (height<=0 || height >15)
                height=1;
              if (width==undefined)
                width=3;
              else if (width<=0 || width >15)
                width=3;
              if (minBarWidth==undefined)
                  minBarWidth=0;
              else if (minBarWidth<0 || minBarWidth >2)
                  minBarWidth=0;
              if (units==undefined)
                units="in";
              else if (units!="in" && units !="cm")
                units="in";
              if (humanReadable==undefined)
                humanReadable="yes";
              else if (humanReadable!="yes" && humanReadable !="no")
                humanReadable="yes";

              var encodedData=EncodeCode39(data,checkDigit);    
                    var humanReadableText = ConnectCode_Encode_Code39(data,checkDigit);
                var encodedLength = 0;
                    var thinLength = 0;
                    var thickLength = 0.0;
                    var totalLength = 0.0;
                    var incrementWidth = 0.0;
                    var swing = 1;
              var result="";
              var barWidth=0;
              var thickWidth=0.0;
              var svg;
                    if (barWidthRatio >= 2 && barWidthRatio <= 3)
                    {
                    }
                    else
                        barWidthRatio = 3;

                    for (x = 0; x < encodedData.length; x++)
                    {
                        if (encodedData.substr(x,1) == 't')
                        {
                            thinLength++;
                            encodedLength++;
                        }
                        else if (encodedData.substr(x,1) == 'w')
                        {
                            thickLength = thickLength + barWidthRatio;
                            encodedLength = encodedLength + 3;
                        }
                    }
                    totalLength = totalLength + thinLength + thickLength;

                    if (minBarWidth > 0)
                    {
                        barWidth = minBarWidth.toFixed(2);
                        width=barWidth * totalLength;
                    }
                    else
                        barWidth = (width / totalLength).toFixed(2);

                    thickWidth = barWidth * 3;
                    if (barWidthRatio >= 2 && barWidthRatio <= 3.0)
                    {
                        thickWidth = barWidth * barWidthRatio;
                    }

              if (mode=="html")
              {
                  if (textAlignment=='center')
                      result='<div style="text-align:center">';
                  else if (textAlignment=='left')
                      result='<div style="text-align:left;">';
                  else if (textAlignment=='right')
                      result='<div style="text-align:right;">';

                  var humanSpan="";
                  if (humanReadable=='yes' && textLocation=='top')
                  {
                    if (textStyle=='')
                        humanSpan='<span style="font-family : arial; font-size:12pt">'+humanReadableText+'</span><br />';
                    else
                        humanSpan='<span style='+textStyle+'>'+humanReadableText+'</span><br />';
                  }
                  result=result+humanSpan;
              }

                    for (x = 0; x < encodedData.length; x++)
                    {
                        var brush;
                        if (swing == 0)
                            brush = backColor;
                        else
                            brush = foreColor;

                        if (encodedData.substr(x,1) == 't')
                        {
                  if (mode=="html")
                    result=result
                         +'<span style="border-left:'
                         +barWidth
                         +units
                         +' solid ' 
                         +brush
                         +';height:'
                         +height
                         +units+';display:inline-block;"></span>';
                    incrementWidth = incrementWidth + barWidth;
                }
                        else if (encodedData.substr(x,1) == 'w')
                        {
                  if (mode=="html")
                    result=result
                         +'<span style="border-left :'
                         +thickWidth
                         +units+' solid ' 
                         +brush
                         +';height:'
                         +height
                         +units+';display:inline-block;"></span>';
                        incrementWidth = incrementWidth + thickWidth;
                }

                        if (swing == 0)
                            swing = 1;
                        else
                            swing = 0;
                    }

              if (mode=="html")
              {
                  var humanSpan="";
                  if (humanReadable=='yes' && textLocation=='bottom')
                  {
                    if (textStyle=='')
                        humanSpan='<br /><span style="font-family : arial; font-size:12pt">'+humanReadableText+'</span>';
                    else
                        humanSpan='<br /><span style='+textStyle+'>'+humanReadableText+'</span>';
                  }
                  result=result+humanSpan+"</div>";
              }
              return result;    
        }

            function EncodeCode39(data,checkDigit)
            {
                var fontOutput = ConnectCode_Encode_Code39(data,checkDigit);
                var output = "";
                var pattern = "";
                for (x = 0; x < fontOutput.length; x++)
                {
                    switch (fontOutput.substr(x,1))
                    {
                        case '1':
                            pattern = "wttwttttwt";
                            break;
                        case '2':
                            pattern = "ttwwttttwt";
                            break;
                        case '3':
                            pattern = "wtwwtttttt";
                            break;
                        case '4':
                            pattern = "tttwwtttwt";
                            break;
                        case '5':
                            pattern = "wttwwttttt";
                            break;
                        case '6':
                            pattern = "ttwwwttttt";
                            break;
                        case '7':
                            pattern = "tttwttwtwt";
                            break;
                        case '8':
                            pattern = "wttwttwttt";
                            break;
                        case '9':
                            pattern = "ttwwttwttt";
                            break;
                        case '0':
                            pattern = "tttwwtwttt";
                            break;
                        case 'A':
                            pattern = "wttttwttwt";
                            break;
                        case 'B':
                            pattern = "ttwttwttwt";
                            break;
                        case 'C':
                            pattern = "wtwttwtttt";
                            break;
                        case 'D':
                            pattern = "ttttwwttwt";
                            break;
                        case 'E':
                            pattern = "wtttwwtttt";
                            break;
                        case 'F':
                            pattern = "ttwtwwtttt";
                            break;
                        case 'G':
                            pattern = "tttttwwtwt";
                            break;
                        case 'H':
                            pattern = "wttttwwttt";
                            break;
                        case 'I':
                            pattern = "ttwttwwttt";
                            break;
                        case 'J':
                            pattern = "ttttwwwttt";
                            break;
                        case 'K':
                            pattern = "wttttttwwt";
                            break;
                        case 'L':
                            pattern = "ttwttttwwt";
                            break;
                        case 'M':
                            pattern = "wtwttttwtt";
                            break;
                        case 'N':
                            pattern = "ttttwttwwt";
                            break;
                        case 'O':
                            pattern = "wtttwttwtt";
                            break;
                        case 'P':
                            pattern = "ttwtwttwtt";
                            break;
                        case 'Q':
                            pattern = "ttttttwwwt";
                            break;
                        case 'R':
                            pattern = "wtttttwwtt";
                            break;
                        case 'S':
                            pattern = "ttwtttwwtt";
                            break;
                        case 'T':
                            pattern = "ttttwtwwtt";
                            break;
                        case 'U':
                            pattern = "wwttttttwt";
                            break;
                        case 'V':
                            pattern = "twwtttttwt";
                            break;
                        case 'W':
                            pattern = "wwwttttttt";
                            break;
                        case 'X':
                            pattern = "twttwtttwt";
                            break;
                        case 'Y':
                            pattern = "wwttwttttt";
                            break;
                        case 'Z':
                            pattern = "twwtwttttt";
                            break;
                        case '-':
                            pattern = "twttttwtwt";
                            break;
                        case '.':
                            pattern = "wwttttwttt";
                            break;
                        case ' ':
                            pattern = "twwtttwttt";
                            break;
                        case '*':
                            pattern = "twttwtwttt";
                            break;
                        case '$':
                            pattern = "twtwtwtttt";
                            break;
                        case '/':
                            pattern = "twtwtttwtt";
                            break;
                        case '+':
                            pattern = "twtttwtwtt";
                            break;
                        case '%':
                            pattern = "tttwtwtwtt";
                            break;
                        case '\\':
                            pattern = "tttttttttt";
                            break;
                default : break;
                    }
                    output=output+pattern;
                }
                return output;
            }

        function ConnectCode_Encode_Code39(data,checkDigit)
        {
            var Result="";
            var cd="";
            var filtereddata="";
            filtereddata = filterInput(data);
            var filteredlength = filtereddata.length;
            if (checkDigit==1)
            {
                if (filteredlength > 254)
                {
                    filtereddata = filtereddata.substr(0,254);
                }
                cd = generateCheckDigit(filtereddata);
            }
            else
            {
                if (filteredlength > 255)
                {
                    filtereddata = filtereddata.substr(0,255);
                }
            }
            Result = "*" + filtereddata+cd+"*";
              Result=html_decode(html_escape(Result));  
            return Result;
        }

        function getCode39Character(inputdecimal) {
            var CODE39MAP=new Array("0","1","2","3","4","5","6","7","8","9",
                            "A","B","C","D","E","F","G","H","I","J",
                            "K","L","M","N","O","P","Q","R","S","T",
                            "U","V","W","X","Y","Z","-","."," ","$",
                            "/","+","%","\\");
            return CODE39MAP[inputdecimal];
        }

        function getCode39Value(inputchar) {
            var CODE39MAP=new Array("0","1","2","3","4","5","6","7","8","9",
                            "A","B","C","D","E","F","G","H","I","J",
                            "K","L","M","N","O","P","Q","R","S","T",
                            "U","V","W","X","Y","Z","-","."," ","$",
                            "/","+","%","\\");
            var RVal=-1;
            for (i=0;i<43;i++)
            {
                if (inputchar==CODE39MAP[i])
                {
                    RVal=i;
                }
            }
            return RVal;
        }

        function filterInput(data)
        {
            var Result="";
            var datalength=data.length;
            for (x=0;x<datalength;x++)
            {
                if (getCode39Value(data.substr(x,1)) != -1)
                {
                    Result = Result + data.substr(x,1);
                }
            }
            return Result;
        }

        function generateCheckDigit(data)
        {
            var Result="";
            var datalength=data.length;
            var sumValue=0;
            for (x=0;x<datalength;x++)
            {
                sumValue=sumValue+getCode39Value(data.substr(x,1));
            }
            sumValue=sumValue % 43;
            return getCode39Character(sumValue);
        }

        function html_escape(data)
        {
            var Result="";
            for (x=0;x<data.length;x++)
            {
                Result=Result+"&#"+data.charCodeAt(x).toString()+";";
            }
            return Result;
        }

        function html_decode(str) {
            var ta=document.createElement("textarea");
              ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
              return ta.value;
        }

2 个答案:

答案 0 :(得分:2)

您的问题出在getCode39Value()函数中。

for (i = 0; i < 43; i++) {

当您在阵列中实际拥有44个对象时,您正在使用for i < 43。您应该使用CODE39MAP.length代替:

function getCode39Value(inputchar) {
    var CODE39MAP = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "-", ".", " ", "$", "/", "+", "%", "\\");
    var RVal = -1;
    for (i = 0; i < CODE39MAP.length; i++) {
        if (inputchar == CODE39MAP[i]) {
            RVal = i;
        }
    }
    return RVal;
}

http://jsfiddle.net/remus/GSFVG/

答案 1 :(得分:1)

getCode39Value因为一个接一个而很糟糕。这种实现也有效:

// moved outsite the function, it's a static map.
var CODE39MAP=new Array("0","1","2","3","4","5","6","7","8","9",
                    "A","B","C","D","E","F","G","H","I","J",
                    "K","L","M","N","O","P","Q","R","S","T",
                    "U","V","W","X","Y","Z","-","."," ","$",
                    "/","+","%","\\");

function getCode39Value(inputchar) {
    return CODE39MAP.indexOf(inputchar);
}
如果找不到,则{p> indexOf已经返回-1