Druckerabrechnung selbstgemacht.

Veröffentlicht von Thomas Krupa am

Wir bieten unseren Schülerinnen und Schülern diverse Services im Intranet an. Dazu gehören zum Beispiel die Essensan- und Abmeldung, Speiseplan, Bestellung von Milch/Kakao/Joghurt, Bestellung von den Unterrichtsmittel für das jeweilige Schuljajhr (Hefte,…). Zusätzlich können die SuS auf einem Kopierer/Drucker über das Intranet ausdrucken. Am Monatsende wird dann eine PDF-Rechnung über die in Anspruch genommenen Leistungen erstellt und per E-mail an die Eltern verschickt. Das Konto wir entsprechend belastet.
Wie wir die Druckerabrechung umgesetzt haben, erklärt dieser Beitrag.

Ansätze gibt es viele, und es gibt auch die eine oder andere freie Software die das Accounting übernehmen könnte, z.B. PyKota oder CUPs. Wir haben das etwas anders umgesetzt.
Das Printing-Service funktioniert so, dass der/die SuS ein PDF-Dokument hochlädt. Dieses Dokument wird dann zum Drucker geschickt. Aus jeder Anwendung, aus der man drucken kann, kann auch ein PDF erstellt werden. Ein wesentlicher Vorteil dieses Ansatzes ist, dass der/die SuS unabhängig vom jeweiligen Lan/VLAN/WLAN drucken kann – theoretisch auch von zuhause, in der Früh liegt der Ausdruck im Drucker. Die SuS müssen auf ihren Rechnern keine Software installieren. Nach dem Hochladen eines PDF-Dokuments erscheint folgendes Formular.

Wird der Druck gestartet, wird das Dokument an den Drucker geschickt und der Druckauftrag für die Abrechnung in der Datenbank gespeichert.

Ein paar Details zur technischen Umsetzung, sowie Voraussetzungen:
Ein Login im Intranet
Ein Formular zum Hochladen des PDFs
CUPS und entsprechender Druckertreiber

Nach dem Hochladen wird das Dokument mit dem Program pdfinfo entsprechend analysiert. Mit folgendem Aufruf (PHP) erhält man zum Beispiel die Anzahl der Seiten oder das Format.

 exec('export LD_LIBRARY_PATH="MYPATH/bin/pdfinfolib/"; MYPATH/bin/pdfinfo ' . $UPLOADED_PDF . ' | awk \'/Pages:/ {print $2}\' 2>&1', $output);

 exec('export LD_LIBRARY_PATH="MYPATH/bin/pdfinfolib/"; MYPATH/bin/pdfinfo ' . $UPLOADED_PDF . ' | awk \'/Page Size:/ {print $7}\' 2>&1', $output);
$format = $output[0];

Die ausgewerteten Daten werden wie oben ersichtlich nochmal angezeigt. Wird der Ausdruck angestoßen, wird am Schulserver ein kleines Programm aufgerufen, um das Dokument zum Drucker zu schicken.

<?php

if(empty($_POST['size']) || empty($_POST['filename']) || empty($_POST['duplex'])){
    echo false;
}

$size=$_POST['size'];
$fileName=$_POST['filename'];
$duplex = $_POST['duplex']; //if 1 => duplex, if 0 ==> single page
$isNotA4 = $_POST['fitToPage'];

$path = "MYSERVERPATH".uniqid(rand(), true) . '.pdf';; // Where the file should be saved to
$link = "MYDOWNLOADPATH".$fileName; // Download link
$bytes=file_put_contents($path, file_get_contents($link));

$additionlPrinterParameters='';
if ($isNotA4 > 0) {
  $additionalPrinterParameters='-o media=A4 -o InputSlot=LCF -o PageSize=A4 -o fit-to-page';
}

if ($size == filesize($path)) {
    if ($duplex > 0 ) {
       exec("/usr/bin/lpr -P 'PRINTERNAME' -o sides=two-sided-long-edge ".$additionalPrinterParameters." ".$path);
    } else {
       exec("/usr/bin/lpr -P 'PRINTERNAME' ".$additionalPrinterParameters." ".$path);
    }
    echo true;
    unlink($path);
} else {
    echo false;
}

Im Intranet werden die Daten für die Abrechnung noch gespeichert.

Kategorien: DachsbergHowTo

0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.