DHL- und Hermes-Etiketten automatisch auf 4×3 Label / 150x100mm Label zuschneiden per PHP-Script

Dhl labelDHL-Paketmarken werden standardmäßig im Querformat erzeugt und enthalten auf der linken Seite einen großflächigen Block mit Informationen, die im Alltag kaum noch jemand benötigt: Trackingnummern, Versandbestätigungen und verschiedene Metadaten sind ohnehin im DHL-Kundenkonto bzw. im Online-Tracking abrufbar. Für den Einsatz am Etikettendrucker ist dieser komplette linke Bereich daher nutzlos – gebraucht wird ausschließlich das eigentliche Versandetikett auf der rechten Seite. Hinzu kommt: Die PDF-Ausgabe der DHL-Marke entspricht nicht dem gängigen Etikettenformat von 100 × 150 mm (4×6 Zoll). Ein direkter Druck auf Thermo- oder Labeldruckern führt damit häufig zu Skalierungsproblemen oder erfordert einen händischen Zuschnitt.

Ganz ähnlich verhält es sich mit vielen Hermes-Paketaufklebern: Auch nehmen zusätzliche Bestätigungs- und Informationsbereiche einen großen Platz auf einer A4-Seite ein, während der eigentliche Labelbereich nur einen Teil des PDFs ausmacht und nicht dem Standardformat von 100 × 150 mm entspricht.

Das hier bereitgestellte Script löst genau diese Probleme. Es liest die originale Paketmarke von DHL oder Hermes ein, dreht sie bei Bedarf, entfernt die überflüssigen Bereiche und extrahiert ausschließlich den relevanten Etikettenteil. Anschließend wird daraus ein neues, sauber beschnittenes PDF im Format 100 × 150 mm erzeugt – optimiert für Zebra-, DYMO-, Brother- oder vergleichbare Etikettendrucker. Das Ergebnis ist ein präzises, randnahes Versandetikett ohne Begleit- und Zusatzinformationen, das direkt gedruckt werden kann.

Das Script ist unter https://versandetiketten.allsky-rodgau.de/index.php aufrufbar und funktioniert einwandfrei mit DHL Paket- und DHL Päckchen-Etiketten sowie mit gängigen Hermes-Paketmarken (Stand: 10. Dezember 2025).

Und wer das Tool lokal installieren möchte, findet in diesem Beitrag alle notwendigen Informationen und den Downloadlink.

1. Systemvoraussetzungen

Für das Paketlabel-Script werden folgende Komponenten benötigt:

  • Webserver mit PHP (empfohlen: PHP 7.4 oder höher, ideal PHP 8.x)
  • PHP-Erweiterung Imagick inkl. PDF-Unterstützung (Ghostscript als Delegate)
  • PHP-PDF-Bibliothek FPDF (Datei fpdf.php)
  • Schreibrechte im Unterordner tmp/ des Scriptverzeichnisses

2. Dateien herunterladen

Für den Betrieb werden folgende Dateien benötigt:

  • index.php – Das hier bereitgestellte Script zur Verarbeitung der Paketmarken von DHL und Hermes, inklusive Upload, Zuschnitt und PDF-Generierung

    (Hier als ZIP-Archiv downloaden – Version 2.3 vom 10.12.2025)

    Achtung: Für Heavy-Usage ist das Script nicht ausgelegt, aber es können mehrere User parallel mehrere Etiketten bearbeiten.

  • Die Datei fpdf.php aus der PDF-Bibliothek FPDF – diese ist separat herunterzuladen: https://www.fpdf.org

3. Verzeichnisstruktur

Die Zielstruktur auf dem Webserver sollte wie folgt aussehen:

/htdocs
└── dhl-label
├── index.php
├── fpdf.php
└── /tmp

Beschreibung:

  • index.php – Upload, Verarbeitung und Generierung des 100×150-mm-PDFs (inkl. Vorschau im Browser)
  • fpdf.php – FPDF-Klasse
  • tmp/ – temporäre Dateien (Input-PDF, Zwischen-JPG, Output-PDF)

4. tmp-Verzeichnis anlegen und Rechte setzen

Im gleichen Ordner wie index.php einen Unterordner tmp anlegen und Schreibrechte vergeben. Beispielsweise per Shell:

chmod 755 tmp

Rechteempfehlung:

  • 755 ist in der Regel ausreichend:
    • Webserver-User kann lesen, schreiben und in das Verzeichnis wechseln
    • Andere Nutzer haben nur Lese-/Ausführungsrechte, keine Schreibrechte

5. Imagick und PDF-Unterstützung prüfen

Vor dem produktiven Einsatz sollte geprüft werden, ob Imagick und die PDF-Unterstützung auf dem Zielsystem korrekt funktionieren.

5.1 Imagick geladen?

Testdatei phpinfo.php anlegen (nur für Setup, danach wieder löschen):

<?php phpinfo();

Diese im Browser aufrufen und prüfen:

  • Abschnitt imagick vorhanden?
  • Unter „supported formats“ sollte PDF aufgeführt sein.

5.2 Optionaler PDF-Lesetest

Optional kann mit folgendem Script getestet werden, ob ein PDF eingelesen werden kann (eine Datei test.pdf ins gleiche Verzeichnis legen):

<?php

if (!extension_loaded('imagick')) {
    die("Imagick ist nicht installiert.");
}

try {
    $im = new Imagick();
    $im->setResolution(72, 72);
    $im->readImage(__DIR__ . "/test.pdf[0]");

    echo "PDF erfolgreich gelesen. Breite: "
        . $im->getImageWidth()
        . " / Höhe: "
        . $im->getImageHeight();

} catch (Exception $e) {
    echo "Fehler beim Lesen des PDFs: "
        . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8');
}

