Генерация Штрих Кода В Лотусе

Тема в разделе "Lotus - Программирование", создана пользователем DamirAstana, 16 июл 2014.

  1. DamirAstana

    DamirAstana Member

    Регистрация:
    26 май 2014
    Сообщения:
    9
    Симпатии:
    0
    Всем привет.

    Мне нужно реализовать генерацию штрих-кода, его последующее считывание через сканер и так далее и тому прочее. Пока я хочу спросить у тех кто может знает или уже подобное делал, как сгенерировать штрих код, линейный в формате EAN-13 в лотусе? Возможно ли это?
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    DamirAstana
    Возможно, есть реализация. Нужен шрифт на машине, где будут считывать штрих-коды.
    Выложить?
     
  3. DamirAstana

    DamirAstana Member

    Регистрация:
    26 май 2014
    Сообщения:
    9
    Симпатии:
    0
    Да, было бы круто. Получается нужно будет еще шрифт устанавливать на рабочей станции пользователя который будет генерировать штрих код или еще и тем кто будет считывать при помощи сканера?
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Ну тем кто считывает думаю не обязательно, если они будут считывать с бумаги, если с экрана - да.
    Тем кто будет генерить тоже, если им не интересно как это выглядит.

    Ниже код создания ШК, реализация на LS. можно и на java переписать при необходимости.
    Не помню где его нашел.
    За основу берется UNID документа, сначала думал таким образом ШК почти всегда уникален, но он формируется только из цифр(анализирую по кодам ASCII (48-57)), это важно. Так что теоретически может быть 2 одинаковых ШК.
    Созданный ШК большинство сканеров доллжно читать без дополнительной настройки.
    У нас это так и не используется, заказчик отказался.
    Прикрепил шрифт, который использую сам, вот его я искал очень долго.
    Программно установить шрифт (Windows Only)

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Штрих-код</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
        Dim macro As Variant
    Dim res As String
    Dim k As String
    Dim ac As Integer
    Dim bc As String

    macro = Evaluate({@DocumentUniqueID},meDoc)
    res = macro(0)
    For i=1 To Len(res)
    k = Mid$(res,i,1)
    ac = Asc(k)
    If ac >=48 Then
    If ac <= 57 Then
    bc = bc & k    
    End If
    End If
    Next

    Dim sumA As Integer
    Dim sumB As Integer
    Dim CC As Integer
    SumA = 0
    SumB = 0
    Stop
    bc = Left(bc,12)
    For i =1 To Len(bc)
    If (i Mod 2 = 0 ) Then
    SumA = SumA + Cint(Mid$(bc,i,1)) ' Четное
    Else
    SumB = SumB + Cint(Mid$(bc,i,1))' Нечетное
    End If
    Next

    SumA = SumA*3 + SumB
    SumB = (SumA\10 + 1)*10

    bc = bc & (SumB - SumA)

    Dim barcodeDone As String

    barcodeDone = GetComb(Cint(Left(bc,1)),"")
    barcodeDone = barcodeDone & "!"
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,2,1)),"A")    

    If Cint(Left(bc,1)) < 4 Then
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,3,1)),"A")    
    Else
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,3,1)),"B")    
    End If

    If Cint(Left(bc,1)) = 0 Or Cint(Left(bc,1)) = 4 Or Cint(Left(bc,1)) =7 Or Cint(Left(bc,1)) = 8 Then
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,4,1)),"A")        
    Else
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,4,1)),"B")        
    End If

    If Cint(Left(bc,1)) = 0 Or Cint(Left(bc,1)) = 1 Or Cint(Left(bc,1)) = 4 Or Cint(Left(bc,1)) =5 Or Cint(Left(bc,1)) = 9 Then
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,5,1)),"A")        
    Else
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,5,1)),"B")        
    End If

    If Cint(Left(bc,1)) = 0 Or Cint(Left(bc,1)) = 2 Or Cint(Left(bc,1)) = 5 Or Cint(Left(bc,1)) =6 Or Cint(Left(bc,1)) = 7 Then
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,6,1)),"A")        
    Else
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,6,1)),"B")        
    End If

    If Cint(Left(bc,1)) = 0 Or Cint(Left(bc,1)) = 3 Or Cint(Left(bc,1)) = 6 Or Cint(Left(bc,1)) =8 Or Cint(Left(bc,1)) = 9 Then
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,7,1)),"A")        
    Else
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,7,1)),"B")        
    End If

    barcodeDone = barcodeDone & "-"
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,8,1)),"C")        
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,9,1)),"C")        
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,10,1)),"C")       
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,11,1)),"C")       
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,12,1)),"C")       
    barcodeDone = barcodeDone & GetComb(Cint(Mid$(bc,13,1)),"C")       
    barcodeDone = barcodeDone & "!"

    Call meDoc.replaceItemValue("BarCode",bc)
    Call meDoc.replaceItemValue("BarCodeImageText",barcodeDone)
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Function GetComb</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Function GetComb(Num As Integer, Typ As Variant) As String

    Select Case Typ
    Case "A":
    GetComb="" & num
    Case "B":
    GetComb ="" & Chr((num+65))
    Case "C":
    GetComb ="" & Chr((num+97))
    Case Else:
    GetComb ="" & Chr((num+35))
    End Select

    End Function
     

    Вложения:

    • EanG000.rar
      Размер файла:
      2,9 КБ
      Просмотров:
      10
  5. DamirAstana

    DamirAstana Member

    Регистрация:
    26 май 2014
    Сообщения:
    9
    Симпатии:
    0
    Спасибо огромное! Буду теперь разбираться. Пытаться.
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    С помощью zxing.
     
  7. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Делел на Java. Результат - картинка png
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
  9. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
  10. DamirAstana

    DamirAstana Member

    Регистрация:
    26 май 2014
    Сообщения:
    9
    Симпатии:
    0
    Спасибо, как раз этим и воспользовался.
     
  11. DamirAstana

    DamirAstana Member

    Регистрация:
    26 май 2014
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте. Возникла такая проблема. Barcode4J выгружает очень большую картинку. Да и нужно еще конфигурировать файл XML и выгружать перед тем как воспользоваться библиотекой, нет ли решения чтобы без xml файла? И как сделать чтобы картинка была маленькой по размеру? Кстати использовал еще бибиотеку с сайта onbarcode.com, так там через 10 выгрузок появляется надпись Trial(

    мой конфиг xml
    Код (Text):
    <?xml version="1.0" encoding="UTF-8"?>
    <barcode>
    <code128>
    <module-width>0.4mm</module-width>
    </code128>
    </barcode>
    код на java
    Код (Text):
    DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
    System.out.println(System.getProperty("java.io.tmpdir"));
    try {
    Configuration cfg = builder.buildFromFile(new File("barcode.xml"));
    BarcodeGenerator gen = BarcodeUtil.getInstance().createBarcodeGenerator( cfg );

    OutputStream out = new java.io.FileOutputStream(new File("C://bcode1.png"));
    BitmapCanvasProvider provider = new BitmapCanvasProvider(
    out, "image/x-png", 300, BufferedImage.TYPE_BYTE_GRAY, true, 0);
    gen.generateBarcode(provider, "001-20082014095311-12345");
    provider.finish();

    } catch (Exception ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
    и такая вот картинка

    Добавлено: Кстати, пытался использовать xml тот, который они советуют для code128, но его не принимает конфигуратор для ШК(
    Код (Text):
    <barcode>
    <code128>
    <height>{length:15mm}</height>
    <module-width>{length:0.21mm}</module-width>
    <codesets>{string:ABC}</codesets>
    <quiet-zone enabled="{boolean:true}">{length:10mw}</quiet-zone>
    <human-readable>
    <placement>{human-readable-placement:bottom}</placement>
    <font-name>{font-name:Helvetica}</font-name>
    <font-size>{length:8pt}</font-size>
    </human-readable>
    </code128>
    </barcode>
     
  12. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    У меня работает так:
    Код (Text):
            private String getBarcodeFilename(String value) throws IOException, BarcodeException,
    ConfigurationException {
    BarcodeUtil util = BarcodeUtil.getInstance();
    BarcodeGenerator gen = util.createBarcodeGenerator(getBarcodeConfiguration());
    File f = File.createTempFile("~bar", ".jpg");
    String filename = f.getAbsolutePath();
    OutputStream out = new FileOutputStream(filename);
    int resolution = 300;
    BitmapCanvasProvider canvas = new BitmapCanvasProvider(out, "image/jpeg", resolution,
    BufferedImage.TYPE_BYTE_BINARY, false, 0);
    gen.generateBarcode(canvas, value);
    canvas.finish();
    f.deleteOnExit();
    return filename;
    }

    private Configuration getBarcodeConfiguration() {
    DefaultConfiguration cfg = new DefaultConfiguration("barcode");
    // Bar code type
    DefaultConfiguration child = new DefaultConfiguration("code128");
    cfg.addChild(child);
    // Human readable text position
    DefaultConfiguration attr = new DefaultConfiguration("human-readable");
    DefaultConfiguration subAttr = new DefaultConfiguration("placement");
    subAttr.setValue("bottom");
    attr.addChild(subAttr);
    child.addChild(attr);
    return cfg;
    }
    Как видите, никаких XML файлов. По поводу размера картинки никогда не парился, она у меня при вставке в документ сжимается/растягивается до необходимой ширины/высоты. Сам файл - временный, по завершению формирования документа удаляется. Ручные сканеры мои документы читают без проблем.
     
    2 пользователям это понравилось.
Загрузка...
Похожие Темы - Генерация Штрих Кода
  1. lmike
    Ответов:
    3
    Просмотров:
    634
  2. framd
    Ответов:
    1
    Просмотров:
    783
  3. Kee_Keekkenen
    Ответов:
    1
    Просмотров:
    1.295
  4. keepergf
    Ответов:
    0
    Просмотров:
    1.272
  5. vladis222
    Ответов:
    11
    Просмотров:
    2.556

Поделиться этой страницей