[gelöst] Bash: QR-Code in Brief einfügen

Mornsgrans

Help-Desk
Teammitglied
Themenstarter
Registriert
20 Apr. 2007
Beiträge
74.302
Ich habe folgendes Problem:
Eine Rechnung liegt als PCL-Datei vor. In diese soll nun ein QR-Code eingefügt werden, die im Format 195x195 px als png-Datei vorliegt.

Ich habe schon mit verschiedenen Tools versucht, das Ganze zu einer ansehnlichen Datei zu "mergen", aber entweder wird mit dem convert-Befehl die Seite auf 2x3cm verkleinert oder der QR-Code wird ca. 6x6 cm groß und der Text erscheint unleserlich in ca. 75 dpi.

Hat jemand von Euch Erfahrung mit Einbinden derartiger Grafiken über die Kommandozeile? - Das Ganze muss am Schluss im Batch-Betrieb ohne Eingreifen des Users in einem Shell-Skript laufen.

Der QR-Code soll übrigens rechts vom Adressfeld liegen.
 
Zuletzt bearbeitet:
Eine Rechnung liegt als PCL-Datei vor.

PCL ist die Druckersprache von HP-Druckern, die kann man meines Erachtens nach nachträglich nicht fehlerfrei ändern.

Was man aber machen kann, ist mit einem alten Textverarbeitungsprogramm die Adress-Sequenz der Rechnung neu zu schreiben, und zwar samt QR-Code und diese dann in eine PCL-Datei gleicher PCL-Version zu drucken. Wenn es gelingt, die QR-Sequenz aus der neu erstandenen PCL-Datei zu extrahieren und an entsprechender Stelle in die alte per Editor einzufügen, hat man es geschafft. Wenn nicht, ist es ratsam, einfach die ganze "alte" Rechnung mit dem Textverarbeitungsprogramm neu zu erstellen und dann in eine PCL-Datei zu drucken. Dann kann man beim Shell-Script bleiben...

Die Frage beim Vorgehen ist, welche variablen Daten auf der Rechnung vorhanden sind und ob für jede Rechnung eine eigene PCL-Datei erstellt wird.
 
