[英]How to store and generate a pdf from text fields using javafx
我創建了一個表單,用戶在其中填寫字段(姓名,名字,數字,date1,date2,然后在3個命題之間進行選擇:男人,女人,孩子)。 我希望我可以存儲用戶答案(將它們放入數據庫中)並將其合並到pdf文件中。
但是我無法為pdf執行任何功能,該怎么做? 您有什么建議或例子嗎? 我是否應該生成一個pdf模板,然后才能由用戶回答? 我試圖用'itextpdf'做點什么,但沒有成功,是另一種策略嗎?
幫我!
這是我的代碼:
資料檔案
public class Data {
private String name;
private String surname;
private Integer numb;
private String date1;
private String date2;
public Patient(String name, String surname, Integer numb, String date1, String date2) {
super();
this.name = name;
this.surname = surname;
this.numb = numb;
this.date1 = date1;
this.date2 = date2;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
public Integer getNumb() {
return numb;
}
public String getDate1() {
return date1;
}
public String getDate2() {
return date2;
}
}
dataManager文件
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import main;
import models.data;
public class DataManager {
private Main main;
public DataManager(Main main) {
super();
this.main = main;
}
public void addData(data p) {
String query = "INSERT INTO Data(name, surname, numb, date1, date2) VALUES ("
+ "\"" + p.getName() + "\", "
+ "\"" + p.getSurname() + "\", "
+ "\"" + p.getNumb() + "\", "
+ "\"" + p.getDate1() + "\", "
+ "\"" + p.getDate2() + "\");";
try {
this.main.getDatabase().connect();
this.main.getDatabase().updateValue(query);
}
catch (Exception e) {
e.printStackTrace();
}
finally {
this.main.getDatabase().disconnect();
}
}
public ArrayList<Data> getData() {
ArrayList<Data> data = new ArrayList<Data>();
String query = "SELECT name, surname, numb, Date1, Date2 FROM Data ORDER BY name";
try {
this.main.getDatabase().connect();
ResultSet rslt = this.main.getDatabase().getResultOf(query.toString());
while (rslt.next()) {
data.add(new Data(rslt.getString("name"), rslt.getString("surname"), rslt.getInt("numb"),rslt.getString("Date1"),rslt.getString("Date2")));
}
rslt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
this.main.getDatabase().disconnect();
}
return data;
}
文件選項
public class Options {
public enum Ref {
man("man"),
woman("woman"),
child("child");
private final String refName;
Ref(String goalName){
this.refName = goalName;
}
@Override
public String toString() {
return refName;
}
}
private Ref ref;
public Ref getRef() {
return ref;
}
}
FormController文件
import Main;
import models.options;
public class FormController{
Map<String,Ref> refsMap = new HashMap<String,Ref>();
private Main main;
private JFrame frame;
TextArea ta = new TextArea();
public void setMain(Main main) {
this.main = main;
}
@FXML
private TextField tfCharName;
@FXML
private TextField tfCharSurname;
@FXML
private TextField tfNum;
@FXML
private TextField tfDate1;
@FXML
private TextField tfDate2;
@FXML
private ChoiceBox<String> cbGoal;
@FXML
private Button bChoose;
@FXML
private Button bFinish;
@FXML
private String eFinish;
@FXML public void initialize(){
Ref[] refs = Ref.values();
for (Ref ref : refs) {
refsMap.put(ref.toString(), ref);
}
cbGoal.setItems(FXCollections.observableArrayList(refsMap.keySet()));
}
@FXML
public void handleButtonAction(ActionEvent event) throws IOException{
Button pressedButton = (Button) event.getSource();
if(pressedButton==bChoose){
FileChooser fileChooser = new FileChooser();
File selectedFile = fileChooser.showOpenDialog(null);
if (selectedFile != null) {
try {
ta.setText(new String(Files.readAllBytes(selectedFile.toPath())));
} catch (IOException ex) {}
}
}
else if(pressedButton==bFinish){
//fields
String name = tfCharName.getText().trim();
String surname = tfCharSurname.getText().trim();
String numb = tfNum.toString().trim();
String date1 = tfDate1.getText().trim();
String date2 = tfDate2.getText().trim();
// AddToReport field = new AddToReport (name+" "+surname+" "+number+" "+date1+" "+date2);
// AddToReport field = new AddToReport ();
// this.dataManager.updateData(new Data(this.name, surname, number, date1, date2));
// Button pressedButton = (Button) event.getSource();
Stage mainStage = (Stage) pressedButton.getScene().getWindow();
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("../view/following.fxml"));
AnchorPane page = (AnchorPane) loader.load();
Stage dialogStage = new Stage();
dialogStage.setTitle("suite");
dialogStage.initModality(Modality.WINDOW_MODAL);
Window primaryStage = null;
dialogStage.initOwner(primaryStage);
Scene scene = new Scene(page);
dialogStage.setScene(scene);
dialogStage.show();
}
}
}
form.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.chart.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.Slider?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox alignment="TOP_CENTER" prefHeight="550.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="view.FormController">
<children>
<Label alignment="CENTER" contentDisplay="CENTER" text="New analysis" textAlignment="CENTER" underline="true">
<font>
<Font size="29.0" />
</font>
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</Label>
<ScrollPane>
<content>
<VBox alignment="BOTTOM_CENTER">
<children>
<HBox fillHeight="false" VBox.vgrow="ALWAYS">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<children>
<Label text="Enter patient name and surname" />
<TextField fx:id="tfCharSurname" promptText="Name">
<HBox.margin>
<Insets left="5.0" right="5.0" />
</HBox.margin>
</TextField>
<TextField fx:id="tfCharSurname" promptText="Surname" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
<HBox fillHeight="false" VBox.vgrow="ALWAYS">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<Label text="number" />
<TextField fx:id="tfNum" promptText="number">
<HBox.margin>
<Insets left="5.0" right="5.0" />
</HBox.margin>
</TextField>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
<HBox fillHeight="false" VBox.vgrow="ALWAYS">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<Label text="date1" />
<TextField fx:id="tfDate1" promptText="date1">
<HBox.margin>
<Insets left="5.0" right="5.0" />
</HBox.margin>
</TextField>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
<HBox fillHeight="false" VBox.vgrow="ALWAYS">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<Label text="date2" />
<TextField fx:id="tfDate2" promptText="date2">
<HBox.margin>
<Insets left="5.0" right="5.0" />
</HBox.margin>
</TextField>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
<HBox fillHeight="false" VBox.vgrow="ALWAYS">
<children>
<Label text="Choisir">
<HBox.margin>
<Insets right="10.0" />
</HBox.margin>
</Label>
<ChoiceBox fx:id="cbGoal" prefWidth="150.0" />
</children>
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
<HBox fillHeight="false" VBox.vgrow="ALWAYS">
<children>
<Label text="Choose input file">
<HBox.margin>
<Insets right="10.0" />
</HBox.margin>
</Label>
<Button fx:id="bChoose" alignment="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" text="choose">
</Button>
</children>
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</content>
</ScrollPane>
<Button fx:id="bFinish" alignment="CENTER" mnemonicParsing="false" onAction="#handleButtonAction" text="suite">
<VBox.margin>
<Insets top="10.0" />
</VBox.margin>
</Button>
<Label fx:id="eFinish" alignment="CENTER" textFill="#ee0404">
<VBox.margin>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</Label>
</children>
</VBox>
您可以使用itext工具生成pdf。 您應該對此充滿信心。 有很多關於在Java編程中使用itext pdf工具的示例。
您已經有要以pdf格式顯示的數據,只需創建一個名為GeneratePdf的類並使用它即可。 您只需要將數據提供給itext段落,表,單元格即可。
這里的例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.