Ich werde Ihnen zeigen, wie Sie eine Webseite erstellen, um eine PDF-Datei von meinem Computer an einen Drucker zu senden, indem Sie den Ferndruckservice nutzen. Expedy Print.

In diesem Beispiel verwende ich einen Etikettendrucker (Label), um selbstklebende Transportetiketten im Standardformat 4×6 (10x15cm) zu drucken. Zum Beispiel erstelle ich Etiketten für einen Online-Shop, die ich an einen Drucker in einem anderen Raum in meinem Lager oder bei einem Dropship-Partner auf der anderen Seite der Welt weiterleiten möchte.

Beide Funktionen können unabhängig voneinander oder gleichzeitig verwendet werden.

Der vollständige Quellcode: https: //github.com/ExpedyDev/pdftoprinter

Hardware-Voraussetzungen

  • Etikettendrucker, in diesem Beispiel verwende ich einen Netum(NT-LP110F), aber Sie können auch andere 4×6 Thermomodelle wie Zebra, Brother, BeePRT oder ein anderes Format (A3, A4, Foto-Postkarte…) verwenden, je nachdem, was Sie benötigen.
  • Cloud Print-Adapter von Expedy
  • Klassische Internetverbindung

Web-Voraussetzungen

Vorschau auf das Ergebnis der Seite

Überblick über das Endergebnis

1. Erstellung des Formulars

Sie erstellen ein Formular zur Texteingabe und/oder zum Hochladen von Dateien.
Das erste Feld dient zur Erstellung einer PDF-Datei aus einer Texteingabe, und die Schaltfläche Durchsuchen dient zum Hochladen einer oder mehrerer PDF-Dateien.

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. PHP-Erstellung

Hier ist der vollständige PHP-Code :

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;
		}


	}
	?>

Ich werde nicht auf jeden einzelnen Punkt eingehen, da die Kommentare für sich selbst sprechen:

Die FPDF- und FPDI-Bibliotheken sind für die PDF-Erzeugung und das Zusammenfügen verschiedener PDF-Dateien zu einer einzigen PDF-Datei unerlässlich.

Diese PDF-Zusammenführung ist wichtig, da es für den Drucker effizienter und schneller ist, eine einzige PDF-Datei mit mehreren zu verarbeitenden Seiten zu haben, als eine einzelne PDF-Datei nach der anderen an die API zu senden.

Text als PDF generiert

Wenn das Feld Text eingegeben wird (optional), wird der erzeugten PDF-Datei eine erste Seite hinzugefügt. Hier können Sie die Typografie des gedruckten Textes einstellen.

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

Abmessungen des PDF

In diesem Beispiel muss ich Transportaufkleber drucken, also geben wir die Werte in mm an, um ein Dokument im Format 4×6 (10x15cm) zu erstellen. Sie können die Werte für die Höhe und Breite jedoch anpassen, um auf jedem beliebigen Format zu drucken.

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

UID Printer

Rufen Sie die eindeutige Kennung des Druckers im Expedy-Konto in der Konsole im Abschnitt Printers ab. Lassen Sie die # weg. Zum Beispiel GSEPOHGEIO.

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

API-Schlüssel

Holen Sie sich die API-Schlüssel aus dem Expedy-Konto in der Konsole im Menü links im Abschnitt Api Keys.
Geben Sie die Schlüssel in diesem Order ein: sid:token

PHP
"Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",

USB-Anschluss einstellen

In diesem Beispiel wird der USB-Anschluss Nummer 4 verwendet.
Um den USB-Anschluss zu ermitteln, gehen Sie in der Expedy-Konsole zu Machines und führen Sie einen USB-Scan durch:

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

Einen Ausdruck testen

Wenn Sie die Installation erfolgreich abgeschlossen haben, sollten Sie eine PDF-Datei in Ihrem Hauptordner erstellen und die Abfrage wie unten dargestellt zurückgeben.

Bitte beachten Sie, dass PDF-Dateien nicht gelöscht werden und daher viel Speicherplatz auf Ihrem Hosting belegen können.

Français (Französisch) Español (Spanisch) Deutsch Italiano (Italienisch) Português (Portugiesisch, Portugal)