Zuletzt bearbeitet:
PCL ist die Druckersprache von HP-Druckern, die kann man meines Erachtens nach nachträglich nicht fehlerfrei ändern.
Selbstverständlich geht das, wenn man ordentlich parst und einen passenden Marker im Dokument hat. Ich kann nur leider meinen Turbo Pascal-Quellcode aus Mitte der 80er nicht finden :(.
 
Die Frage beim Vorgehen ist, welche variablen Daten auf der Rechnung vorhanden sind und ob für jede Rechnung eine eigene PCL-Datei erstellt wird.
Die PCL-Datei wird natürlich mit jeder Rechnung komplett neu erstellt, der QR-Code ebenfalls, da er kundenspezifische Daten enthält.

Da Linux ja recht flexibel ist, bereitet es auch kein Problem, die PCL-Datei mit ImageMagick nach Postscript umzuwandeln.

Ich hatte auch schon versucht, das Ganze in PDF zu konvertieren und dort den QR-Code als Overlay einzubauen, nur kommt das Ergebnis immer im Letter-Format heraus, auch wenn man das Seitenformat explizit angibt. - Muss wohl ein Bug sein, ich meine davon mal gelesen zu haben.


Selbstverständlich geht das, wenn man ordentlich parst und einen passenden Marker im Dokument hat.
Das wäre die optimalste Lösung, da ich zum Erstellen der PCL-Datei jeden PCL-Befehl programmiert habe (Font, Druckposition mit Textausgabe) - noch nach alter Väter Sitte, als man mit Programmiersprachen unter DOS arbeitete.
Wenn es ginge, könnte man auch die ggf. entsprechend konvertierte QR-Code-Datei als PCL-Befehlsequenz in die PCL-Datei schreiben, nur da habe ich da keine Ahnung, ob das geht und wenn, wie.

Zusatzinfo:
Die Programmierung (Erstellen der PCL-Datei) erfolgt in einem -man höre und staune (oder schaue entgeistert weg :D) - Multi-Platform-fähigen Basic-Dialekt.
 
Dann kannst Du den QR-Code als PCL-Grafiksequenz drucken. Wenn ich mich recht entsinne gibt es in PCL auch niedrige Auflösungen wie 75 oder 150dpi.

G-EDITH sagt:
 
Zuletzt bearbeitet:
kannst du evtl einfach als wasserzeichen beim druck selbst mit angeben? ka was da bei linux geht:rolleyes:
 
Es würde die Sache erleichtern wenn du ein Minimalbeispiel posten würdest.
 
kannst du evtl einfach als wasserzeichen beim druck selbst mit angeben? ka was da bei linux geht
Geht sicher, nur das Wasserzeichen liegt i.d.R. zentriert hinter dem Text.

Dann kannst Du den QR-Code als PCL-Grafiksequenz drucken. Wenn ich mich recht entsinne gibt es in PCL auch niedrige Auflösungen wie 75 oder 150dpi.
Der Haken:
in diesem Fall wird die ganze Seite in 75 dpi gedruckt, dann ist die Rechnung nicht lesbar und in 300 dpi ist der QR-Code ca. 7mm x 7mm groß und damit zu klein, um ihn mit dem Smartphone zu scannen.
Die Crux ist, dass ich ein 75 bzw. 150dpi Bild auf eine 300 bzw. 600 dpi-PCL-Seite legen muss.

Es würde die Sache erleichtern wenn du ein Minimalbeispiel posten würdest.
Welcher Bereich ist der, der Dich interessiert?
 
Liefere ich morgen nach - danke.


Was man aber machen kann, ist mit einem alten Textverarbeitungsprogramm die Adress-Sequenz der Rechnung neu zu schreiben, und zwar samt QR-Code und diese dann in eine PCL-Datei gleicher PCL-Version zu drucken.
Der Ansatz ist nicht schlecht. Ich muss mal nachschauen, wie ich das am "dümmsten" anstelle. Das sollte sogar mit Wordpad gehen, wenn ich die Druckausgabe in eine PCL-Datei umlenken kann.
Dann müsste ich den Rechnungskopf wie bisher in die PCL-Datei schreiben, anschließend die Startsequenz für den Grafikdruck (Positionierung etc.), um danach die PCL-Datei des QR-Codes hineinzukopieren. Am Schluss folgen die restlichen Rechnungszeilen. - Mal sehen ob es so einfach geht, wie ich es mir gerade vorstelle.
 
Ich habe folgendes Problem:
Eine Rechnung liegt als PCL-Datei vor. In diese soll nun ein QR-Code eingefügt werden, die im Format 195x195 px als png-Datei vorliegt.

Die ganzen ImageMagic-Befehle sind für derartige Dinge eigentlich prädestiniert. Ich habe im Augenblick nichts parat, was mit PCL gut was anfangen kann und was PCL in etwas vernünftiges umwandelt, aber da findet sich was. Das png kann man skalieren, indem man es erst in pngtoppm schiebt, dann ein pnmscale daraufwirft, und dann wieder in pnmtopng anwirft. Mit einem Tool, was PCL in etwas verarbeitbares wandelt, wäre die Kette dann perfekt, ein ppm bekommt man immer wieder in Postscript, PDF oder sonstwas gewandelt.
 
Ich habe im Augenblick nichts parat, was mit PCL gut was anfangen kann und was PCL in etwas vernünftiges umwandelt
Die Weiterkonvertierung in andere Formate wie z.B. Postscript ist durchaus eine Option, zumal die meisten Tools mit Postscript und PDF-Dateien arbeiten können.

Das png kann man skalieren, indem man es erst in pngtoppm schiebt, dann ein pnmscale daraufwirft, und dann wieder in pnmtopng anwirft
Das schaue ich mir morgen als erstes an.
 
Wenn die Konvertierung in andere Formate kein Problem darstellt, dann würde ich die pcl Datei mit ghostPDL in etwas brauchbares konvertieren (zB. png). Danach die 2 png Dateien mit composite (oder convert -composite) in 1 Datei umwandeln.
 
Wenn convert schnell genug ist, sollte es auch machbar sein. Da habe ich morgen früh einiges an Hausaufgaben zu erledigen.
 
Problem gelöst:

1. Auflösung:
Nach Ergänzen von "-units PixensPerInch" in Verbindung mit "-resample 150" wurde die Grafik des QR-Codes endlich groß genug, um nicht als 7x7mm "Punkt" zu enden.
Code:
convert  -units PixelsPerInch gif/shop.png -resample 150 -depth 2 gif/shop.gif
./create_down

Danach die GIF-Datei in die Datei "download" konvertieren:
Code:
   giftopnm $file|ppmtopgm|pgmtopbm|pbmtolj -noreset -float -resolution 600 >> download

2. Einbinden in Druckdatei:
Ich hatte immer den Fehler begangen, den QR-Code an die Druckdatei anzuhängen. Dumm nur, wenn das letzte Zeichen der Druckdatei ein FormFeed ist.

Also drucke ich jetzt alle Positionen der Rechnung in die Druckdatei und unmittelbar vor dem Formfeed füge ich den QR-Code ein.
In Basic-Notation sieht es so aus:
Code:
... 
PRINT CHR$(27)&"&a1V"; ! Vertikale Positionierung in Zeile 1 
PRINT CHR$(27)&"&a5100H"; !Horizontale Positionierung in Spalte 5100 (also nahe dem rechten Rand)
PRINTER IS 8 ! Druckdatei schließen
COMMAND "!cat /qrcode/download >> /tmp/"&Datei$&".DATA" ! Konvertierten QR-Code an die Druckdatei anhängen
PRINTER IS Datei$ !Druckdatei wieder öffnen
PRINT PAGE ! FormFeed
PRINTER IS 8 ! Druckdatei schließen
COMMAND "!lp -onb -oraw -dlj5 /tmp/"&Datei$&".DATA"
Ein "lpr -Plj5 -s 2>/dev/null" reicht nicht

So wird der 15x15mm große QR-Code an der Position x=5100, y=1 gedruckt

Danke für die Anregungen und möglichen Lösungsansätze - einer davon hat zum Ziel geführt.
Übrigens: Unter Windows kann man es vergessen, sich die PCL-Datei genauer anzusehen. Sie ist dermaßen aufgebläht, dass man an die eigentlichen Informationen nicht herankommt.

Konvertieren der Rechnung in eine PNG-Datei dauerte zu lange. Wenn 200 Rechnungen in einem Rutsch rausgelassen werden, kann der Mitarbeiter vorzeitig Feierabend machen, da jede Konvertierung über eine halbe Minute dauert.
Jeder convert - Befehl führte auch zu einem massiven Qualitätsverlust der Schrift, die danach kaum lesbar war, auch nicht bei 600 dpi.

Darum habe ich auf die "Overlay"-Methode in der Bash ganz verzichtet.
 
Zuletzt bearbeitet:
Wenn 200 Rechnungen in einem Rutsch rausgelassen werden, kann der Mitarbeiter Vorzeitig Feierabend machen, da jede Konvertierung über eine halbe Minute dauert.
Spielverderber.... Die Leute werden Dich hassen und beim Chef würde ich gleich mal die eh längst fällige eine Gehaltserhöhung anmahnen, ansonsten machst Du es halt doch anders :)
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben