Compare commits

...

3 Commits
beta ... main

Author SHA1 Message Date
Christopher Alessandro Rodriguez Salazar 1890cb2ae7 Cambio de base de datos 2025-03-23 15:12:28 -06:00
luis.aguilar 9571e0988e Agregue escenario y qr dinamico 2025-03-18 19:56:14 -06:00
Christopher Alessandro Rodriguez Salazar cf2ea35e24 Final 1.0 2025-03-17 15:55:17 -06:00
8 changed files with 47 additions and 30 deletions

View File

@ -5,6 +5,7 @@
<option name="originalFiles"> <option name="originalFiles">
<list> <list>
<option value="$PROJECT_DIR$/pom.xml" /> <option value="$PROJECT_DIR$/pom.xml" />
<option value="$PROJECT_DIR$/pom.xml" />
</list> </list>
</option> </option>
</component> </component>

View File

@ -2,5 +2,6 @@
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" /> <mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component> </component>
</project> </project>

View File

@ -58,7 +58,7 @@
<dependency> <dependency>
<groupId>org.apache.pdfbox</groupId> <groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId> <artifactId>pdfbox</artifactId>
<version>2.0.24</version> <version>3.0.3</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -25,9 +25,9 @@ import java.util.List;
public class EscogerEvento { public class EscogerEvento {
// Datos de conexión a la base de datos // Datos de conexión a la base de datos
private static final String DB_URL = "jdbc:mysql://sql10.freesqldatabase.com:3306/sql10766655"; private static final String DB_URL = "jdbc:mysql://localhost:3306/bookticket";
private static final String DB_USER = "sql10766655"; private static final String DB_USER = "root";
private static final String DB_PASSWORD = "7BZbRjEkXZ"; private static final String DB_PASSWORD = "";
// Método para mostrar la ventana de selección de eventos // Método para mostrar la ventana de selección de eventos
public void mostrarVentanaSeleccionEvento(Stage mainStage, VentaBoletos ventaBoletos) { public void mostrarVentanaSeleccionEvento(Stage mainStage, VentaBoletos ventaBoletos) {

View File

@ -1,9 +1,11 @@
package org.example.saladeconciertos; package org.example.saladeconciertos;
import javafx.scene.text.Font;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import java.io.IOException; import java.io.IOException;
@ -20,40 +22,46 @@ public class PDFGenerator {
// Crear una nueva página // Crear una nueva página
PDPage page = new PDPage(); PDPage page = new PDPage();
document.addPage(page); document.addPage(page);
PDType1Font fontbold = new PDType1Font(Standard14Fonts.FontName.HELVETICA_BOLD);
PDType1Font font = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
// Crear un flujo de contenido para la página // Crear un flujo de contenido para la página
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
// Configurar la fuente y el tamaño para el título del evento // Configurar la fuente y el tamaño para el título del evento
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 24); contentStream.setFont(fontbold, 24);
contentStream.beginText(); contentStream.beginText();
contentStream.newLineAtOffset(50, 750); contentStream.newLineAtOffset(50, 750);
contentStream.showText(eventName); contentStream.showText(eventName);
contentStream.endText(); contentStream.endText();
// Configurar la fuente y el tamaño para la fecha del evento // Configurar la fuente y el tamaño para la fecha del evento
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 18); contentStream.setFont(fontbold, 18);
contentStream.beginText(); contentStream.beginText();
contentStream.newLineAtOffset(50, 720); contentStream.newLineAtOffset(50, 720);
contentStream.endText(); contentStream.endText();
// Configurar la fuente y el tamaño para el contenido del reporte // Configurar la fuente y el tamaño para el contenido del reporte
contentStream.setFont(PDType1Font.HELVETICA, 12); contentStream.setFont(font, 12);
contentStream.beginText(); contentStream.beginText();
contentStream.newLineAtOffset(50, 680); float textY = 680;
contentStream.newLineAtOffset(50, textY);
// Dividir el texto en líneas y escribir cada línea por separado // Dividir el texto en líneas y escribir cada línea por separado
String[] lines = ticketDetails.split("\n"); String[] lines = ticketDetails.split("\n");
for (String line : lines) { for (String line : lines) {
contentStream.showText(line); contentStream.showText(line);
textY -= 15;
contentStream.newLineAtOffset(0, -15); // Mover hacia abajo para la siguiente línea contentStream.newLineAtOffset(0, -15); // Mover hacia abajo para la siguiente línea
} }
contentStream.endText(); contentStream.endText();
float imageHeight = 150; // Altura de la imagen
float imageY = textY - 50 - imageHeight; // 50 unidades de margen + altura de la imagen
// Agregar la imagen del código QR (si existe) // Agregar la imagen del código QR (si existe)
if (qrImagePath != null && !qrImagePath.isEmpty()) { if (qrImagePath != null && !qrImagePath.isEmpty()) {
PDImageXObject qrImage = PDImageXObject.createFromFile(qrImagePath, document); PDImageXObject qrImage = PDImageXObject.createFromFile(qrImagePath, document);
contentStream.drawImage(qrImage, 50, 50, 150, 150); // Ajusta la posición y el tamaño de la imagen contentStream.drawImage(qrImage, 50, imageY, 150, 150); // Ajusta la posición y el tamaño de la imagen
} }
} }
@ -76,18 +84,20 @@ public class PDFGenerator {
// Crear una nueva página // Crear una nueva página
PDPage page = new PDPage(); PDPage page = new PDPage();
document.addPage(page); document.addPage(page);
PDType1Font fontbold = new PDType1Font(Standard14Fonts.FontName.HELVETICA_BOLD);
PDType1Font font = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
// Crear un flujo de contenido para la página // Crear un flujo de contenido para la página
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
// Configurar la fuente y el tamaño para el título // Configurar la fuente y el tamaño para el título
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 20); contentStream.setFont(fontbold, 20);
contentStream.beginText(); contentStream.beginText();
contentStream.newLineAtOffset(50, 750); contentStream.newLineAtOffset(50, 750);
contentStream.showText("Ticket de Compra"); contentStream.showText("Ticket de Compra");
contentStream.endText(); contentStream.endText();
// Configurar la fuente y el tamaño para el contenido // Configurar la fuente y el tamaño para el contenido
contentStream.setFont(PDType1Font.HELVETICA, 12); contentStream.setFont(font, 12);
contentStream.beginText(); contentStream.beginText();
contentStream.newLineAtOffset(50, 700); contentStream.newLineAtOffset(50, 700);

View File

@ -14,6 +14,8 @@ import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane; import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.sql.Connection; import java.sql.Connection;
@ -24,9 +26,9 @@ import java.sql.SQLException;
import java.util.*; import java.util.*;
public class VentaBoletos extends Application { public class VentaBoletos extends Application {
private static final String DB_URL = "jdbc:mysql://sql10.freesqldatabase.com:3306/sql10766655"; private static final String DB_URL = "jdbc:mysql://localhost:3306/bookticket";
private static final String DB_USER = "sql10766655"; private static final String DB_USER = "root";
private static final String DB_PASSWORD = "7BZbRjEkXZ"; private static final String DB_PASSWORD = "";
private List<Integer> selectedSeats = new ArrayList<>(); private List<Integer> selectedSeats = new ArrayList<>();
private Map<Integer, Double> seatPrices = new HashMap<>(); private Map<Integer, Double> seatPrices = new HashMap<>();
private String eventName = ""; private String eventName = "";
@ -97,9 +99,9 @@ public class VentaBoletos extends Application {
titleLabel.getStyleClass().add("title"); titleLabel.getStyleClass().add("title");
// Agregar el logo de la aplicación // Agregar el logo de la aplicación
ImageView logo = new ImageView(new Image(getClass().getResourceAsStream("/logo.png"))); ImageView logo = new ImageView(new Image(getClass().getResourceAsStream("/escenario.png")));
logo.setFitWidth(100); logo.setFitWidth(500);
logo.setFitHeight(100); logo.setFitHeight(130);
// Crear y configurar el label de bienvenida // Crear y configurar el label de bienvenida
Label welcomeLabel = new Label("Seleccione sus asientos"); Label welcomeLabel = new Label("Seleccione sus asientos");
@ -120,12 +122,12 @@ public class VentaBoletos extends Application {
int row = (seatNumber - 1) / cols; int row = (seatNumber - 1) / cols;
int col = (seatNumber - 1) % cols; int col = (seatNumber - 1) % cols;
char rowLetter = (char) ('A' + row); char rowLetter = (char) ('A' + row);
String seatLabel = rowLetter + String.valueOf(col + 1); String seatLabel = rowLetter + String.valueOf(col + 1)+"\n$"+seatPrices.get(seatNumber);
Button seatButton = new Button(seatLabel); Button seatButton = new Button(seatLabel);
seatButton.setTextAlignment(TextAlignment.CENTER);
seatButton.getStyleClass().add("seat-button"); seatButton.getStyleClass().add("seat-button");
seatButton.setMinSize(80, 40); // Tamaño mínimo de cada botón seatButton.setMinSize(90, 55); // Tamaño mínimo de cada botón
seatButton.setMaxSize(80, 40); // Tamaño máximo de cada botón seatButton.setMaxSize(90, 55); // Tamaño máximo de cada botón
seatButton.setPadding(new Insets(10)); // Padding dentro de cada botón
int finalSeatNumber = seatNumber; int finalSeatNumber = seatNumber;
if ("vendido".equals(seatStatus.getOrDefault(finalSeatNumber, "disponible"))) { if ("vendido".equals(seatStatus.getOrDefault(finalSeatNumber, "disponible"))) {
@ -186,7 +188,7 @@ public class VentaBoletos extends Application {
borderPane.setCenter(mainLayout); borderPane.setCenter(mainLayout);
Scene mainScene = new Scene(borderPane, 540, 600); Scene mainScene = new Scene(borderPane, 600, 650);
mainScene.getStylesheets().add(getClass().getResource("/styles.css").toExternalForm()); mainScene.getStylesheets().add(getClass().getResource("/styles.css").toExternalForm());
mainStage.setScene(mainScene); mainStage.setScene(mainScene);
mainStage.show(); mainStage.show();
@ -205,12 +207,12 @@ public class VentaBoletos extends Application {
int row = (seatNumber - 1) / cols; int row = (seatNumber - 1) / cols;
int col = (seatNumber - 1) % cols; int col = (seatNumber - 1) % cols;
char rowLetter = (char) ('A' + row); char rowLetter = (char) ('A' + row);
String seatLabel = rowLetter + String.valueOf(col + 1); String seatLabel = rowLetter + String.valueOf(col + 1)+"\n$"+seatPrices.get(seatNumber);
Button seatButton = new Button(seatLabel); Button seatButton = new Button(seatLabel);
seatButton.setTextAlignment(TextAlignment.CENTER);
seatButton.getStyleClass().add("seat-button"); seatButton.getStyleClass().add("seat-button");
seatButton.setMinSize(80, 40); // Tamaño mínimo de cada botón seatButton.setMinSize(90, 55); // Tamaño mínimo de cada botón
seatButton.setMaxSize(80, 40); // Tamaño máximo de cada botón seatButton.setMaxSize(90, 55); // Tamaño máximo de cada botón
seatButton.setPadding(new Insets(10)); // Padding dentro de cada botón
int finalSeatNumber = seatNumber; int finalSeatNumber = seatNumber;
if ("vendido".equals(seatStatus.getOrDefault(finalSeatNumber, "disponible"))) { if ("vendido".equals(seatStatus.getOrDefault(finalSeatNumber, "disponible"))) {
@ -280,5 +282,8 @@ public class VentaBoletos extends Application {
public static void main(String[] args) { public static void main(String[] args) {
launch(args); launch(args);
System.setProperty("org.apache.pdfbox.rendering.UsePureJavaCMYK", "true");
System.setProperty("org.apache.pdfbox.rendering.UsePureJavaRendering", "true");
System.setProperty("org.apache.pdfbox.base.disableFontCache", "true");
} }
} }

View File

@ -13,9 +13,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class VentanaPago { public class VentanaPago {
private static final String DB_URL = "jdbc:mysql://sql10.freesqldatabase.com:3306/sql10766655"; private static final String DB_URL = "jdbc:mysql://localhost:3306/bookticket";
private static final String DB_USER = "sql10766655"; private static final String DB_USER = "root";
private static final String DB_PASSWORD = "7BZbRjEkXZ"; private static final String DB_PASSWORD = "";
private VentaBoletos ventaBoletos; // Referencia a VentaBoletos private VentaBoletos ventaBoletos; // Referencia a VentaBoletos
public VentanaPago(VentaBoletos ventaBoletos) { public VentanaPago(VentaBoletos ventaBoletos) {
@ -236,7 +236,7 @@ public class VentanaPago {
ticketDetails.append("Cliente: ").append(clientName).append("\n"); ticketDetails.append("Cliente: ").append(clientName).append("\n");
ticketDetails.append("Evento: ").append(eventName).append("\n"); ticketDetails.append("Evento: ").append(eventName).append("\n");
ticketDetails.append("Fecha de evento: ").append(eventDate).append("\n"); ticketDetails.append("Fecha de evento: ").append(eventDate).append("\n");
ticketDetails.append("Fecha de compra: ").append(new SimpleDateFormat("yyyy/MM/dd").format(new Date())).append("\n"); ticketDetails.append("Fecha de compra: ").append(new SimpleDateFormat("yyyy-MM-dd").format(new Date())).append("\n");
ticketDetails.append("Método de pago: ").append(paymentMethod).append("\n"); ticketDetails.append("Método de pago: ").append(paymentMethod).append("\n");
ticketDetails.append("Asientos: ").append(selectedSeats.size() > 1 ? "\n" : ""); ticketDetails.append("Asientos: ").append(selectedSeats.size() > 1 ? "\n" : "");
for (int seat : selectedSeats) { for (int seat : selectedSeats) {

Binary file not shown.

After

(image error) Size: 15 KiB