iTextSharp.text.pdf.BarcodeEAN.PlaceBarcode C# (CSharp) Метод

PlaceBarcode() публичный Метод

public PlaceBarcode ( PdfContentByte cb, System.Color barColor, System.Color textColor ) : Rectangle
cb PdfContentByte
barColor System.Color
textColor System.Color
Результат Rectangle
        public override Rectangle PlaceBarcode(PdfContentByte cb, Color barColor, Color textColor) {
            Rectangle rect = this.BarcodeSize;
            float barStartX = 0;
            float barStartY = 0;
            float textStartY = 0;
            if (font != null) {
                if (baseline <= 0)
                    textStartY = barHeight - baseline;
                else {
                    textStartY = -font.GetFontDescriptor(BaseFont.DESCENT, size);
                    barStartY = textStartY + baseline;
                }
            }
            switch (codeType) {
                case EAN13:
                case UPCA:
                case UPCE:
                    if (font != null)
                        barStartX += font.GetWidthPoint(code[0], size);
                    break;
            }
            byte[] bars = null;
            int[] guard = GUARD_EMPTY;
            switch (codeType) {
                case EAN13:
                    bars = GetBarsEAN13(code);
                    guard = GUARD_EAN13;
                    break;
                case EAN8:
                    bars = GetBarsEAN8(code);
                    guard = GUARD_EAN8;
                    break;
                case UPCA:
                    bars = GetBarsEAN13("0" + code);
                    guard = GUARD_UPCA;
                    break;
                case UPCE:
                    bars = GetBarsUPCE(code);
                    guard = GUARD_UPCE;
                    break;
                case SUPP2:
                    bars = GetBarsSupplemental2(code);
                    break;
                case SUPP5:
                    bars = GetBarsSupplemental5(code);
                    break;
            }
            float keepBarX = barStartX;
            bool print = true;
            float gd = 0;
            if (font != null && baseline > 0 && guardBars) {
                gd = baseline / 2;
            }
            if (barColor != null)
                cb.SetColorFill(barColor);
            for (int k = 0; k < bars.Length; ++k) {
                float w = bars[k] * x;
                if (print) {
                    if (Array.BinarySearch(guard, k) >= 0)
                        cb.Rectangle(barStartX, barStartY - gd, w - inkSpreading, barHeight + gd);
                    else
                        cb.Rectangle(barStartX, barStartY, w - inkSpreading, barHeight);
                }
                print = !print;
                barStartX += w;
            }
            cb.Fill();
            if (font != null) {
                if (textColor != null)
                    cb.SetColorFill(textColor);
                cb.BeginText();
                cb.SetFontAndSize(font, size);
                switch (codeType) {
                    case EAN13:
                        cb.SetTextMatrix(0, textStartY);
                        cb.ShowText(code.Substring(0, 1));
                        for (int k = 1; k < 13; ++k) {
                            string c = code.Substring(k, 1);
                            float len = font.GetWidthPoint(c, size);
                            float pX = keepBarX + TEXTPOS_EAN13[k - 1] * x - len / 2;
                            cb.SetTextMatrix(pX, textStartY);
                            cb.ShowText(c);
                        }
                        break;
                    case EAN8:
                        for (int k = 0; k < 8; ++k) {
                            string c = code.Substring(k, 1);
                            float len = font.GetWidthPoint(c, size);
                            float pX = TEXTPOS_EAN8[k] * x - len / 2;
                            cb.SetTextMatrix(pX, textStartY);
                            cb.ShowText(c);
                        }
                        break;
                    case UPCA:
                        cb.SetTextMatrix(0, textStartY);
                        cb.ShowText(code.Substring(0, 1));
                        for (int k = 1; k < 11; ++k) {
                            string c = code.Substring(k, 1);
                            float len = font.GetWidthPoint(c, size);
                            float pX = keepBarX + TEXTPOS_EAN13[k] * x - len / 2;
                            cb.SetTextMatrix(pX, textStartY);
                            cb.ShowText(c);
                        }
                        cb.SetTextMatrix(keepBarX + x * (11 + 12 * 7), textStartY);
                        cb.ShowText(code.Substring(11, 1));
                        break;
                    case UPCE:
                        cb.SetTextMatrix(0, textStartY);
                        cb.ShowText(code.Substring(0, 1));
                        for (int k = 1; k < 7; ++k) {
                            string c = code.Substring(k, 1);
                            float len = font.GetWidthPoint(c, size);
                            float pX = keepBarX + TEXTPOS_EAN13[k - 1] * x - len / 2;
                            cb.SetTextMatrix(pX, textStartY);
                            cb.ShowText(c);
                        }
                        cb.SetTextMatrix(keepBarX + x * (9 + 6 * 7), textStartY);
                        cb.ShowText(code.Substring(7, 1));
                        break;
                    case SUPP2:
                    case SUPP5:
                        for (int k = 0; k < code.Length; ++k) {
                            string c = code.Substring(k, 1);
                            float len = font.GetWidthPoint(c, size);
                            float pX = (7.5f + (9 * k)) * x - len / 2;
                            cb.SetTextMatrix(pX, textStartY);
                            cb.ShowText(c);
                        }
                        break;
                }
                cb.EndText();
            }
            return rect;
        }