Drucken auf einen Netzwerkdrucker mit Perl
Drucken aus der Linux-Konsole auf A4-Seiten in Hoch- oder Querformat
- Abstrakte Datentypen in c deklarieren und in Dateien speichern
- Aggregation und Delegation sinnvoll nutzen für Objektübergreifenden Datenaustausch
- Beginn und Ende der Sommerzeit berechnen mit Perl
- Berechnen der Zeitzone mit Perl
- Binary und UTF-8 in MySQL Tabellen speichern
- Binärdatei mit Perl erzeugen und mit c auslesen
- Bitoperatoren in Perl
- Blüten in der objektorientierten Programmierung
- C Testseite im Perl-Framework
- CGI/1.1 Der Standard Common Gateway Interface
- CPAN Module Device::USB für Win32 compilieren und installieren
- Das error_log ist definitiv kein Entwicklerwerkzeug
- Dateien dienen nicht der Präsentation der Daten sondern dem Transport
- Dateinamen in UTF-8 auf beliebigen Betriebssystemen
- Datentypen haben plattformübergreifend dieselbe Byte-Länge
- Datum als lange Zählung und Uhrzeit in dezimaler Darstellung
- Der letzte Rest: GET, PUT, POST, DELETE ...
- Der richtige Umgang mit Binaries in C und in Perl
- Die Multi-Media-Mail-Datei der Zukunft, SMS, MMS, Internet-Mail
- Drucken auf einen Netzwerkdrucker mit Perl
- Ein eigenes Forum programmieren, Zustandsmodell einer Webanwendung
- Exceptions vereinfachen die Prüfung über Kontrollstrukturen
- Ganze Zahlen in Dateien Schreiben in Programmiersprachen c, Perl usw.
- Globale Variablen der main-Class in einem Objekt bündeln
- HTTP/1.1 Multiple Request, Persistent Connection und Pipelining
- Interne Zeichenkodierung, Characters, Bytes und Bytesemantics
- JavaScript BinaryString, String, Base64 und Zeichenkette
- Julianischen und Gregorianischen Kalender berechnen mit C
- Just another OOP Tutorial for Perl
- Little Endian, Big Endian
- Locken von Dateien für atomare Lese- und Schreibzugriffe
- Modern Perl, Modern Style, Perl OOP, TDD
- MyDBI auf dem Weg zu einer eigenen Klassenhierarchie
- Nameserver-Abfragen, UDP mit Perl und mit C
- PHP serialize, unserialize ineffizient
- Perl OOP: Getter automatisieren ohne Gettermethoden zu definieren
- Perl's Exception::Class oder Exceptions klassifizieren
- Perl-Äquivalent zu PHP __toString()
- Perl5 OOP Overload und für was das gut ist
- Perl6 Perls Zukunft oder ein totgeborenes Kind
- Perl: Dependency Injection als Design Pattern
- Perl: Referenzen auf Variablen und Funktionen
- PerlDoc ausgewählte Module und Perl FAQ
- Perldoc Online, alle Perl-Funktionen per Klick erklären
- RFC gerechte Formate für Datum und Zeit
- Random Access, Persistenz und ein Schichtenmodell
- Rechnen mit IPv4-Adressen in Programmiersprache c
- Serialize Algorithmen leicht verständlich, Binary safe Read and Write
- Simple Mail Transfer Protocol einfach erklärt
- Transformation von Datenstrukturen für eine transportgerechte Verpackung
- Warum ein Data Abstraction Layer
- Webformulare und Fehlerbehandlung beim Senden der Daten mit Ajax
- XML und der Unsinn, Random Access auf Dateiebene abzubilden
- Unicode, ein System zur Verwaltung von Zeichen
Auf Linux-Systemen gibt es keinen Carriage Return (CR), sondern nur Zeilenumbrüche, Line-Feeds. Beim Drucken auf einen Netzwerkdrucker, der über IO::Socket
recht einfach anzusprechen ist, müssen daher die CRs in den Druckauftrag mitgegeben werden.
Über ein weiteres CPAN-Modul PCL::Simple
kann der Ausdruck perfekt formatiert werden, mit Angaben zur Zeilenanzahl pro Seite und Anzahl der Zeichen je Zeile wird die Schriftgröße automatisch angepasst. Außerdem ist Hoch- oder Querformat möglich, weitere Optionen siehe Modul. Script und Anwendung siehe untenstehend:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
use PCL::Simple qw( PCL_pre PCL_post );
use Getopt::Std;
# Defaults
my %opts = (
o => 'portrait', # landscape portrait
w => 132, # width, characters per line
l => 66, # lines per page
);
getopts('o:w:l:', \%opts);
# Handle für den Printer
my $sock = IO::Socket::INET->new('druckername:9100') or die "Kein socket";
# dem Drucker mitteilen, was zu machen ist
print $sock PCL_pre(
-w => $opts{w} || 132,
-lpp => $opts{l} || 66,
-ms => 'a4',
-o => $opts{o} || 'portrait',
);
# zur Ausgabe auf den Printer müssen CRs eingebaut werden
binmode STDIN;
while( my $lin = <STDIN> ){
$lin =~ s/\n/\r\n/g; # add carriage return
print $sock $lin;
}
print $sock PCL_post(); # Trailer
# Usage
# command | printer -o landscape -l 70 -w 140
# Symlink /usr/bin/printer auf das Script
Die rein persönlichen Zwecken dienende Seite verwendet funktionsbedingt einen Session-Cookie. Datenschutzerklärung:
Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. @: nmqrstx-18@yahoo.de