Portada » Lenguaje PHP » Crear PDF dinámico y enviar como archivo adjunto por Email

Crear PDF dinámico y enviar como archivo adjunto por Email

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

Crear PDF y enviar por email Adjunto
Crear PDF y enviar por email Adjunto

¿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.

Crear reportes será muy sencillo si usamos esta librería. Sin embargo, en este artículo detallaremos el funcionamiento del script.

Crear PDF dinámico y enviar como archivo adjunto por Email
Crear PDF dinámico y enviar como archivo adjunto por Email

¿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.

Llenar el formulario
Llenar el formulario

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.

Email adjunto PDF enviado correctamente
Email adjunto PDF enviado correctamente

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.

Recepcion del email adjunto PDF PHP
Recepcion del email adjunto PDF PHP

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.

PDF recibido por Email PHP
PDF recibido por Email PHP

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] [/sociallocker]

 

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 3.8 / 5. Recuento de votos: 4

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad