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

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.
<!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
// 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.
$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.
$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.
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
"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:

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)