Пример #1
0
 public Code128EncoderTests(ITestOutputHelper output)
 {
     _output = output;
     Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
     _encoder = new Code128Encoder(new DefaultMapping(), EncodedCode128Factory.Default,
                                   Encoding.GetEncoding(1252));
 }
Пример #2
0
        public IActionResult GetBarcode(string data)
        {
            _logger.LogInformation("GetBarcode " + data);

            System.IO.File.WriteAllText(Environment.CurrentDirectory + @"/mydata/" + "file_" + DateTime.Now.Ticks + ".txt", data);

            var cachedString = _distributedCache.GetString("TEST");

            if (string.IsNullOrEmpty(cachedString))
            {
                _distributedCache.SetString("TEST", "somevaluetocache");
                _logger.LogInformation("Was not found, ... but now set.");
            }
            else
            {
                _logger.LogInformation("Yeah, ... was found : " + cachedString);
            }

            var barcode  = Code128Encoder.Encode(data, true);
            var renderer = new ImageRenderer();
            var stream   = new MemoryStream();

            renderer.Render(barcode, stream);

            return(File(stream.ToArray(), "image/png"));
        }
Пример #3
0
        public void Encode_EmptyString_ShouldThrowException()
        {
            Action action = () => Code128Encoder.Encode(string.Empty);

            action.Should().Throw <ArgumentException>()
            .And.Message.StartsWith("Content length should be between 1 and 80 but got 0");
        }
Пример #4
0
        public void Encode_ContentTooLong_ShouldThrowException()
        {
            Action action = () => Code128Encoder.Encode("123456789012345678901234567890123456789012345678901234567890123456789012345678901");

            action.Should().Throw <ArgumentException>()
            .And.Message.StartsWith("Content length should be between 1 and 80 but got 81");
        }
Пример #5
0
        public void Interpret_WhenFeedingGeneratedCodes_InterpretsCorrectly()
        {
            var encoder = new Code128Encoder(new DefaultMapping(), EncodedCode128Factory.Default,
                                             Encoding.GetEncoding(1252));
            var success = true;

            var content = TestCaseGenerator.GeneratePermutations(6);
            var sw      = Stopwatch.StartNew();
            var slice   = content.Count / 8;

            Parallel.For(0, 8, i =>
            {
                foreach (var str in content.Skip(i * slice).Take(slice))
                {
                    try
                    {
                        //_output.WriteLine($"Testing {str}");
                        var generated   = encoder.Encode(str);
                        var interpreted = _interpreter.Interpret(generated.ToPatternList());
                        Assert.Equal(str, interpreted);
                    }
                    catch (Exception e)
                    {
                        _output.WriteLine($"FAILED: {str}: {e}");
                        success = false;
                    }
                }
            });
            _output.WriteLine(
                $"{content.Count} tests run in {sw.Elapsed}. {sw.Elapsed.TotalMilliseconds / content.Count}ms per test");

            Assert.True(success, "One or more cases failed.");
        }
Пример #6
0
        public void Interpret_WhenParsingSpecialCase_InterpretsCorrectly(string input)
        {
            var encoder = new Code128Encoder(new DefaultMapping(), EncodedCode128Factory.Default,
                                             Encoding.GetEncoding(1252));
            var generated   = encoder.Encode(input);
            var interpreted = _interpreter.Interpret(generated.ToPatternList());

            Assert.Equal(input, interpreted);
        }
        public IActionResult GetBarcode(string data)
        {
            var barcode  = Code128Encoder.Encode(data, true);
            var renderer = new ImageRenderer();
            var stream   = new MemoryStream();

            renderer.Render(barcode, stream);

            return(File(stream.ToArray(), "image/png"));
        }
Пример #8
0
        public void Render_Barcode1D()
        {
            // Arrange
            var      renderer = new ImageRenderer();
            IBarcode barcode  = Code128Encoder.Encode("Wikipedia");

            // Act
            byte[] data = RenderBarcodeToByteArray(renderer, barcode);

            // Assert
            data.Should().NotBeNull();
        }
Пример #9
0
        public void Render_Barcode1D()
        {
            // Arrange
            var      renderer = new SvgRenderer();
            IBarcode barcode  = Code128Encoder.Encode("Wikipedia");
            string   expected = GetExpectedSvgOutput("Code128.ExpectedSvgOutput.txt");

            // Act
            string svg = RenderBarcodeToString(renderer, barcode);

            // Assert
            svg.Length.Should().BeGreaterOrEqualTo(0);
            svg.Should().Be(expected);
        }
Пример #10
0
        public void Encode_ShouldUseATable()
        {
            bool result;

            bool T(byte currentEncoding, params char[] nextChars)
            => Code128Encoder.ShouldUseATable(nextChars, currentEncoding);

            result = T(0, '\r', 'A');
            result.Should().BeTrue();

            result = T(0, Constants.FNC1, '\r');
            result.Should().BeTrue();

            result = T(0, Constants.FNC1, '1', '2', '3');
            result.Should().BeFalse();
        }
