Ausdrucken von Etiketten aus einer Web-Anwendung auf Firmennetzwerkdrucker über den Web-Server

Schmidti

Benutzer
Mitglied seit
23. Mai 2015
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

ich habe eine kleine Webanwendung erstellt, in welcher unter anderem Etikette ausgedruckt werden sollen. Ich wollte nun über ein Script (z.B. Ajax oder so) die Daten zum Web-Server senden und die Etikette vom Server ausdrucken lassen. Ich habe dazu auf der DS212 den Netzwerkdrucker eingerichtet und er funktioniert.

Über einen Button wird beispielsweise folgendes Script

function Etikettdruck(Mat_Nr, Bezeichnung, WEDatum, BestellNr, Lagerplatz, Anzahl = 1, PopUpBreite, PopUpHoehe) {
var printContents = "<h3>#Nr#</h3>#Bez#<br />WE-Datum: #WEDatum#<br />Bestell.Nr.: #BestellNr#";

Prozent=0.8;
PopUpBreite = PopUpBreite || document.body.offsetWidth*Prozent; //1500;
PopUpHoehe = PopUpHoehe || document.body.offsetHeight*Prozent; //938;

sbreite = screen.availWidth;
shoehe = screen.availHeight;

x = (sbreite-PopUpBreite)/2;
y = (shoehe-PopUpHoehe)/2;

printContents = printContents.replace("#Nr#", Mat_Nr);
printContents = printContents.replace("#Bez#", Bezeichnung);
printContents = printContents.replace("#WEDatum#", WEDatum);
printContents = printContents.replace("#BestellNr#", BestellNr);

link="Etikett.php?Etiketttext="+printContents+"&Lagerplatz="+Lagerplatz+"&Nr="+Mat_Nr;

var Info = window.open(link,'Info',"left="+x+", top="+y+", screenX="+x+", screenY="+y+", width="+PopUpBreite+", height="+PopUpHoehe+',toolbar=no,locationbar=0,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes');
}

aufgerufen, welches erstmal ein Popup-Fenster mit den Daten anzeigt.

Es wäre nun schön wenn der Web-Server das Popup-Fenster gleich zum Netzwerkdrucker leitet und das Etikett in einer bestimmten Anzahl ausdruckt.

Ich habe noch ein anders Script.

function printEtikett(Nr, Bezeichnung, WEDatum, BestellNr, Anzahl = 1) {
var printContents = "<h3>#Nr#</h3>#Bez#<br />-------------------<br />WE-Datum: #WEDatum#<br />Bestell.Nr.: #BestellNr#<br />Lagerplatz: #Lagerplatz#"";

printContents = printContents.replace("#Nr#", Nr);
printContents = printContents.replace("#Bez#", Bezeichnung);
printContents = printContents.replace("#WEDatum#", WEDatum);
printContents = printContents.replace("#BestellNr#", BestellNr);
printContents = printContents.replace("#Lagerplatz#", Lagerplatz);

document.getElementById('header').style.display = 'none';
document.getElementById('footer').style.display = 'none';
document.body.innerHTML = printContents;

for (var i = 1; i <= Anzahl; i++) {
window.print();
}
}

Allerdings kommt natürlich immer das lokale Druckereigenschaften zur Auswahl des Druckers. Besser wäre es wenn der Webserver innerhalb der Firmennetzes den Druck an den Drucker leitet. (Für Win-Web-Server gibt es eine Schnittstelle).

Ich möchte den Etikettausdruck die innerhalb des Firmennetzes ggf. auch vom Handy, welche über WLan im Firmennetz eingebunden ist, und ohne zusätz. Druckerauswahl ermöglichen.

Bitte gebt mir einen Ansatz. Wie könnte ggf. eine pdf-Datei vom web-Server automatisch auf einen Drucker ausgedruckt werden.

Grüße Silvio

DS DS212 und RS819 DSM 6.2.3-25426 Apache Server 2.2 PHP 7.3
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.257
Punkte für Reaktionen
920
Punkte
174
Mir wäre der Umstand neu, dass man ohne ohne Druckerauswahl eine Webseite sofort ausdrucken könnte.
Angenommen ich würde eine x-beliebige Webseite aufrufen und es würden sofort jedes Mal Druckaufträge ausgelöst... Das wäre ein entsprechendes Sicherheitsrisiko.

