私は現在、ユーザーがテキストを入力として与え、Code 128フォントで同じテキストを表示して入力をバーコードとして表示するプログラムを作成しています。JavaFX TextFlowでコード128が正しく表示されないのはなぜですか?
私はすでにインストールされ、コード128及びコード39を/ usr/share/fonts/TrueTypeの下/
どちらのフォントが正しくインストールする必要がありますがありますので、リブレオフィスライターの両方の仕事。ただし、JavaFxアプリケーションでコード39のみが正しく表示されます。
私のコードです:私は正常に動作しeverthing "コード39" と "コード128" を交換する場合
package sample;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
public class CreateBarcodeStage extends Stage {
VBox vbox;
TextField textFieldInput;
TextFlow textFlowOutput;
public CreateBarcodeStage() {
createUI();
this.setTitle("Create Barcode");
this.setScene(new Scene(vbox));
}
private void createUI() {
vbox = new VBox(10);
textFieldInput = new TextField();
textFieldInput.textProperty().addListener((ObservableValue<? extends String> observableValue, String s, String t1) -> {
String inputText = textFieldInput.getText();
textFlowOutput.getChildren().clear();
Text textReadable = new Text();
textReadable.setFont(Font.font("Verdana", 20));
textReadable.setText(inputText + "\n\n");
Text textBarcode = new Text();
textBarcode.setFont(Font.font("Code 128", 40));
textBarcode.setText(inputText);
textFlowOutput.getChildren().addAll(textReadable, textBarcode);
});
textFlowOutput = new TextFlow();
textFlowOutput.setPadding(new Insets(15));
textFlowOutput.setPrefWidth(200);
textFlowOutput.setPrefHeight(150);
vbox.getChildren().addAll(textFieldInput, textFlowOutput);
}
}
。
これはコード39で出力されます。
そしてここでは、コード128で出力されます。
コード128がない理由を私は知りません正しく表示されます。
EDIT: これでコード39の前後にアスタリスクを追加しようとしましたが、この場合はすべて動作します。私はスマートフォンのバーコードスキャナアプリでそれをテストしたところ、結果は正しかった。コード128の場合
私はgithubの上で見つかったチェックサムメーカーとの私のコードを強化: github Code 128 barcode generator
今、私のコードは次のようになります。
package sample;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
public class CreateBarcodeStage extends Stage {
VBox vbox;
TextField textFieldInput;
TextFlow textFlowOutput;
public CreateBarcodeStage() {
createUI();
this.setTitle("Create Barcode");
this.setScene(new Scene(vbox));
}
private void createUI() {
vbox = new VBox(10);
textFieldInput = new TextField();
textFieldInput.textProperty().addListener((ObservableValue<? extends String> observableValue, String s, String t1) -> {
String inputText = textFieldInput.getText();
textFlowOutput.getChildren().clear();
Text textReadable = new Text();
textReadable.setFont(Font.font("Verdana", 20));
textReadable.setText(inputText + "\n\n");
Text textBarcode = new Text();
textBarcode.setFont(Font.font("Code 128", 40));
textBarcode.setText(inputText);
textFlowOutput.getChildren().addAll(textReadable, textBarcode);
});
textFlowOutput = new TextFlow();
textFlowOutput.setPadding(new Insets(15));
textFlowOutput.setPrefWidth(200);
textFlowOutput.setPrefHeight(150);
vbox.getChildren().addAll(textFieldInput, textFlowOutput);
}
private String createCode128(String text) {
return (char) 136 + text + checksum(text) + (char) 138;
}
char checksum(String text) {
int result = 104; // Code 128B start code
for (int i = 0; i < text.length(); i++) {
result += ((int) text.charAt(i) - 32) * (i + 1);
}
return (char) (result % 103 + 32); // Return the character value of the checksum.
}
}
しかし、それはまだ動作しません。 Code 128 with start/stop symbol and checksum
そして、同じコード128フォントをLibre Officeで使用していますか? –
私が考えることができる唯一のことは、フォントが100%バーコードシンボルではないということです。何らかの理由でCode 128フォントは、ASCIIコードを人間が読める文字にマッピングしています。バー記号はハイASCIIに埋め込んでいます。個人的には、ユニコードや高ASCII($ 80- $ FF)が動作するようにするバーコードフォントを作成するのは設計上の意思決定ではないと思いますが、実際には人間が読める文字のシンボルがあります。すべての文字を見ることができるように、フォントをマッピングソフトウェアに持ってきましたか? –