Crear PDF dinámico y enviar como archivo adjunto por Email. La creación de un archivo PDF se puede crear usando diversas librerías existentes en la red, usando el lenguaje matriz el PHP para generar un fichero dinámico. Sin embargo, en este artículo le agregaremos la opción de crear y enviar el PDF mediante un correo electrónico.
Recordemos que esta característica es muy común en la mayoría de las aplicaciones Web de tipo empresarial y que trabajan online.
Crear PDF dinámico y enviar como archivo adjunto por Email
¿Cómo funciona el script?
El script funciona usando el lenguaje PHP y una librería llamado «html2pdf
» que será el encargado de crear el PDF y con la ayuda de PHP lograremos enviarlo mediante archivo adjunto en un correo electrónico.
Hemos dividido el proceso en dos pasos importantes.
- Generar dinámicamente un archivo PDF en el servidor con ayuda de una librería
- Adjuntar la factura o PDF generada y enviar por correo electrónico
Crear reportes será muy sencillo si usamos esta librería. Sin embargo, en este artículo detallaremos el funcionamiento del script.
¿Cuantas librerías existen para crear PDF?
FPDF .- La librería está escrita en el lenguaje PHP para crear archivos formato PDF, también se puede visualizar en el navegador, la librería usa (PDO) y funciona bajo la licencia GPL. Sin embargo, se puede utilizar con fines de ejemplo y comercial.
MPDF .- Una biblioteca para crear reportes en el formato PDF, también se ejecuta bajo la licencia GPL. Además, esta biblioteca está basada en FPDF, HTML2PDF y UPDF por consecuente algunas características se han mejorado considerablemente en esta versión.
TCPDF .-Es una librería muy buena para generar informes en PHP, genera formato de archivo PDF, esta librería es de código abierto y se ejecuta bajo la licencia GNU-LGPL.
FPDI .- Biblioteca que permite generar y además leer páginas de formato PDF. Sin embargo, esta liberado bajo la licencia MIT, esta librería tiene como núcleo FPDF y por ende se realizó ciertas mejoras y ventajas en esta nueva versión.
Después de analizar hemos optado por la librería «html2pdf
» para este ejemplo práctico. Además, mediante el uso de las bibliotecas tenemos que hacer nuestra tarea como crear un archivo PDF dinámico y enviar correo electrónico como datos adjuntos.
Descripción del script pasó a paso
Con la ayuda de este código puede enviar su formulario y generar PDF y enviarlo a través de gmail como archivo adjunto.
Primer paso: Crear un formulario
El fichero principal llamado «INDEX.PHP
» mostrara un formulario en su página y/o sistema web y será el encargado de generar el archivo PDF y enviar por Email.
<div class="container"> <div class="page-header"> <h1>Crear PDF dinámico y enviar adjunto por Email</h1> </div> <?php if ($msgerror) { ?> <div class="alert alert-danger"><?php echo $msgerror; ?></div> <?php } else if ($msgsuccess) { ?> <div class="alert alert-success"><?php echo $msgsuccess; ?></div> <?php } ?> <div class="form"> <form class="form-horizontal" action="" method="post"> <div class="form-group"> <label class="control-label col-sm-2" for="mailto">Email A:</label> <div class="col-sm-10"> <input type="email" class="form-control" id="mailto" placeholder="Ingrese Email A" name="mailto" value="<?php echo $_POST['mailto']; ?>"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="mailfrom">Mail De:</label> <div class="col-sm-10"> <input type="email" class="form-control" id="mailfrom" placeholder="Ingrese Email De" name="mailfrom" value="<?php echo $_POST['mailfrom']; ?>"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="">Asunto Email:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="mailsubject" placeholder="Ingrese Asunto Email" name="mailsubject" value="<?php echo $_POST['mailsubject']; ?>"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="firstname">Nombres:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="firstname" placeholder="Ingrese Nombres" name="firstname" value="<?php echo $_POST['firstname']; ?>"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="lastname">Apellidos:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="lastname" placeholder="Ingrese Apellidos" name="lastname" value="<?php echo $_POST['lastname']; ?>"> </div> </div> <div class="form-group"> <label class="control-label col-sm-2" for="description">Descripcion:</label> <div class="col-sm-10"> <textarea placeholder="Ingrese Descripcion" class="form-control" id="description" name="description" style=" height: 268px;"><?php echo $_POST['description']; ?></textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-success">Crear y Enviar PDF</button> </div> </div> </form> </div> </div>
Segundo paso: Declarar la biblioteca
Podemos obtener la biblioteca de forma gratuita por internet e incluir «HTML2PDF
”. Veamos el ejemplo de declaración. Sin embargo, esta declaración es muy importante ya que con esta biblioteca podemos crear el PDF requerido en este ejemplo.
// LLamamos a la biblioteca para la creacion del PDF require_once('html2pdf/html2pdf.class.php');
Tercer paso: Enviar por correo electronico
Aquí mostraremos todo referente al envío por correo electrónico del PDF generado. Es decir, la información enviada por el formulario y también no olvidarnos de la tabla para mostrar la información en el documento PDF. Veamos el siguiente ejemplo.
/*Envio de email y adjunto el PDF creado*/ $mailto = $_POST['mailto']; $mailfrom = $_POST['mailfrom']; $mailsubject = $_POST['mailsubject']; $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $description = $_POST['description']; $description = wordwrap($description, 100, "<br />"); /* rompe el contenido de la descripción cada 100 caracteres después. */ $content = ''; $content .= ' <style> table { border-collapse: collapse; } table{ width:800px; margin:0 auto; } td{ border: 1px solid #e2e2e2; padding: 10px; max-width:520px; word-wrap: break-word; } </style>'; /* Tu css */ $content .= '<table>'; $content .= '<tr><td>Email A</td> <td>' . $mailto . '</td> </tr>'; $content .= '<tr><td>Mail De</td> <td>' . $mailfrom . '</td> </tr>'; $content .= '<tr><td>Asunto Email</td> <td>' . $mailsubject . '</td> </tr>'; $content .= '<tr><td>Nombres</td> <td>' . $firstname . '</td> </tr>'; $content .= '<tr><td>Apellidos</td> <td>' . $lastname . '</td> </tr>'; $content .= '<tr><td>Descripcion</td> <td>' . $description . '</td> </tr>'; $content .= '</table>'; // LLmamos a la biblioteca para la creacion del PDF require_once('html2pdf/html2pdf.class.php'); // Declaramos el formato del documento PDF $html2pdf = new HTML2PDF('P', 'A4', 'fr'); $html2pdf->setDefaultFont('Arial'); $html2pdf->writeHTML($content, isset($_GET['vuehtml'])); $html2pdf = new HTML2PDF('P', 'A4', 'fr'); $html2pdf->WriteHTML($content); $to = $mailto; $from = $mailfrom; $subject = $mailsubject; $message = "<p>Consulte el archivo adjunto.</p>"; $separator = md5(time()); $eol = PHP_EOL; $filename = "pdf-documento.pdf"; $pdfdoc = $html2pdf->Output('', 'S'); $attachment = chunk_split(base64_encode($pdfdoc)); $headers = "From: " . $from . $eol; $headers .= "MIME-Version: 1.0" . $eol; $headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol . $eol; $body = ''; $body .= "Content-Transfer-Encoding: 7bit" . $eol; $body .= "This is a MIME encoded message." . $eol; //had one more .$eol $body .= "--" . $separator . $eol; $body .= "Content-Type: text/html; charset=\"iso-8859-1\"" . $eol; $body .= "Content-Transfer-Encoding: 8bit" . $eol . $eol; $body .= $message . $eol; $body .= "--" . $separator . $eol; $body .= "Content-Type: application/octet-stream; name=\"" . $filename . "\"" . $eol; $body .= "Content-Transfer-Encoding: base64" . $eol; $body .= "Content-Disposition: attachment" . $eol . $eol; $body .= $attachment . $eol; $body .= "--" . $separator . "--"; if (mail($to, $subject, $body, $headers)) { $msgsuccess = 'Email enviado Correctamente'; } else { $msgerror = 'Email no ha sido enviado'; } } }
Proceso paso a paso de crear y enviar PDF Adjunto
a) Paso 01: Llenar el formulario
En esta sección tenemos que colocar los email en el lugar correcto, por ejemplo el de «Mail De
«. Aquí, tiene que colocar el correo creado en el servidor.
b) Paso 02: Mensaje de enviado correctamente
Si el proceso resulto exitoso mostrara un mensaje de envío correcto, caso contrario mostrara mensaje de error.
c) Paso 03: Recepción del Email con el PDF Adjunto
Este esté paso solo verificamos si el correo llego a destino y lo revisamos en la bandeja de entrada. Cabe resaltar, que este correo debe de ser del campo llamado «Email A
«. En nuestro formulario.
d) Paso 04: Visualizar en PDF adjunto
El último paso es verificar si el PDF llego en perfectas condiciones y si es posible visualizarlo sin ningún tipo de problemas en varias aplicaciones o vía online.
CONCLUSIÓN DE CREAR PDF DINÁMICO
Hemos aprendido que para generar un PDF mediante PHP podemos hacerlo usando varias librerías que cumplen el mismo fin.
Además, haciendo uso de un formulario podemos crear un PDF paso a paso y enviarlo por correo electrónico. Sin embargo, también podemos probar otras librerías para crear PDFs.
Tenemos que crear un ID de correo en tu servidor y utilízalo como correo electrónico de «Envío(de)«. Si se envía el formulario y no recibe ningún correo electrónico puede comprobar en la carpeta spam y crear ID de correo en el servidor.
[sociallocker id=5099]Generar PDF dinámico y enviar por Email: Descarga