Ruft man sp --help auf, so erscheint folgender Eintrag:
$ sp --help
Usage: [parameter] command
--filter=FILTER Run XPROC filter before publishing starts
Was hat es mit diesem Filter auf sich? Was ist XProc?
XProc ist eine in XML formulierte Sprache, um Anweisungen hintereinander auszuführen.
Man kann es sich wie ein »in XML formuliertes Make« vorstellen, um verschiedene Dinge zu tun.
So könnte man eine XSLT-Transformation anstoßen, XML validieren oder Dateien kopieren.
Diese Instruktionen speichert man z.B. unter filter.xpl.
Die Syntax ist zwar etwas gewöhnungsbedürftig, aber durchaus erlernbar.
Der Wikipediaeintrag zu XProc hilft hier weiter
Nun kann man mit
sp --filter filter.xpl run
den Publisher starten, während vorher einmalig die XProc-Anweisungen ausgeführt werden.
Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.7.10. Andere Versionen haben womöglich andere Befehle oder die genannten Befehle zeigen ein anderes Verhalten. Bitte schau im Zweifelsfall in der Anleitung nach.
In der Serie »Feature der Woche« beschreibe ich einmal in der Woche mehr oder weniger nützliche Eigenschaften des Publishers. Kommentare gerne an mich per E-Mail oder einfach im Kommentarfeld.
Das erste »Feature der Woche« im Jahr 2017 beschäftigt sich mit der Ausgabe von QR-Codes. Kürzlich sind mir GiroCodes über den Weg gelaufen. Das sind QR-Codes, die Rechnungsinformationen enthalten, mit denen man eine Online-Überweisung schnell und einfach durchführen kann.
Ein QR-Code, der Überweisungsinformationen enthält. Der Rahmen und der Text darüber sind nicht notwendig.
Der Befehl, um einen QR-Code zu erzeugen, lautet <Barcode>, z.B.:
Die einzelnen Felder nach dem Feld SCT sollten sich leicht erschließen. Es sind die BIC, Empfänger (UTF-8 kodiert), IBAN, Betrag, zwei Leerzeilen und der Verwendungszweck.
Wichtig für die Kompatibilität mit dem GiroCode Standard ist, dass die Fehlerkorrektur im QR-Code auf »M« festgelegt ist. Seit der Version 2.7.10 kann man diese explizit festlegen.
Als Gimmick habe ich noch einen Rahmen um den Code gezeichnet mit dem Text darüber. Der Text ist in der Schriftart OpenSans Condensed und kann auf der Google Fonts Seite herunter geladen werden.
Die Idee ist, erst eine leere Box zu zeichnen mit dem abgerundeten Rahmen. Die Box muss etwas größer sein, als der eigentliche Code.
Anschließend wird der Text GIROCODE geschrieben und zum Schluss der eigentliche QR-Code eingepasst.
Mit den Variablen kann man die Größe und Position leicht anpassen. Das Ergebnis ist im Bild oben zu sehen.
Viel Spaß beim Spenden.
Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.7.10. Andere Versionen haben womöglich andere Befehle oder die genannten Befehle zeigen ein anderes Verhalten. Bitte schau im Zweifelsfall in der Anleitung nach.
In der Serie »Feature der Woche« beschreibe ich einmal in der Woche mehr oder weniger nützliche Eigenschaften des Publishers. Kommentare gerne an mich per E-Mail oder einfach im Kommentarfeld.
Ich mache ein paar Tage Pause und wünsche euch ein paar geruhsame freie Tage.
Pause mache ich nicht wirklich, sondern arbeite an einer kleinen Überraschung, die hoffentlich Anfang Februar fertig sein wird.
Für uns eine Neuerung: dieses Jahr sind wir Sponsor der Konferenz (genauer:
wir sponsern das Bier auf dem Social Evening 🍻). Und wir haben noch eine
Eintrittskarte (full pass) zu vergeben. Wer die Karte haben möchte, möge sich
melden, entweder per E-Mail oder per Kommentar hier (oder per Twitter).
Auch hier kein Feature an sich, sondern eine (kurze) Erklärung, warum es zwei verschiedene Möglichkeiten gibt, Texte auszugeben.
(Streng genommen gibt es noch Tabellen, aber die lasse ich hier mal außen vor.)
Dies ist eigentlich kein Feature des Publishers, aber trotzdem ein nettes Gimmick, das man dank der Programmiermöglichkeiten des Publishers erzeugen kann.
Was sind Griffmarken?
Griffmarken sind Markierungen an der Außenkante eines Katalogs oder eines Nachschlagewerks, die das aktuelle Kapitel anzeigen.
Griffmarken im Telefonbuch (huch!)
Weniger aufdringlich, trotzdem praktisch
Eine Eigenschaft der Griffmarke ist, dass sie über den rechten Rand bzw. über den linken Rand des Papiers hinaus geht. Das heißt, die Schnittkante der Griffmarke ist im farbigen Bereich, so dass die Farbe auch im zugeklappten Zustand zu erkennen ist.
Umsetzung im Publisher
An Griffmarken ist natürlich nichts besonders, sie sind entweder Boxen oder
Linien in einer bestimmten Farbe. Hier folgt ein Beispiel für Kapitelnummern
in einer quadratischen Box. Der Anschnitt ist auf 3mm festgelegt. Etwas Magie
kommt ins Spiel, wenn ich weiß, wo die Griffmarken sind. Hier sind sie am
rechten Rand und sie sollen natürlich in den Anschnitt mit hinein ragen. Dafür ist bei dem Befehl Box der Parameter bleed="right" gesetzt. Hiermit erstreckt sich die Box um die Beschnittzugabe nach rechts. (Das ist natürlich direkt am Rand sinnvoll.)
Im Beispiel wird die Kapitelnummer in der Variablen kapitel gespeichert und
in einer Schleife ausgegeben. Im »echten Leben« würde man das natürlich in den
Seitentyp (AtPageShipout) einfügen und immer nur eine Griffmarke ausgeben.
Die grüne Linie zeigt das Endformat, die blaue Linie die Außenkante des unbeschnittenen Papiers
Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.7.9. Andere Versionen haben womöglich andere Befehle oder die genannten Befehle zeigen ein anderes Verhalten. Bitte schau im Zweifelsfall in der Anleitung nach.
In der Serie »Feature der Woche« beschreibe ich einmal in der Woche mehr oder weniger nützliche Eigenschaften des Publishers. Kommentare gerne an mich per E-Mail oder einfach im Kommentarfeld.
Eine der bedeutendsten Eigenschaften des Publishers ist die Möglichkeit,
Objekte auf einer virtuellen Seite (Group) zu platzieren, um sie anschließend
auszumessen bzw. zusammenhängend zu platzieren. Diese virtuelle Seite hat erst
einmal keine Breite und keine Höhe. Die Fläche passt sich den Ausmaßen dem
Inhalt an. Somit lassen sich Fragen beantworten wie »Passt der Artikel (mit
Bild und Beschreibung) noch auf die Seite?« oder »Wie sehr muss ich die
Schriftgröße verkleinern, damit der ganze Text auf eine A4-Seite passt?«.
Ebenfalls ist es möglich, diese virtuelle Seite mit einem eigenen Seitenraster
zu versehen. Damit lassen sich zum Beispiel Objekte auf der virtuellen Seite
feiner positionieren, als es mit einem gröberen Seitenraster der Hauptseite möglich ist.
Einige Dinge muss man aber beachten, wenn man die Gruppen einsetzt:
Die Breitenangaben bei Textblöcken und Tabellen sind nun obligatorisch, da es kein »natürliches Maximum« gibt.
Die Seitenraster können nicht mit nx und ny bestimmt werden, sondern nur mit festen Werten für Höhe und Breite.
Bereiche können mit Gruppen nicht kombiniert werden. D.h. bei PlaceObject und ähnlichen Befehlen darf area nicht angegeben werden.
Platzierungen in Gruppen dürfen nicht absolut (z.B. row="2mm") erfolgen.
Ist die Gruppe erzeugt, aber noch nicht platziert, dann kann ich mit bestimmten XPath-Funktionen die Maße der Gruppe ausmessen: sd:group-width('gruppenname') und sd:group-height('gruppenname') geben die Breite in und Höhe in ganzen Rasterzellen aus. Im Beispiel ergibt
<Messageselect="sd:group-height('test')"/>
die Zahl 6 in der Ausgabe, obwohl die Gruppe nur die Höhe von ca. 5,2 Zellen
hat. Der Publisher rechnet im Prinzip immer mit ganzen Rasterzellen.
Damit ist eigentlich schon alles gesagt, was zum Thema Gruppen gehört. Die
Anwendungsfälle sind sehr vielfältig. Im Prinzip geht es hier immer um die
Frage: wie groß sind diese Objekte? Passen sie noch auf die Seite? Muss ich
hier einen Umbruch einfügen? Und so fort. Am besten spielt man ein wenig mit
den virtuellen Seiten, um sich damit vertraut zu machen. Richtig benutzt sind
sie ein mächtiges Werkzeug.
Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.7.9. Andere Versionen haben womöglich andere Befehle oder die genannten Befehle zeigen ein anderes Verhalten. Bitte schau im Zweifelsfall in der Anleitung nach.
In der Serie »Feature der Woche« beschreibe ich einmal in der Woche mehr oder weniger nützliche Eigenschaften des Publishers. Kommentare gerne an mich per E-Mail oder einfach im Kommentarfeld.
Objekte werden immer entweder innerhalb des Rasters platziert oder mit absoluten Maßen. Beide Möglichkeiten
haben ihre Vorteile und Nachteile und lassen sich nicht mischen. Der Befehl,
um Objekte zu platzieren, heißt PlaceObject. Die Reihenfolge der
Objektplatzierungen ist wichtig. Einerseits gibt es bei der Platzierung im
Raster einen virtuellen Cursor, der sich die Position des letzten Objekts
merkt. Andererseits werden später ausgegebene Objekte über die vorherigen
Objekte gelegt.
Manchmal möchte man in Tabellen in Kopf- bzw. Fußzeilen eine Zwischensumme
bzw. Übertrag (engl. etwa »running sum«) ausgeben. Hier ist das Problem, dass
das eine dynamische Information ist, die sich aus dem zur Verfügung stehenden
Platz ergibt. Ist die Seite kürzer, so ist die Summe eine andere. Das heißt,
dass man die Zahl nicht im Vorfeld als Kopf- oder Fußzeile definieren kann.
Nachdem letzte Woche Funkstille war (fast, zumindest gab es keinen Beitrag in der Reihe »Feature der Woche«), ist diese Woche das Thema »Hintergrund in Tabellen« dran.
Einfärben von Zellen
Man einzelne Zellen oder Zeilen einfärben. Dazu gibt es sowohl bei Tr als
auch bei Td das Attribut backgroundcolor vorhanden: