저는 사용자가 텍스트를 입력으로 입력 한 다음 코드 128 글꼴로 동일한 텍스트를 표시하여 바코드 입력을 확인하는 프로그램을 만들고 있습니다.JavaFX TextFlow에서 Code 128이 올바르게 표시되지 않는 이유는 무엇입니까?
이미 설치 코드 128 및 코드 (39)는/usr/share/글꼴/트루 아래/
두 글꼴이 제대로 설치해야 위치하고 있기 때문에 리브레 오피스 라이터에서 모두 작동합니다. 그러나 JavaFx 응용 프로그램에는 코드 39 만 올바르게 표시됩니다. 내가 잘 작동 모든게 좋을 꺼 "코드 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이 아닌 이유
나도 몰라 올바르게 표시됩니다.
편집 : 좋아, 이제 코드 39 텍스트 앞뒤에 별표를 추가하려고했는데이 경우 모든 것이 작동합니다. 내 스마트 폰의 바코드 스캐너 앱으로 테스트 해보니 결과는 옳았습니다. 내가 GitHub의에서 발견 체크섬 메이커 내 코드를 강화 코드 128의 경우
: 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
그리고 Libre Office에서 동일한 코드 128 글꼴을 사용하고 있습니까? –
내가 생각할 수있는 유일한 것은 글꼴이 100 % 바코드 기호가 아니라는 것입니다. 어떤 이유로 Code 128 글꼴은 ASCII 코드를 사람이 읽을 수있는 문자로 매핑하고 막대 기호를 높은 ASCII로 묻었습니다.개인적으로 유니 코드 또는 높은 ASCII ($ 80- $ FF)가 작동해야하는 바코드 글꼴을 만드는 것은 좋지 않은 디자인 결정이라고 생각하지만 실제로 사람이 읽을 수있는 문자에 대한 기호가 있습니다. 모든 문자를 볼 수 있도록 매핑 소프트웨어에서 글꼴을 가져 왔습니까? –