Пример #11
0
        public static byte[] GerarCodBarras128(this string codbar, int?heigthPng = null)
        {
            if (string.IsNullOrWhiteSpace(codbar))
            {
                throw new Exception("Código de barras não informado");
            }

            var bar    = Code128Encoder.Encode(codbar);
            var render = new ImageRenderer(barHeightFor1DBarcode: heigthPng ?? 25);

            using (var ms = new MemoryStream())
            {
                render.Render(bar, ms);
                return(ms.ToArray());
            }
        }
Пример #12
0
                    "1100011101011")] // STOP
        public void Encode(string txt, string testResult)
        {
            IBarcodeIntCS code = Code128Encoder.Encode(txt);

            code.Bounds.X.Should().Be(testResult.Length);
            code.Bounds.Y.Should().Be(1);
            code.Metadata.CodeKind.Should().Be(BarcodeType.Code128);
            code.Metadata.Dimensions.Should().Be(1);

            string encoded = string.Empty;
            int    i       = 0;

            foreach (var r in testResult)
            {
                encoded += code.At(i++, 0) ? "1" : "0";
            }
            encoded.Should().Be(testResult);
        }
        private void GenerateBarcode(string path)
        {
            IBarcodeEncoder enc = new Code128Encoder();

            enc.Text = "123456";

            BarcodeRenderMode mode = BarcodeRenderMode.None;

            mode |= BarcodeRenderMode.Numbered;

            enc.Sizer.Mode = mode;
            enc.Sizer.DPI  = 0;

            IBarcodeGenerator gen = enc.Generator;
            Bitmap            bmp = gen.GenerateBarcode(new Size(68, 40));

            bmp.Save(_path, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
Пример #14
0
        public void Encode_ShouldUseCTable()
        {
            bool result;

            bool T(byte currentEncoding, params char[] nextChars)
            => Code128Encoder.ShouldUseCTable(nextChars, currentEncoding);

            result = T(Constants.StartCSymbol, Constants.FNC1, '1', '2');
            result.Should().BeTrue();

            result = T(Constants.StartCSymbol, Constants.FNC1, '1');
            result.Should().BeFalse();

            result = T(Constants.StartCSymbol, '0', Constants.FNC1, '1');
            result.Should().BeFalse();

            result = T(Constants.StartBSymbol, '0', '1', Constants.FNC1, '2', '3');
            result.Should().BeTrue();

            result = T(Constants.StartBSymbol, '0', '1', Constants.FNC1);
            result.Should().BeFalse();
        }
Пример #15
0
        public string Calculate(string data)
        {
            char currCode = Code128Encoder.ResolveStartCode(data[0]);

            // start character
            int sum = Code128Encoder.SymbolValue(data[0].ToString(), currCode);

            for (int i = 1, pos = 1; i < data.Length; ++i, ++pos)
            {
                string curr  = data[i].ToString();
                int    value = 0;

                if (currCode == Code128Encoder.CodeC && char.IsNumber(data[i]))
                {
                    value = Code128Encoder.SymbolValue(curr + data[++i].ToString(), currCode);
                }
                else
                {
                    value = Code128Encoder.SymbolValue(curr, currCode);
                }

                sum += pos * value;

                // detect change in current code
                switch (data[i])
                {
                case Code128Encoder.CodeA:
                case Code128Encoder.CodeB:
                case Code128Encoder.CodeC:
                    currCode = data[i];
                    break;
                }
            }

            return(Code128Encoder.SymbolString(sum % 103, currCode));
        }
Пример #16
0
        /// <summary>
        /// Encodes an HIBC primary data string.
        /// </summary>
        /// <param name="primary">The primary data string, consisting of the LIC, the PCN, and the unit of measure digit.</param>
        /// <param name="secondary">An optional <see cref="Barcodes.HIBC.SecondaryData"/> object containing secondary data.</param>
        /// <param name="primaryMode">The symbology to use for the primary barcode.  Must be <see cref="Barcodes.HIBC.PrimaryEncodingMode.Code39"/> or <see cref="Barcodes.HIBC.PrimaryEncodingMode.Code128"/>.</param>
        /// <param name="secondaryMode">The symbology to use for the secondary barcode.  May be any <see cref="Barcodes.HIBC.SecondaryEncodingMode"/> value other than <see cref="Barcodes.HIBC.SecondaryEncodingMode.EAN128"/>, however,
        /// if <paramref name="secondary"/> is null, this value must be <see cref="Barcodes.HIBC.SecondaryEncodingMode.None"/>.</param>
        /// <returns>An array of <see cref="Barcodes.IBarcodeEncoder"/> objects, containing one or two pre-set encoders.</returns>
        /// <remarks>This is the same function as <see cref="Barcodes.HIBC.HIBCEncoder.EncodeHIBC(string, SecondaryData, PrimaryEncodingMode, SecondaryEncodingMode)"/>, except
        /// that the primary data (LIC, PCN, and Unit of Measure) is combined into one parameter in the alternate method.</remarks>
        /// <exception cref="System.ArgumentException">There was an error in the primary data.</exception>
        /// <exception cref="System.InvalidOperationException">The <paramref name="primaryMode"/> or <paramref name="secondaryMode"/>
        /// values are invalid for the type of data provided (HIBC vs. GS1).</exception>
        /// <exception cref="System.NullReferenceException">Argument <paramref name="secondary"/> is null and <paramref name="secondaryMode"/> is not <see cref="Barcodes.HIBC.SecondaryEncodingMode.None"/>.</exception>
        public static IBarcodeEncoder[] EncodeHIBC(string primary, SecondaryDataHibc secondary, PrimaryEncodingMode primaryMode, SecondaryEncodingMode secondaryMode)
        {
            if (primaryMode == PrimaryEncodingMode.EAN128 || primaryMode == PrimaryEncodingMode.I2of5)
            {
                throw new InvalidOperationException("The primary mode can only be Code39 or Code128.");
            }
            if (secondaryMode == SecondaryEncodingMode.EAN128)
            {
                throw new InvalidOperationException("The secondary mode can only be Code39, Code128, Combined, or None.");
            }
            if (secondaryMode != SecondaryEncodingMode.None && secondary == null)
            {
                throw new NullReferenceException("The secondary encoding mode is not None and secondary is null.");
            }

            Regex primaryCheck = new Regex("[A-Z][A-Z0-9]{3}[A-Z0-9]{1,13}[0-9]");

            primary = primary.ToUpper();
            if (!primaryCheck.IsMatch(primary))
            {
                throw new ArgumentException("The specified primary data string (LIC+PCN+Unit) is invalid. The proper format is [A-Z][A-Z0-9]{3}[A-Z0-9]{1,13}[0-9].", "primary");
            }

            primary = "+" + primary;
            byte checkSum = CalculateHIBCCheck(primary);

            string secondaryEncoding = "";

            if (secondary != null)
            {
                if (secondary.HIBCShortEncoded != null)
                {
                    secondaryEncoding = secondary.HIBCShortEncoded;
                }
                else
                {
                    secondaryEncoding = secondary.HIBCEncoded;
                }
            }

            if (secondaryMode == SecondaryEncodingMode.Combined)
            {
                primary  = primary + "/" + secondaryEncoding.Substring(1);
                checkSum = CalculateHIBCCheck(primary);
                primary += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"[checkSum];
            }
            else
            {
                char checkChar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"[checkSum];
                primary           += checkChar;
                secondaryEncoding += checkChar;
                checkSum           = CalculateHIBCCheck(secondaryEncoding);
                secondaryEncoding += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"[checkSum];
            }

            IBarcodeEncoder primaryEncoder, secondaryEncoder;

            if (primaryMode == PrimaryEncodingMode.Code39)
            {
                primaryEncoder      = new Code39Encoder();
                primaryEncoder.Text = primary;
                ((Code39Generator)primaryEncoder.Generator).Text = "*" + primary.Replace(' ', '_') + "*";
            }
            else    //Code 128
            {
                primaryEncoder      = new Code128Encoder();
                primaryEncoder.Text = primary;
                ((Code128Generator)primaryEncoder.Generator).Text = "*" + primary.Replace(' ', '_') + "*";
            }

            if (secondaryMode == SecondaryEncodingMode.Combined || secondaryMode == SecondaryEncodingMode.None)
            {
                return new IBarcodeEncoder[] { primaryEncoder }
            }
            ;

            if (secondaryMode == SecondaryEncodingMode.Code39)
            {
                secondaryEncoder = new Code39Encoder();

                secondaryEncoder.Text = secondaryEncoding;
                ((Code39Generator)secondaryEncoder.Generator).Text = "*" + secondaryEncoding.Replace(' ', '_') + "*";
            }
            else
            {
                secondaryEncoder      = new Code128Encoder();
                secondaryEncoder.Text = secondaryEncoding;
                ((Code128Generator)secondaryEncoder.Generator).Text = "*" + secondaryEncoding.Replace(' ', '_') + "*";
            }

            return(new IBarcodeEncoder[] { primaryEncoder, secondaryEncoder });
        }
Пример #17
0
        public void Encode_WhenUsingEscPosSetup_CanEncodeExample()
        {
            var code = new Code128Encoder(new EscPosMapping(), EncodedCode128Factory.EscPos).Encode("No. 123456");

            Assert.Equal(new byte[] { 123, 66, 78, 111, 46, 32, 123, 67, 12, 34, 56 }, code.FullData);
        }