Postscript direkt an Drucker unter Windows senden


Im Reigen mit dem direkten Drucken von Daten an Drucker unter Windows steht als nächstes dass direkte Drucken von Postscript auf dem Programm. Durch die hier https://newyear2006.wordpress.com/2016/10/17/direkte-kommunikation-mit-druckern-unter-windows-von-powershell-aus/ vorgestellte Methode um Druckern direkt Daten unterjubeln zu können und die hier https://newyear2006.wordpress.com/2016/10/27/direktes-drucken-von-pdf-dateien-unter-windows-und-wie-man-die-farbprofiluntersttzung-eines-druckers-testen-kann/ vorgestellte Methode um direkt PDF-Dateien zu drucken, wollen wir uns nun Postscript zuwenden. Man kann davon ausgehen, dass ein Drucker welcher bereits die PDF-Ausgabe beherrscht auch die Ausgabe von Postscript kann.

Zunächst, wie beim Artikel beim Druck der PDF-Dateien beschrieben (siehe dort für mehr Details), muss die Printer Language gesetzt werden, diesmal aber anstatt PDF auf Postscript:

# {ESC}%-12345X
$kb=@(27,37,45,49,50, 51, 52, 53, 88)
# Zeilenumbruch
$lfb=@(13, 10)
# Sprache einstellen:
$lb=[System.Text.Encoding]::ASCII.GetBytes("@PJL ENTER LANGUAGE = Postscript")

So jetzt brauchen wir auch etwas Postscript:

$pss=@"
/Times-Roman findfont
32 scalefont
setfont
100 200 translate
45 rotate
2 1 scale
newpath
0 0 moveto
(Testausdruck) true charpath
0.5 setlinewidth
0.4 setgray
stroke
showpage
"@

Die Erklärung zu diesem Meisterwerk findet man hier unter Text (Example4): http://paulbourke.net/dataformats/postscript/.

Dieses Postscript muss nun noch in ein Bytearray umgewandelt werden und schon kann es an den Drucker gesendet werden:

$ps=[System.Text.Encoding]::ascii.GetBytes($pss)
$out = $kb + $lb + $lfb + $ps + $kb

$p=Get-Printer|Out-GridView -PassThru -Title "Bitte Postscript Drucker wählen"
Out-RawPrinter -Printer $p -ByteArray $out -DocTitle "Postscript Direktdruck!"

Da Postscript im Prinzip eine vollständige Programmiersprache ist, kann man auch rekursive Programme ausführen um z. B. Fraktale zu generieren:

$pss=@"

%!PS-Adobe-1.0
%%Title:Random Fern
%%Creator:Eric Wicklund
% Last modified: MLO 02 Jan 1993 11:24:14
% Changed: 'save' and 'restore' statements (incorrect grammar);
% length added, and set to 0.001 (0 does not work with Post 1.7).
/m1 [ 0.00 0.00 0.00 0.16 0.00 0.00 ] def
/m2 [ 0.85 -0.04 0.04 0.85 0.00 1.60 ] def
/m3 [ 0.20 0.23 -0.26 0.22 0.00 1.60 ] def
/m4 [ -0.15 0.26 0.28 0.24 0.00 0.44 ] def
/point 72 def
%/length 0 def
/length 0.001 def
%%EndProlog
%%Page: 1 1
/zzz save def
% will draw inside a 8 inch square centered on 8.5 by 11 inch page
4.25 point mul 1.5 point mul translate
0.8 point mul dup scale
% x coordinate ranges from -5 to 5
% y coordinate ranges from 0 to 10
1 setlinecap
0.005 setlinewidth
% First point at origin
0 0
150000 {
% Pick a transformation matrix probabilistically
   /r rand 100 mod def
   r 1 lt { /m m1 def }
 { r 86 lt { /m m2 def }
 { r 93 lt { /m m3 def }
           { /m m4 def } ifelse } ifelse } ifelse
% Make a linear transformation, then
% plot a point at current location
   m transform 2 copy moveto
   length length rlineto
   stroke
} repeat
showpage
zzz restore
%%Trailer

"@
Das Script für den Baum stammt von hier: 
http://www.pvv.ntnu.no/~andersr/fractal/PostScript.html
Wer sich beim Thema Postscript und Fraktale vertiefen möchte, dem sei 
dieses Dokument “Julia fractals in PostScript” von Kees van der Laan
empfohlen: https://www.ntg.nl/maps/45/03.pdf.
Mhh, da kommt mir eine Idee. Wenn es Grafikkarten gibt, die für 
Berechnungen herangezogen werden, warum dann nicht auch Drucker?

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: