CUPS-Filter für eine Raw-Warteschlange

CUPS-Filter für eine Raw-Warteschlange

Ich habe Probleme herauszufinden, wie ich in CUPS einen Filter für eine Raw-Warteschlange hinzufüge – falls das möglich ist.

Im Grunde muss ich ein TIFF in PS konvertieren, bevor ich es an die Raw-Warteschlange sende. Der Drucker hat keine integrierte TIFF-Unterstützung, daher ist die Ausgabe Schrott.

Ich muss die Druckereinrichtung als Rohwarteschlange belassen und kann für die Filterung keine zweite Druckwarteschlange für denselben Drucker hinzufügen.

Gibt es eine Möglichkeit, eine TIFF-Datei (vorzugsweise für einen einzelnen Drucker) zu erfassen und sie vor dem Senden im RAW-Format in das PS-Format zu konvertieren?

Wäre dies etwas, was ich in den mime.convs für die Rohanwendung tun würde?

Antwort1

Ich habe eine Lösung dafür gefunden. Im Grunde erstelle ich einen neuen Drucker mit einem benutzerdefinierten Backend, mit dem ich die eingehenden Daten bearbeiten kann, bevor ich sie wieder versende. Ich habe also einen Drucker, der als Wrapper fungiert, die Daten empfängt, das Bild konvertiert und es dann an den eigentlichen Drucker sendet.

Um dies zu erreichen, gibt es ein openSUSE RPM-Paket, das eineCUPS-Pipe-Backenddas mit CentOS verwendet werden kann. Dieses Backend wird wie eine Befehlszeilen-Pipe verwendet.

Ich habe das oben genannte RPM heruntergeladen und das Pipe-Skript extrahiert. Dieses Skript wurde kopiert /usr/lib/cups/backend/pipeund ausführbar gemacht.

Ich habe dann ein kleines Skript geschrieben, das die an es übergebenen Druckinformationen, einschließlich der Druckeroptionen aus der Drucker-URI, entgegennimmt. Dieses Skript führt bei Bedarf die Bildkonvertierung durch (für diese Aufgabe TIFF in PDF) und sendet es dann an den eigentlichen Drucker.

#!/bin/bash

FILE=${PIPE_BACKEND_ARGV6}

MIME_TYPE=$(file --mime-type "${FILE}" | awk '{print $2}')

if [[ $MIME_TYPE == *tiff ]]
  then
    tiff2pdf -o /tmp/printConv-$$.pdf "$FILE"

    FILE=/tmp/printConv-$$.pdf

    CONV=1

fi

lpr -P "$1" "${FILE}"

if [[ $CONV -eq 1 ]] 
 then
   rm "${FILE}"

fi

Ich habe dann einen „Wrapper“-Drucker mit der folgenden URI-Syntax eingerichtet:

pipe:/path/to/cups-wrapper-script?actualPrinterName

Hier wird das Pipe-Backend verwendet. Es ruft das Skript /path/to/cups-wrapper-scriptmit dem Argument auf actualPrinterName, das verwendet wird, um dem Skript mitzuteilen, an welchen Drucker der Auftrag gesendet werden soll.

verwandte Informationen