Ti mostrerò come creare una pagina web per inviare un file PDF dal mio computer a una stampante utilizzando il servizio di stampa remota Expedy Print.
In questo esempio sto utilizzando una stampante per etichette per stampare etichette autoadesive per il trasporto nel formato standard 4×6 (10×15 cm). Ad esempio, sto creando delle etichette per un sito di vendita al dettaglio che voglio inviare a una stampante situata in un ‘altra stanza del mio magazzino o a un partner di dropship all’altro capo del pianeta.
Allo stesso tempo, puoi inserire del testo in un campo per generare un file PDF. Le due funzioni possono essere utilizzate indipendentemente o contemporaneamente.
Codice sorgente completo: https: //github.com/ExpedyDev/pdftoprinter
Requisiti hardware
- Stampante per etichette, in questo esempio sto usando una Netum(NT-LP110F), ma puoi usare altri modelli termici 4×6 come Zebra, Brother, BeePRT o un altro formato (A3, A4, cartolina fotografica, ecc.) a seconda delle tue esigenze.
- Adattatore Expedy Cloud Print
- Connessione internet classica
Requisiti web
Anteprima del risultato della pagina

1. Creare il modulo
Crea un modulo per l’inserimento di testo e/o il caricamento di file.
Usa il primo campo per generare un PDF dall’inserimento del testo e il pulsante Sfoglia per caricare uno o più file 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. Creazione di PHP
Ecco il codice 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;
}
}
?>Non entrerò nel dettaglio di ogni punto, perché i commenti parlano da soli, ma ecco alcuni dettagli:
Le librerie FPDF e FPDI sono essenziali per la generazione di PDF e per unire diversi file PDF in un unico file PDF.
Questa unione di PDF è importante perché sarà più efficiente e veloce per la stampante avere un singolo file PDF contenente diverse pagine da elaborare, piuttosto che inviare un singolo file PDF uno per uno all’API.
Testo generato in PDF
Se viene inserito il campo di testo (opzionale), una prima pagina verrà aggiunta al PDF generato. La tipografia del testo stampato può essere impostata qui.
$pdf->SetFont('Arial','B',16);Dimensioni in PDF
In questo esempio ho bisogno di stampare delle etichette per il trasporto, quindi stiamo specificando i valori in mm per creare un documento in formato 4×6 (10x15cm). Ma puoi personalizzare i valori di altezza e larghezza per stampare su qualsiasi tipo di formato.
$pdf = new \setasign\Fpdi\Fpdi('P', 'mm', array(105, 148));Stampante UID
Recupera l’identificativo unico della stampante dall’account Expedy nella console nella sezione Stampanti. Non includere il simbolo #. Ad esempio GSEPOHGEIO.
function sendToExpedyPrinter($file_url) {
// Printer UID API Expedy.com
$printer_uid = 'SAISIR UID PRINTER';Chiave API
Recupera le chiavi API dell’account Expedy dalla console nel menu di sinistra nella sezione Chiavi Api.
Inserisci le chiavi in questo ordine: sid:token
"Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",Impostazioni della porta USB
In questo esempio, la porta USB utilizzata è la numero 4.
Per conoscere la porta USB, nella console di Expedy, vai su Macchine, poi fai uno SCAN USB e otterrai un risultato come questo:

CURLOPT_URL => "https://www.expedy.fr/api/v2/devices/" . $printer_uid . "/usb/4/print",Prova una stampa
Se l’installazione è stata completata correttamente, dovrebbe essere stato creato un PDF nella cartella principale e una richiesta di restituzione come mostrato di seguito.
Tieni presente che i file PDF non vengono cancellati, quindi possono occupare molto spazio su disco sul tuo hosting.

Français (Francese)
Español (Spagnolo)
Deutsch (Tedesco)
Italiano
Português (Portoghese, Portogallo)