Drucken auf einen Netzwerkdrucker mit Perl

Drucken aus der Linux-Konsole auf A4-Seiten in Hoch- oder Querformat

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

Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. 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. s​os­@rolf­rost.de.