3

GS1-DataMatrix コード (スーパーマーケットのものなど) を読み取ることができるハンドヘルド スキャナーを持っています。Notepad++ でコードをスキャンでき、FNC1 文字が送信されていることがわかります (2210 より前のGS、HEX の 1D - 最初の画像)。

今、Java から同じ GS1 コードを読み込もうとしていますが、うまくいきません。FNC1 は Java から見えません。Java では、「01095011010209171719050810ABCD12342110」しか表示されません。文字列を HEX に変換しましたが、結果は同じで、FNC1 も HEX ではありません (2 番目の画像)。

これはテストコードです:

package gs1.datamatrix;

import java.awt.Font;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

public class GS1DataMatrix {
    public static void main(String[] args) {
        JFrame f=new JFrame();//creating instance of JFrame  
        Font font = new Font("Courier New", Font.PLAIN, 16);

        JTextArea jtf2 = new JTextArea(); // used to hold the HEX data
        jtf2.setBounds(10,250,900, 200);
        jtf2.setFont( font.deriveFont( 24.0f) );
        jtf2.setLineWrap(true);
        f.add(jtf2);//adding button in JFrame  

        JTextArea jtf1 = new JTextArea(); // scan area for the DataMatrix scanner
        jtf1.setBounds(10,10,900, 200);
        jtf1.setFont( font.deriveFont( 24.0f) );
        jtf1.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {                update(e);            }
            @Override
            public void removeUpdate(DocumentEvent e) {                update(e);            }
            @Override
            public void changedUpdate(DocumentEvent e) {                update(e);            }
            public void update(DocumentEvent e) {
                try {
                    Document doc = (Document)e.getDocument();
                    String hex = String.format("%040x", new BigInteger(1, doc.getText(0, doc.getLength()).getBytes("UTF8"))); // transform to HEX
                    jtf2.setText(java.util.Arrays.toString(hex.split("(?<=\\G..)"))); // split hex data by 2 characters
                    jtf1.selectAll();
                } catch (Exception ex) {
                    Logger.getLogger(GS1DataMatrix.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
        f.add(jtf1);//adding button in JFrame  

        f.setSize(1000,500);
        f.setLayout(null);
        f.setVisible(true);
    }
}

最初の画像: これは Notepad++ が FNC1 (黒い背景にGS特殊文字) を読み取る方法です。

n++

2 番目の画像: これは Java の結果です: ここに画像の説明を入力

3 番目の画像: スキャンごとに FNC1 を HEX で 1D として表示する Notepad++ の 16 進ダンプ:

ここに画像の説明を入力

後で編集する と、元の投稿によって混乱が生じたと思います。画像を解析しません。スキャナーにはこれを行うハードウェアが組み込まれており、テキストといくつかの特殊文字 (FNC1) のみを受け取ります。

4

1 に答える 1