Ich glaube dein Ansatz müsste sein, dass mit Aufruf deiner Webseite eine .pdf-Datei zunächst in einem Verzeichnis gespeichert werden müsste.
Das Verzeichnis müsste dann getriggert bzw. intervallmäßig abgescannt werden. Wenn Daten vorhanden per Standarddrucker drucken und danach löschen oder verschieben, bis der Spaß von Vorne beginnt.

Ansätze werden hier besprochen - aber scheinbar nichts handfestes.
https://www.synology-forum.de/threads/automatisch-ordnerinhalt-drucken.96764/https://www.synology-forum.de/threads/scan-verzeichnis-ueberwachen-automatisch-drucken.74617/
Im Zweifelsfall müsste das auf Windows-Ebene gemacht werden. Das Verzeichnis als Netzlaufwerk mappen und dann mit .batch bzw. .ps etwas basteln.
 

Schmidti

Benutzer
Mitglied seit
23. Mai 2015
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo und Danke.

habe auf der Grundlage von https://www.vbforums.com/showthread.php?672450-Web-Browser-and-ReadyState-Problem (Download) und https://www.activevb.de/tipps/vb6tipps/tipp0128.html ein kleine Programm erstellt, welchen ein Verzeichnis alle 5 s auf neue html-Seiten prüft und sie dann ausdruckt und löscht. Um mehrere Etilekette auszudrucken werden einfach mehrere Etikette erstellt.

Hier das php-Script zur Etiketterstellung, wobei in der Etikettdruck.php die Variablen durch Platzhalter (#variable#) ersetzt werden und dann in ein Verzeichnis geschrieben werden. So kann das Etikettlayout jederzeit angepasst werden.
Code:
<?php
    #$_GET['Etiketttext']="Etiketttext"; # Etiketttext Teile-Nr und Bezeichnung
    #$_GET['Nr']="123456";               # Teile-Nr. für QR-Code
    #$_GET['Lagerplatz'] ="RD2000";      # Lagerplatz
    #$anz=2;                             # Anzahl der Ausdrucke
    $anz=$_GET['Anz'];
    $prefix="";      # Anzahl der Ausdrucke und Präfix für QR-Code (Link z.B. http:///Lagerbestaende/anzeige.php?Nr=)

    function qrcode($data, $errorCorrectionLevel = 'L', $matrixPointSize = 4, $qrlib="../phpqrcode/qrlib.php") {
        //set it to writable location, a place for temp generated PNG files
        $PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR;

        //html PNG location prefix
        $PNG_WEB_DIR = '../temp/';

        include ($qrlib);

        //ofcourse we need rights to create temp dir
        if (!file_exists($PNG_TEMP_DIR)) mkdir($PNG_TEMP_DIR);

        $filename = $PNG_TEMP_DIR.'aendern.png';

        //processing form input
        //remember to sanitize user input in real-life solution !!!
        $errorCorrectionLevel = 'L';
        if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L','M','Q','H')))
            $errorCorrectionLevel = $_REQUEST['level'];

        $matrixPointSize = 4;
        if (isset($_REQUEST['size']))
            $matrixPointSize = min(max((int)$_REQUEST['size'], 1), 5);

        if (isset($data)) {
            //it's very important!
            if (trim($data) == '') die('data cannot be empty! <a href="?">back</a>');

            // user data
            $filename = $PNG_TEMP_DIR.'aendern.png';
            #$filename = $PNG_TEMP_DIR.'test'.md5($data.'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png';
            QRcode::png($data, $filename, $errorCorrectionLevel, $matrixPointSize, 2);
        } else {
            //default data
            QRcode::png('PHP QR Code :)', $filename, $errorCorrectionLevel, $matrixPointSize, 2);
        }

        //display generated file

        return "<img src='".$PNG_WEB_DIR.basename($filename)."' width='90%' height='90%' title='QR-Code' alt='QR-Code'/>";
    }

    $content = file_get_contents("Etikettdruck.php");

    $qr_bild=qrcode($prefix.$_GET['Nr'],'L');
    #echo $qr_bild. "<br>";

    $content = str_replace("#Etiketttext#", $_GET['Etiketttext'], $content);
    $content = str_replace("#qrcode#", $qr_bild , $content);
    $content = str_replace("#Lagerplatz#", $_GET['Lagerplatz'], $content);

    for ($i = 1; $i <= $anz; $i++) {
        $targetfile = "Etikette/Etikettdruck-" . date("Y.m.d H-i-s") . "-$i.html";
        $fh = fopen($targetfile, "w");
        fputs($fh, $content);
    }
    fclose($fh);
?>
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    16,6 KB · Aufrufe: 9
Zuletzt bearbeitet von einem Moderator:


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat