This project allows users to convert an Excel (.xlsx) file into a PDF via a web form. The system consists of two main components:
- Frontend (HTML, CSS, and JavaScript): A form that allows the user to upload an Excel file and receive the converted PDF file as a response.
- Backend (PHP): The server processes the Excel file and performs the conversion to PDF using a specialised class.
process.php
: This PHP file handles the logic for converting the Excel file to PDF.index.html
: The HTML file containing the form for uploading the Excel file.
/project-root
│
├── /src
│ ├── index.html (Upload form and response display)
│ ├── process.php (File conversion logic)
│ └── ExcelToPdfConversor.php (Class that converts Excel to PDF)
├── /vendor (Composer dependencies)
└── composer.json (PHP dependency file)
The HTML form allows the user to select an Excel file (.xlsx) and upload it to the server.
-
Form:
- The user selects a
.xlsx
file. - Upon clicking "Convert to PDF", the file is sent to the server using a
POST
method.
- The user selects a
-
Server Interaction:
- The form uses
JavaScript
to send thePOST
request with the file attached. - The server’s response is displayed below the form, showing either a success or error message.
- The form uses
-
File Reception:
- The file is received via
$_FILES['excelFile']
. - The file’s extension is checked to ensure it is
.xlsx
.
- The file is received via
-
PDF Conversion:
- If the file extension is valid, it is passed to the
ExcelToPdfConversor
class for conversion. - If the conversion is successful, the server returns a URL to download the resulting PDF file.
- If there is an error during conversion (e.g., issues with the Excel file), an error message is returned.
- If the file extension is valid, it is passed to the
-
Error Handling:
- If no file is uploaded or there is an issue with uploading, an error message is returned.
- If the file does not have the
.xlsx
extension, the user is informed.
<?php
namespace src;
use Exception;
require_once '../vendor/autoload.php';
require './ExcelToPdfConversor.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['excelFile']) && $_FILES['excelFile']['error'] == UPLOAD_ERR_OK) {
$excelFile = $_FILES['excelFile']['tmp_name']; // The uploaded file
$excelFileName = $_FILES['excelFile']['name']; // Original filename
$fileExtension = pathinfo($excelFileName, PATHINFO_EXTENSION);
// Check if the file has the .xlsx extension
if ($fileExtension !== 'xlsx') {
print_r(json_encode(['success' => false, 'message' => 'Please upload a valid Excel file (.xlsx).']));
exit;
}
$outputPdf = 'converted_' . time() . '.pdf'; // Output PDF filename
$converter = new ExcelToPdfConversor();
try {
// Call the method that converts the Excel file to PDF
$converter->excelToPdf($excelFile, $outputPdf);
// If conversion is successful, return the URL of the PDF file
print_r(json_encode(['success' => true, 'fileUrl' => $outputPdf]));
} catch (Exception $e) {
// If there was an error during conversion, return the error message
print_r(json_encode(['success' => false, 'message' => 'Conversion error: ' . $e->getMessage()]));
}
} else {
print_r(json_encode(['success' => false, 'message' => 'No file uploaded or an error occurred during upload.']));
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Excel to PDF Converter</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 50px;
}
h1 {
color: #333;
}
form {
margin: 20px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 10px;
max-width: 400px;
background-color: #f9f9f9;
}
input[type="file"] {
margin: 10px 0;
}
button {
background-color: #007BFF;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
.success,
.error {
margin: 20px auto;
padding: 10px;
max-width: 400px;
border-radius: 5px;
}
.success {
color: #155724;
background-color: #d4edda;
border: 1px solid #c3e6cb;
}
.error {
color: #721c24;
background-color: #f8d7da;
border: 1px solid #f5c6cb;
}
</style>
</head>
<body>
<h1>Excel to PDF Converter</h1>
<form id="uploadForm" enctype="multipart/form-data" method="POST">
<label for="excelFile">Select an Excel file (.xlsx):</label><br><br>
<input type="file" name="excelFile" id="excelFile" accept=".xlsx" required><br><br>
<button type="submit">Convert to PDF</button>
</form>
<div id="response"></div>
<script>
document.getElementById('uploadForm').addEventListener('submit', async function (e) {
e.preventDefault();
const formData = new FormData(this);
const responseDiv = document.getElementById('response');
responseDiv.innerHTML = '';
try {
const response = await fetch('process.php', {
method: 'POST',
body: formData,
});
const result = await response.json();
if (result.success) {
responseDiv.innerHTML = `<div class="success">
File successfully converted:
<a href="${result.fileUrl}" target="_blank">Download PDF</a>
</div>`;
} else {
responseDiv.innerHTML = `<div class="error">Error: ${result.message}</div>`;
}
} catch (error) {
responseDiv.innerHTML = `<div class="error">Error processing file: ${error.message}</div>`;
}
});
</script>
</body>
</html>
This project uses the following dependencies:
- composer: Composer is required to manage PHP dependencies.
-
Install the project dependencies using Composer:
composer install
-
Place the Excel
.xlsx
file you wish to convert into the web form. -
Upon submitting the form, the server will process the file and convert it to PDF.
-
A download link for the converted PDF file will be provided on the webpage.
- Ensure that the uploaded file is of type
.xlsx
to prevent other file types from being processed. - Validate the file size and content to mitigate potential security risks.
Este proyecto permite convertir un archivo Excel (.xlsx) a PDF mediante un formulario web. El sistema está compuesto por dos partes principales:
- Frontend (HTML, CSS y JavaScript): Un formulario que permite al usuario cargar un archivo Excel y recibir el archivo PDF convertido como respuesta.
- Backend (PHP): El servidor procesa el archivo Excel y realiza la conversión a PDF utilizando una clase especializada.
process.php
: Este archivo PHP maneja la lógica de la conversión del archivo Excel a PDF.index.html
: El archivo HTML que contiene el formulario para que el usuario cargue el archivo Excel.
/project-root
│
├── /src
│ ├── index.html (Formulario de carga y respuesta)
│ ├── process.php (Lógica de conversión de archivos)
│ └── ExcelToPdfConversor.php (Clase que convierte Excel a PDF)
├── /vendor (Dependencias de Composer)
└── composer.json (Archivo de dependencias de PHP)
El formulario HTML permite al usuario seleccionar un archivo Excel (.xlsx) y cargarlo en el servidor.
-
Formulario:
- El usuario selecciona un archivo
.xlsx
. - Al hacer clic en "Convertir a PDF", se envía el archivo al servidor usando el método
POST
.
- El usuario selecciona un archivo
-
Interacción con el servidor:
- El formulario usa
JavaScript
para realizar la solicitudPOST
con el archivo adjunto. - La respuesta del servidor se muestra debajo del formulario, mostrando un mensaje de éxito o error.
- El formulario usa
-
Recepción del archivo:
- El archivo se recibe mediante
$_FILES['excelFile']
. - Se verifica que el archivo tenga la extensión
.xlsx
.
- El archivo se recibe mediante
-
Conversión a PDF:
- Si la extensión es válida, el archivo se pasa a la clase
ExcelToPdfConversor
para la conversión. - Si la conversión es exitosa, el servidor devuelve una URL para descargar el archivo PDF generado.
- Si ocurre un error durante la conversión (por ejemplo, problemas con el archivo Excel), se devuelve un mensaje de error.
- Si la extensión es válida, el archivo se pasa a la clase
-
Manejo de errores:
- Si no se ha cargado un archivo o si hay un error al subirlo, se envía un mensaje de error.
- Si el archivo no tiene la extensión
.xlsx
, se informa al usuario.
<?php
namespace src;
use Exception;
require_once '../vendor/autoload.php';
require './ExcelToPdfConversor.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['excelFile']) && $_FILES['excelFile']['error'] == UPLOAD_ERR_OK) {
$excelFile = $_FILES['excelFile']['tmp_name']; // El archivo cargado
$excelFileName = $_FILES['excelFile']['name']; // El nombre original del archivo
$fileExtension = pathinfo($excelFileName, PATHINFO_EXTENSION);
// Verificar que el archivo tenga la extensión .xlsx
if ($fileExtension !== 'xlsx') {
print_r(json_encode(['success' => false, 'message' => 'Por favor, sube un archivo Excel válido (.xlsx).']));
exit;
}
$outputPdf = 'converted_' . time() . '.pdf'; // Nombre de salida del archivo PDF
$converter = new ExcelToPdfConversor();
try {
// Llamar al método que convierte el archivo Excel a PDF
$converter->excelToPdf($excelFile, $outputPdf);
// Si la conversión fue exitosa, enviar la URL del archivo PDF
print_r(json_encode(['success' => true, 'fileUrl' => $outputPdf]));
} catch (Exception $e) {
// Si hubo un error en la conversión, devolver el error
print_r(json_encode(['success' => false, 'message' => 'Error en la conversión: ' . $e->getMessage()]));
}
} else {
print_r(json_encode(['success' => false, 'message' => 'No se ha subido ningún archivo o ocurrió un error al subirlo.']));
}
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Convertidor de Excel a PDF</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 50px;
}
h1 {
color: #333;
}
form {
margin: 20px auto;
padding: 20px;
border: 1px solid #ccc;
border-radius: 10px;
max-width: 400px;
background-color: #f9f9f9;
}
input[type="file"] {
margin: 10px 0;
}
button {
background-color: #007BFF;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
.success,
.error {
margin: 20px auto;
padding: 10px;
max-width: 400px;
border-radius: 5px;
}
.success {
color: #155724;
background-color: #d4edda;
border: 1px solid #c3e6cb;
}
.error {
color: #721c24;
background-color: #f8d7da;
border: 1px solid #f5c6cb;
}
</style>
</head>
<body>
<h1>Convertidor de Excel a PDF</h1>
<form id="uploadForm" enctype="multipart/form-data" method="POST">
<label for="excelFile">Selecciona un archivo Excel (.xlsx):</label><br><br>
<input type="file" name="excelFile" id="excelFile" accept=".xlsx" required><br><br>
<button type="submit">Convertir a PDF</button>
</form>
<div id="response"></div>
<script>
document.getElementById('uploadForm').addEventListener('submit', async function (e) {
e.preventDefault();
const formData = new FormData(this);
const responseDiv = document.getElementById('response');
responseDiv.innerHTML = '';
try {
const response = await fetch('process.php', {
method: 'POST',
body: formData,
});
const result = await response.json();
if (result.success) {
responseDiv.innerHTML = `<div class="success">
Archivo convertido exitosamente:
<a href="${result.fileUrl}" target="_blank">Descargar PDF</a>
</div>`;
} else {
responseDiv.innerHTML = `<div class="error">Error: ${result.message}</div>`;
}
} catch (error) {
responseDiv.innerHTML = `<div class="error">Error al procesar el archivo: ${error.message}</div>`;
}
});
</script>
</body>
</html>
Este proyecto utiliza las siguientes dependencias:
- composer: Se requiere Composer para gestionar las dependencias de PHP.
-
Instalar las dependencias del proyecto con Composer:
composer install
-
Colocar el archivo Excel
.xlsx
que deseas convertir en el formulario web. -
Al enviar el formulario, el servidor procesará el archivo y lo convertirá a PDF.
-
El enlace de descarga del archivo PDF convertido se proporcionará en la interfaz web.
- Asegúrese de que el archivo cargado sea de tipo
.xlsx
para evitar que otros tipos de archivo sean procesados. - Valide el tamaño y contenido del archivo para evitar posibles riesgos de seguridad.