Direktes Drucken von PDF-Dateien unter Windows und wie man die Farbprofilunterstützung eines Druckers testen kann


Es gibt viele Möglichkeiten Dateien unter Windows auszudrucken. Das witzige ist, dass oft Dateien mehrfach aufbereitet werden, bis sie überhaupt am Ende beim Drucker landen. Wäre es nicht toll, wenn man z. B. eine PDF-Datei zum Drucken hätte, wenn man diese unter Umgehung des Druckertreibers direkt an den Drucker senden könnte?

Wie man RAW-Dateien direkt an einen Drucker unter Windows senden kann, wurde bereits hier beschrieben: https://newyear2006.wordpress.com/2016/10/17/direkte-kommunikation-mit-druckern-unter-windows-von-powershell-aus/. Diese Variante kann man nun ausbauen, um eben auch PDF-Dateien ohne weitere Zwischenbearbeitung drucken zu können. Natürlich funktioniert diese Methode nur, wenn der Zieldrucker auch PDF-Dateien direkt verarbeiten kann! Im Zweifel gilt probieren über studieren.

Wir brauchen also die Funktion Out-RAWPrinter aus dem oben verlinkten Blogartikel. Dann müssen wir die PDF-Datei laden:

$pdf = Get-Content –Path C:\Temp\Test.PDF –Encoding Byte

$pdf enthält nun ein Bytearray. Leider lässt sich dies noch nicht direkt an Out-RawPrinter übergeben, denn dem Drucker muss noch mitgeteilt werden, welche Sprache bzw. Dateiformat da kommt. Dies ist aber ganz einfach über die Printer Job Language PJL möglich. Hier die Referenz dazu: http://h20565.www2.hp.com/hpsc/doc/public/display?docId=emr_na-bpl13208. Erfunden wurde die PJL von HP, wird aber mittlerweile auch von anderen Druckerherstellern verwendet bzw. verstanden.

In unserem Fall soll die Sprache auf PDF gestellt werden. Dies erreicht man, indem man @PJL ENTER LANGUAGE = PDF an den Drucker sendet. Damit der Drucker aber auch darauf achtet und reagiert muss noch seine Aufmerksamkeit durch einen spezielle Zeichenfolge erregt werden, indem man {ESC}%-12345X vorab und hinterher sendet. In Kombination sieht das dann so aus:

# {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 = PDF")
# alles Zusammensetzen
$out = $kb + $lb + $lfb + $pdf + $kb

In $out steht nun das komplette Bytearray. Das sieht dann z. B. so aus:

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

1B 25 2D 31 32 33 34 35 58 40 50 4A 4C 20 45 4E  .%-12345X@PJL EN
54 45 52 20 4C 41 4E 47 55 41 47 45 20 3D 20 50
  TER LANGUAGE = P
44 46
0D 0A
25 50 44 46 2D 31 2E 34 0D 0A 25 E2  DF..%PDF-1.4..%â
E3 CF D3 0D 0A 25 0D 0A 25 77 50 44 46 33 20 62  ãÏÓ..%..%wPDF3 b
79 20 57 50 43 75 62 65 64 20 47 6D 62 48 20 56  y WPCubed GmbH V
33 2E 36 35 5B 34 30 32 36 35 33 32 31 36 5D 20  3.65[402653216]

am Ende so:

65 65 30 63 31 32 32 62 64 32 66 38 63 34 3E 5D  ee0c122bd2f8c4>]
0D 0A 2F 49 6E 66 6F 20 32 20 30 20 52 0D 0A 3E  ../Info 2 0 R..>
3E 0D 0A 73 74 61 72 74 78 72 65 66 0D 0A 31 39  >..startxref..19
37 32 35 31 0D 0A 25 25 45 4F 46 0D 0A 1B 25 2D  7251..%%EOF...%-
31 32 33 34 35 58
                                12345X

Und jetzt noch alles an den Drucker:

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

Verwendet man diese Methode, muss man aber damit rechnen, dass der Ausdruck manchmal anders aussieht, als erwartet. Denn PDF ist nicht immer gleich PDF, bzw. PDF kann je nach Gerät unterschiedlich interpretiert werden.

Was kann man damit anstellen? Ja man könnte sein Gerät z. B. auf direkte Kompatibilität von ICC v4 Profil Farbraumunterstützung testen http://www.color.org/version4pdf.pdf.

$iccv4=(Invoke-WebRequest -Uri http://www.color.org/version4pdf.pdf).Content
$out = $kb+$lb+$lfb+$iccv4$x+$kb
$p=Get-Printer|Out-GridView -PassThru -Title "Bitte Drucker wählen"
Out-RawPrinter -Printer $p -ByteArray $out -DocTitle "PDF Direktdruck!"

Spannend so eine Sache!

4 Antworten to “Direktes Drucken von PDF-Dateien unter Windows und wie man die Farbprofilunterstützung eines Druckers testen kann”

  1. Postscript direkt an Drucker unter Windows senden | Das nie endende Chaos! Says:

    […] Aber doch der Versuch etwas Ordnung reinzubringen. « Direktes Drucken von PDF-Dateien unter Windows und wie man die Farbprofilunterstützung eines Dr… […]

  2. Quirel Says:

    Name der Escape Sequenz:

    UEL – %-12345X – Universal Exit Language

  3. Quirel Says:

    Jede Menge interessante Infos über Drucker MIBs und Bugs: http://blog.cyrtech.de/sites/default/files/Counting%20Pages%20in%20Printer%20Data%20Streams%20%28D2%29.pdf

  4. Quirel Says:

    und hier noch passend zum Thema PDF-Dateien direkt drucken: http://blog.cyrtech.de/sites/default/files/PDF%20Direct%20Print%20%28R1%29.pdf

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: