簡體   English   中英

如何使用javafx從文本字段存儲和生成pdf

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM