Voy a mostrarte cómo crear una página web para enviar un archivo PDF desde mi ordenador a una impresora utilizando el servicio de impresión remota Impresión Expedy.

En este ejemplo estoy utilizando una impresora de etiquetas para imprimir etiquetas de transporte autoadhesivas en el formato estándar 4×6 (10×15 cm). Por ejemplo, estoy creando etiquetas para un sitio de venta al por menor que quiero enviar a una impresora situada en otra sala de mi almacén, o a un socio de dropship en el otro extremo del planeta.

Al mismo tiempo, puedes introducir texto en un campo para generar un archivo PDF. Las dos funciones pueden utilizarse independientemente o al mismo tiempo.

Código fuente completo: https: //github.com/ExpedyDev/pdftoprinter

Requisitos de hardware

  • Impresora de etiquetas, en este ejemplo estoy utilizando una Netum(NT-LP110F), pero puedes utilizar otros modelos térmicos 4×6 como Zebra, Brother, BeePRT u otro formato (A3, A4, foto postal, etc.) en función de tus necesidades.
  • Adaptador Expedy Cloud Print
  • Conexión clásica a Internet

Requisitos de la web

Vista previa del resultado de la página

vista previa del resultado final

1. Crear el formulario

Crea un formulario para introducir texto y/o subir archivos.
Utiliza el primer campo para generar un PDF a partir de la introducción de texto, y el botón Examinar para subir uno o varios archivos PDF.

HTML
<!DOCTYPE html>
<html>
<head>
	<title>Créer un PDF et imprimer</title>
</head>
        <body>
	  <h1>Créer un PDF et imprimer</h1>
	    <form method="post" action="" enctype="multipart/form-data">
		<label for="text">Saisissez le texte à imprimer en PDF :</label><br>
		<input type="text" id="text" name="text"><br><br>
		<label for="files">Envoyer des fichiers PDF :</label><br>
		<input type="file" id="files" name="files[]" multiple><br><br>
		<button type="submit" name="submit">Imprimer</button>
	    </form>
	</body>
</html>

2. Creación de PHP

Aquí tienes el código PHP completo:

PHP
<?php
	// Si le formulaire est soumis
	if (isset($_POST['submit'])) {
		// Vérifier si le champ texte est rempli
		if (!empty($_POST['text']) || !empty($_FILES['files']['tmp_name'][0])) {
			// Récupérer le texte saisi par l'utilisateur
			$text = $_POST['text'];

			// Générer le nom du fichier PDF avec la date actuelle
			$pdfName = "pdf_" . date('Ymd_His') . ".pdf";

			// Inclure la bibliothèque FPDF et FPDI
			require('fpdf/fpdf.php');
			require('fpdi/src/autoload.php');

			// Créer un objet FPDI (PDF étendu) avec FPDF
			$pdf = new \setasign\Fpdi\Fpdi('P', 'mm', array(105, 148));

			// Gérer les fichiers PDF téléversés
			if (!empty($_FILES['files']['tmp_name'][0])) {
				foreach ($_FILES['files']['tmp_name'] as $file) {
					if (!empty($file) && file_exists($file)) {
						// Ajouter les pages du fichier PDF au PDF en cours
						$pageCount = $pdf->setSourceFile($file);
						for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) {
							$tplIdx = $pdf->importPage($pageNumber);
							$pdf->AddPage();
							$pdf->useTemplate($tplIdx);
						}
					}
				}
			}

			// Ajouter une page au PDF si le champ texte est rempli
			if (!empty($text)) {
				$pdf->AddPage();
				$pdf->SetFont('Arial','B',16);
				$pdf->Cell(40, 10, $text);
			}

			// Générer le fichier PDF
			$pdf->Output('F', $pdfName);

			// Envoyer la requête à l'API Expedy pour imprimer le PDF
			$file_url = 'https://' . $_SERVER['HTTP_HOST'] . '/' . $pdfName;
			sendToExpedyPrinter($file_url);
			echo "<p>Vos fichiers ont été envoyés à l'imprimante !</p>";
		} else {
			echo "<p>Aucun texte ou fichier PDF spécifié.</p>";
		}
	}

	function sendToExpedyPrinter($file_url) {
		// Printer UID API Expedy.com
		$printer_uid = 'SAISIR UID PRINTER';

		// Message à imprimer
		$data = array(
			'usb_msg' => $file_url,
			'origin' => 'Your defined origin tag.. a uri, a name ..'
		);
		// Infos API
		$options = array(
			CURLOPT_URL => "https://www.expedy.fr/api/v2/devices/" . $printer_uid . "/usb/4/print",
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_ENCODING => "",
			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 30,
			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
			CURLOPT_CUSTOMREQUEST => "POST",
			CURLOPT_POSTFIELDS => json_encode($data),
			CURLOPT_HTTPHEADER => array(
				"Accept: application/json",
			// Vos identifiants API sid:token
				"Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
				"Content-Type: application/json"
			),
		);

		$curl = curl_init();
		curl_setopt_array($curl, $options);
		$response = curl_exec($curl);
		$err = curl_error($curl);

		curl_close($curl);

		if ($err) {
			echo "cURL Error #:" . $err;
		} else {
			echo $response;
		}


	}
	?>

No entraré en detalles sobre cada punto, ya que los comentarios hablan por sí solos, pero he aquí algunos detalles:

Las bibliotecas FPDF y FPDI son esenciales para la generación de PDF y para fusionar distintos archivos PDF en un único archivo PDF.

Esta fusión de PDF es importante porque para la impresora será más rápido y eficaz tener un único archivo PDF con varias páginas para procesar, que enviar un único archivo PDF de uno en uno a la API.

Texto generado en PDF

Si se introduce el campo de texto (opcional), se añadirá una primera página al PDF generado. Aquí se puede establecer la tipografía del texto impreso.

PHP
$pdf->SetFont('Arial','B',16);

Dimensiones PDF

En este ejemplo, necesito imprimir unas etiquetas de transporte, por lo que estamos especificando valores en mm para crear un documento en formato 4×6 (10x15cm). Pero puedes personalizar los valores de altura-anchura para imprimir en cualquier tipo de formato.

PHP
$pdf = new \setasign\Fpdi\Fpdi('P', 'mm', array(105, 148));

Impresora UID

Recupera el identificador único de la impresora de la cuenta Expedy en la consola, en la sección Impresoras. No incluyas el #. Por ejemplo GSEPOHGEIO.

PHP
	function sendToExpedyPrinter($file_url) {
		// Printer UID API Expedy.com
		$printer_uid = 'SAISIR UID PRINTER';

Clave API

Recupera las claves API de la cuenta Expedy desde la consola en el menú de la izquierda, en la sección Claves Api.
Introduce las claves en este orden: sid:token

PHP
"Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",

Ajustes del puerto USB

En este ejemplo, se utiliza el puerto USB número 4.
Para averiguar el puerto USB, en la consola de Expedy, ve a Máquinas, luego haz un USB SCAN, obtendrás un resultado como éste:

PHP
CURLOPT_URL => "https://www.expedy.fr/api/v2/devices/" . $printer_uid . "/usb/4/print",

Probar una impresión

Si has completado la instalación correctamente, deberías tener un PDF creado en tu carpeta principal, y una solicitud de devolución como la que se muestra a continuación.

Ten en cuenta que los archivos PDF no se borran, por lo que pueden ocupar mucho espacio en disco en tu alojamiento.

Français (Francés) Español Deutsch (Alemán) Italiano Português (Portugués, Portugal)