6. Installation der Scripte

  1. index.php in das gewünschte Verzeichnis auf dem Webserver hochladen (z. B. /htdocs/dhl-label/).
  2. fpdf.php aus dem FPDF-Paket in dasselbe Verzeichnis kopieren.
  3. Unterordner tmp/ im gleichen Verzeichnis anlegen und mit Rechten 755 versehen.
  4. Optional: Imagick und PDF-Unterstützung wie in Abschnitt 5 beschrieben testen.

7. Nutzung im Browser

  1. Im Browser die index.php aufrufen, z. B.:
    https://versandetiketten.allsky-rodgau.de/index.php
  2. Eine DHL- oder Hermes-Paketmarke als PDF-Datei auswählen und hochladen.
  3. Das Script:
    • liest die Paketmarke ein,
    • dreht sie bei Bedarf,
    • schneidet den Etikettenbereich zu (inkl. Beschnitt oben/unten/links/rechts),
    • passt das Etikett auf 100×150 mm an,
    • erzeugt ein neues PDF und
    • zeigt dieses in einer Vorschau-Seite im Browser an; von dort kann es direkt gedruckt oder heruntergeladen werden.
  4. Im Ordner tmp/ verbleibt immer nur die aktuell erzeugte PDF-Datei; alle älteren PDFs werden beim Aufruf von index.php automatisch gelöscht.

8. Typische Fehlerquellen

  • Imagick nicht installiert / weiße Seite
    Imagick-Erweiterung fehlt oder ist in der php.ini nicht aktiviert. Hosting-Dokumentation prüfen oder Provider kontaktieren.
  • PDF-Verarbeitung schlägt fehl (keine PDF-Delegates o. Ä.)
    Ghostscript oder die PDF-Unterstützung von ImageMagick fehlt oder ist durch policy.xml blockiert. Entsprechende Serverkonfiguration anpassen lassen.
  • Upload-Fehler / Datei zu groß
    PHP-Einstellungen upload_max_filesize und post_max_size prüfen (mindestens 5 MB empfehlenswert).
  • PDF wird nicht erzeugt oder nicht angezeigt
    Prüfen, ob der Ordner tmp/ existiert, beschreibbar ist und ob die Datei fpdf.php korrekt eingebunden wurde. Bei Bedarf Fehlermeldungen temporär einschalten (error_reporting / display_errors).

9. Sicherheit

Das Script wurde so entwickelt, dass typische Angriffspunkte weitgehend ausgeschlossen werden. Alle hochgeladenen Dateien werden strikt auf das PDF-Format geprüft, mit sicheren temporären Dateinamen gespeichert und ausschließlich serverseitig verarbeitet. Pfadmanipulationen sind durch die Nutzung von basename() beim Zugriff auf Dateien im tmp-Verzeichnis ausgeschlossen, und beim Aufruf von index.php werden automatisch alle älteren PDFs entfernt, sodass keine historischen Dateien liegen bleiben.

Fehlerausgaben werden HTML-sanitized, und die erzeugten PDFs werden direkt aus dem tmp-Verzeichnis an den Browser gestreamt, ohne Ausführung von Benutzereingaben. Uploads können nicht als Code ausgeführt werden, da Imagick und FPDF die Dateien ausschließlich rendern bzw. neu erzeugen.

Beispielhafte sicherheitsrelevante Stellen im Code:

 // Nur echte PDF-Dateien akzeptieren
 $mime = $finfo->file($file['tmp_name']);
 if ($mime !== 'application/pdf') {
     fail('Nur PDF erlaubt');
 }

 // Sichere Dateinamen
 $inputPdf = $tmpDir . '/' . secure_filename('.pdf');

 // Pfad-Schutz beim Zugriff auf erzeugte PDFs
 $file = basename($_GET['file']);
 $path = $tmpDir . '/' . $file;

Hinweis / Disclaimer:

Dieses Script wird ohne jede Gewährleistung bereitgestellt. Die Nutzung erfolgt vollständig auf eigene Verantwortung. Es wird keinerlei Haftung übernommen für fehlerhafte Ausdrucke, beschädigte Sendungen, falsch platzierte oder unvollständige Etiketten, technische Probleme, Folgeschäden oder sonstige Auswirkungen, die durch den Einsatz dieses Scripts entstehen können.

Bitte prüfen Sie jedes erzeugte Etikett sorgfältig, bevor Sie es verwenden oder auf eine Sendung aufbringen. Insbesondere ist sicherzustellen, dass alle relevanten Barcodes und QR-Codes vollständig sichtbar, nicht beschnitten und maschinenlesbar sind. Für eventuelle Versandprobleme, Rücksendungen, Aufpreise oder Zustellverzögerungen übernehme ich keinerlei Verantwortung.

  • „DHL“ ist eine eingetragene Marke der DHL International GmbH bzw. der Deutsche Post DHL Group.
  • „Hermes“ ist eine Marke der Hermes Germany GmbH und der jeweiligen Hermes-Unternehmen.

Dieses Script steht in keiner Verbindung zu DHL oder Hermes, wurde nicht im Auftrag dieser Unternehmen erstellt und ist kein offizielles Produkt oder offizielles Werkzeug der genannten Marken.

Die Nutzung dieser Software erfolgt freiwillig, unentgeltlich und ohne Anspruch auf Support oder Funktionsgarantie.

Hat dir dieser Beitrag gefallen?

Du kannst allsky-rodgau.de mit einem kleinen Kaffee auf BuyMeACoffee unterstützen.

Jetzt Kaffee spendieren!