Programmieren eines Filters / Backends für 'Drucken nach PDF' mit CUPS aus jeder Mac OS X-Anwendung

8

Okay, hier ist was ich machen möchte. Ich möchte eine Druckoption hinzufügen, die das Dokument des Benutzers in eine PDF-Datei druckt und einige Kopfzeilen hinzufügt, bevor es an ein Gerät gesendet wird.

Ich denke, meine Fragen sind: Wie füge ich einen virtuellen "Drucker" -Treiber für den Benutzer hinzu, der die von mir entwickelte Anwendung startet, die die PDF erstellt (oder die PDF erstellt und meine Anwendung mit Verweisen auf die neu generierte PDF)? Wie kann ich mit CUPS eine PDF erstellen? Ich bin mir nicht sicher, ob es mir klar ist, also lassen Sie es mich wissen, wenn mehr Informationen hilfreich wären.

Ich habe durch diesen Druck mit CUPS Tutorial gearbeitet und scheinen Alles in Ordnung einrichten, aber die Datei scheint nie an dem entsprechenden temporären Ort zu erscheinen. Und wenn jemand nach einem Benutzer-Ende PDF-Drucker sucht, dieses cups-pdf-for -mac-os-x ist einer, der über das Installationsprogramm funktioniert, aber ich habe das gleiche Problem, dass keine Datei im angegebenen Verzeichnis erscheint, wenn ich die Quelle herunterlade und den Anweisungen in der Readme folge. Wenn irgendjemand einen dieser beiden über den Terminal an einem Mac arbeiten lassen kann, lassen Sie mich bitte Schritt für Schritt wissen, wie Sie es gemacht haben.

    
Katie 25.06.2012, 15:31
quelle

2 Antworten

5

Ich wünschte wirklich, ich könnte zwei Antworten akzeptieren, weil ich nicht glaube, dass ich dies ohne die Hilfe von @Kurt Pfeifle für Mac-spezifische Informationen und nur für die Druckertreiber und den Speicherort von Dateien hätte tun können. Aber hier ist, was ich getan habe:

  1. Laden Sie den Quellcode von codepoet herunter cups-pdf-for-mac- os-x . (Für Nicht-Macs können Sie Ссылка ) lesen. Die Readme-Datei ist sehr detailliert und wenn Sie alle Anweisungen sorgfältig lesen, Es wird funktionieren, aber ich hatte ein paar Probleme damit, alle Teile zu bekommen, also werde ich genau beschreiben, was ich getan habe, in der Hoffnung, jemand anderem etwas Ärger zu ersparen. Das Verzeichnis mit dem Quellcode heißt dazu "cups-pdfdownloaddir".

  2. Kompilieren Sie cups-pdf.c im Ordner src, wie in der Readme-Datei angegeben:

    gcc -09 -s -lcups -o cups-pdf cups-pdf.c

    Möglicherweise gibt es eine Warnung: ld: warning: option -s is obsolete and being ignored , aber das stellte für mich kein Problem dar. Kopieren Sie die Binärdatei in / usr / libexec / cups / backend. Sie werden wahrscheinlich den Befehl sudo haben, der Sie nach Ihrem Passwort fragt. Zum Beispiel:

    sudo cp /cups-pdfdownloaddir/src/cups-pdf /usr/libexec/cups/backend

    Vergessen Sie auch nicht, die Berechtigungen für diese Datei zu ändern - sie benötigt Root-Rechte (700), die nach dem Verschieben von cupd-pdf in das Backend-Verzeichnis wie folgt geändert werden können:

    sudo chmod 700 /usr/libexec/cups/backend/cups-pdf

  3. Bearbeiten Sie die Datei in /cups-pdfdownloaddir/extra/cups-pdf.conf. Suchen Sie unter der Überschrift "PDF-Konvertierungseinstellungen" nach einer Zeile unter dem GhostScript, die #GhostScript /usr/bin/gs lautet. Ich habe es nicht auskommentiert, falls ich es brauchte, sondern einfach darunter die Zeile Ghostscript /usr/bin/pstopdf eingefügt. (Es sollte keine Vorläufernummer für irgendeine dieser Modifikationen geben)

    Finden Sie die Zeile unter GSCall, die #GSCall %s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePage\ s=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite \ -f %s Again ohne Auskommentierung liest, darunter habe ich die Zeile GSCall %s %s -o %s %s

    hinzugefügt

    Finde die Zeile unter PDFVer, die #PDFVer 1.4 liest und ändere sie in PDFVer , keine Leerzeichen oder Folgezeichen.

    Speichern Sie jetzt und beenden Sie die Bearbeitung, bevor Sie diese Datei mit dem folgenden Befehl nach / etc / cups kopieren.

    sudo cp cups-pdfdownloaddir/extra/cups-pdf.conf /etc/cups

    Seien Sie vorsichtig bei der Bearbeitung in einem Texteditor, da Zeilenumbrüche in UNIX- und Mac-Umgebungen unterschiedlich sind und möglicherweise Skripts ruinieren können. Du kannst immer einen Perl-Befehl verwenden, um sie zu entfernen, aber ich bin paranoid und ziehe es vor, mich nicht damit zu befassen.

  4. Sie sollten nun in der Lage sein, ein Programm (z. B. Word, Excel, ...) zu öffnen und Datei & gt; & gt; Drucken und suchen Sie einen verfügbaren Drucker namens CUPS-PDF. Drucken Sie auf diesem Drucker und Sie sollten Ihre PDF-Dateien standardmäßig in / var / spool / cups-pdf / yourusername / finden.

* Ich habe mir auch gedacht, dass dies hilfreich sein könnte, weil es mir geholfen hat: Wenn etwas in diesen Anweisungen versaut wird und du es überstürzen musst, um den Treiber zu entfernen, musst du (1) entferne das cups-pdf backend von /usr/libexec/cups/backend (2) entferne die cups-pdf.conf von /etc/cups/ (3) Geh in die Systemeinstellungen & gt; & gt; Drucken & amp; Faxen und löschen Sie den CUPS-PDF-Drucker.

So habe ich erfolgreich einen PDF-Backend / Filter für mich eingerichtet, jedoch gibt es weitere Details und andere Informationen zur Anpassung, die in der Readme-Datei enthalten sind. Hoffe das hilft jemand anderem!

    
Katie 03.07.2012, 14:22
quelle
10

Der Weg ist:

  • Richten Sie eine Druckwarteschlange mit einem beliebigen Treiber ein. Aber ich empfehle einen PostScript-Treiber / PPD zu verwenden. (Eine PostScript PPD ist eine, die keine *cupsFilter: ... -Zeile enthält.):

  • Verwenden Sie zunächst das (Lern-) CUPS-Backend namens 2dir . Dieser kann von dieser Website kopiert werden: KDE Printing Developer Tools Wiki . Stellen Sie sicher, dass beim Kopieren die Zeilenenden richtig sind (Unix-artig).

  • Kommandozeile zum Einrichten der ersten Warteschlange:

    lpadmin \
        -p pdfqueue \
        -v 2dir:/tmp/pdfqueue \
        -E \
        -P /path/to/postscript-printer.ppd
    
    Das 2dir Backend schreibt nun alle Ausgaben in das Verzeichnis /tmp/pdfqueue/ und es wird für jeden Job ein uniq Name verwendet. Jedes Ergebnis sollte vorerst eine PostScript-Datei sein . (mit keiner der Änderungen, die Sie noch wollen).
  • Suchen Sie die von dieser Warteschlange verwendete PPD in /etc/cups/ppd/ (ihr Name sollte pdfqueue.ppd lauten).

  • Fügen Sie die folgende Zeile hinzu (am besten oben in der PPD):

    *cupsFilter: "application/pdf  0  -"
    (Stellen Sie sicher, dass *cupsFilter ganz am Anfang der Zeile beginnt.) Diese Zeile weist cupsd an, eine Filterkette automatisch einzurichten, die PDF erzeugt, und dann den letzten Filter namens '-' aufzurufen, bevor dieser gesendet wird Datei über ein Backend an einen Drucker. Dieser '-' Filter ist ein spezieller Filter: Er macht nichts, es ist ein Passthrough Filter.
  • Starten Sie den CUPS-Scheduler erneut:

    %Vor%
  • Von nun an wird Ihr pdfqueue dazu führen, dass jeder gedruckte Job <%> als PDF in /tmp/pdfqueue/*.pdf endet.

  • Studiere das 2dir Backend-Skript. Es ist einfach Bash, und ziemlich gut kommentiert.

  • Ändern Sie die 2dir so, dass Ihre gewünschten Änderungen zu Ihrer PDF hinzugefügt werden, bevor Sie das Ergebnis in /tmp/pdfqueue/*.pdf ...

  • speichern

Update: Sieht so aus, als hätte ich 2 Zitate in meiner ursprünglich vorgeschriebenen *cupsFilter: ... -Zeile vergessen. Entschuldigung!

    
Kurt Pfeifle 25.06.2012 18:00
quelle

Tags und Links