headerbild blog

Feature der Woche: Bearbeiten den Regelwerks mit dem atom-Editor

Der Editor Atom

Der Editor atom erfreut sich großer Beliebtheit. Derzeit sind 6000 Pakete und über 2000 Themes für den OpenSource Editor verfügbar, der auf den gängigen Betriebssystemen läuft.

Seit diesem Wochenende ist nun ein Paket für diesen Editor verfügbar. Installiert wird er mit dem integrierten Paketmanager:

  1. Menü “Preferences” -> “Install”
  2. Dort eingeben speedata und auf “Packages” tippen
  3. Nach dem Klick auf “Install”, ist das Paket installiert.

Alternativ dazu kann man das Paket mit dem Kommandozeilentool apm installieren:

apm install language-speedata-publisher 

Autovervollständigung und Dokumentation im Editor Atom

Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.9.6. 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.

von Patrick Gundlach |

Feature der Woche: Bleed=auto

Ein ganz neues Feature ist die Angabe von bleed="auto" beim Befehl <Image>.

Was ist das Problem?

Im professionellen Druck wird in der Regel nicht auf dem Endformat (z.B. DIN A4) ausgedruckt, sondern auf einem größeren Bogen, der dann zugeschnitten wird. Das erlaubt einen randlosen Druck, wo Bilder oder andere Flächen direkt bis zum Papierrand reichen. Um das zu erreichen, druckt man diese Objekte z.B. 3 Millimeter über den Rand hinweg und schneidet anschließend auf das Endformat.

Dieser sogenannte Beschnitt wird über <Options> gesteuert:

von Patrick Gundlach |

Feature der Woche: Platzierung von Objekten

Im November hatte ich schon die rasterbasierte und die absolute Platzierung im Blog. Nun gibt es Neuigkeiten zur absoluten Positionierung (also mit der Angabe von Längeneinheiten bei row und column bei PlaceObject).

Bisher war es so, dass die rasterbasierte Platzierung Flächen im Raster als belegt markiert und damit keine anderen Objekte auf diesen Flächen ausgegeben werden können. Mit dem Schalter allocate="no" kann man diese Belegung abschalten. Die absolute Ausgabe von Objekten (z.B. column=“3cm” row=“5cm”, vom linken oberen Seiten gemessen) hingegen bewirkt keine Belegung der Flächen.

Diese kann man seit Version 2.9.5 über den Schalter allocate="yes" einschalten. Damit kann man das Umfließen von Texten mit absolut platzierten Objekten kombinieren.

<Layout xmlns:sd="urn:speedata:2009/publisher/functions/en"
  xmlns="urn:speedata.de:2009/publisher/en">

  <SetGrid height="12pt" width="5mm"/>

  <Record element="data">
    <PlaceObject column="12cm" row="1cm" allocate="yes" allocate-left="1mm" allocate-bottom="3mm">
      <Box width="8cm" height="2cm" backgroundcolor="lightblue"/>
    </PlaceObject>
    <Output row="1" allocate="auto">
      <Text>
        <Paragraph>
          <Value select="sd:dummytext(3)"></Value>
        </Paragraph>
      </Text>
    </Output>
  </Record>
</Layout>

allocate-left und allocate-bottom geben den zusätzlichen Rahmen an, der als belegt markiert werden soll. In diesem Fall wird ein Rahmen von mindestens 1mm links von der Box und mindestens 3mm unterhalb der Box eingefügt, immer auf ganze Rasterzellen aufgerundet.

Das Ergebnis:

Die Ausgabe des Listings oben.

Mit <Trace gridallocation="yes" grid="yes" />:

Umfließen mit Rasterbelegung sichtbar gemacht.

Die absolute Platzierung kann auch mit dem Feature der Bildumrisse kombiniert werden. Ein kleines Programm zum Erzeugen der Umrisse habe ich unter https://github.com/speedata/imageshaper veröffentlicht. Damit kann man zu einer Bilddatei eine XML-Datei erstellen, die den Bildumriss enthält. Der speedata Publisher kann dies auswerten und nur die vom Bild belegten Flächen als belegt markieren. Dazu muss nur die XML-Datei zur Bilddatei kopiert werden, so dass der Publisher diese findet.

Ich werde die Tage dazu ein neues Beispiel in das Repsoitory https://github.com/speedata/examples einchecken.

Bildumrisse werden automatisch ausgewertet.

von Patrick Gundlach |

Feature der Woche: Transformation von Objekten

Die vier grundlegenden Transformationen (aus der PDF-Spezifikation)

Mit dem Befehl <PlaceObject> können Texte, Bilder, Kästchen und andere Objekte ausgegeben werden. Ein besonderes Objekt ist die <Transformation>, die Objekte drehen, stauchen und verzerren kann. Der Befehl enthält wiederum das Objekt, das manipuliert werden soll. Das Grundgerüst ist folgendes:

von Patrick Gundlach |

Feature der Woche: Schriftfarbe einer Seite

Letzte Woche habe ich wieder ein Feature eingebaut, das ich in einem aktuellen Projekte benötige: Man kann die Textfarbe nun für eine Seite voreinstellen. Das ist praktisch, wenn z.B. auf der ersten Seite die Textfarbe weiß sein soll (weil auf einem dunklen Hintergrund geschrieben wird) und auf den Folgeseiten schwarz.

Unabdingbar ist das Feature, wenn bei der Textausgabe von <Output> mit <Text> ein Seitenumbruch mitten im Absatz vorkommt. Bisher ist es nicht möglich, dass der Text dann nach dem Umbruch automatisch eine andere Farbe bekommt.

Ich nehme mal das Typographie-Beispiel von Github. Hier wird explizit die Farbe white als Textfarbe eingestellt:

<Layout
    xmlns="urn:speedata.de:2009/publisher/en"
    xmlns:sd="urn:speedata:2009/publisher/functions/en">
    <LoadFontfile name="PlayfairDisplay-Regular" filename="PlayfairDisplay-Regular.ttf" />
    <LoadFontfile name="FaunaOne" filename="FaunaOne-Regular.ttf" />

    <DefineFontfamily name="heading" fontsize="40" leading="48">
        <Regular fontface="PlayfairDisplay-Regular"/>
    </DefineFontfamily>
    <DefineFontfamily name="text" fontsize="9" leading="14">
        <Regular fontface="FaunaOne"/>
    </DefineFontfamily>


    <DefineTextformat name="left" alignment="leftaligned"/>
    <DefineTextformat name="text" alignment="leftaligned" margin-bottom="10pt"/>

    <Pageformat width="210mm" height="140mm"/>

    <Record element="data">
        <PlaceObject column="0mm" row="0mm">
            <Image width="210mm" file="forest.jpg"/>
        </PlaceObject>
        <ProcessNode select="story"/>
    </Record>

    <Record element="story">
        <PlaceObject row="2" column="3">
            <Textblock width="8">
                <Paragraph color="white" fontface="heading" textformat="left">
                    <Value select="upper-case(@title)"/>
                </Paragraph>
            </Textblock>
        </PlaceObject>
        <PlaceObject column="3">
            <Textblock width="10" color="white">
                <ForAll select="p">
                    <Paragraph>
                        <Value select="."/>
                    </Paragraph>
                </ForAll>
            </Textblock>
        </PlaceObject>
    </Record>
</Layout>

Die Alternative ist nun, einen Seitentyp zu definieren, der die Farbe voreingestellt hat:

<Pagetype name="first" test="sd:current-page() = 1" defaultcolor="white">
  <Margin left="1cm" right="1cm" top="1cm" bottom="1cm"/>
</Pagetype>

Hier könnte man auch das Bild ausgeben:

<Pagetype name="first" test="sd:current-page() = 1" defaultcolor="white">
  <Margin left="1cm" right="1cm" top="1cm" bottom="1cm"/>
  <AtPageCreation>
    <PlaceObject column="0mm" row="0mm">
      <Image width="210mm" file="forest.jpg"/>
    </PlaceObject>
  </AtPageCreation>
</Pagetype>

Damit kann man das Regelwerk etwas verkürzen:

<Record element="data">
  <PlaceObject row="2" column="3">
    <Textblock width="8">
      <Paragraph fontface="heading" textformat="left">
        <Value select="upper-case(story/@title)"/>
      </Paragraph>
    </Textblock>
  </PlaceObject>
  <Loop select="4">
    <PlaceObject column="3">
      <Textblock width="10">
        <ForAll select="story/p">
          <Paragraph>
            <Value select="."/>
          </Paragraph>
        </ForAll>
      </Textblock>
    </PlaceObject>
  </Loop>
</Record>

Die Schriftfarbe wechselt automatisch von Weiß zu Schwarz

Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.9.3. 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.

von Patrick Gundlach |

Feature der Woche: CSS und Daten

Mal wieder ein ganz frisches Feature, entwickelt in Prag während der Konferenz.

Manchmal hat man in den Daten

<p>Text, Text, Text <b>Fettdruck</b>, Text Text</p>

Der Publisher sorgt dafür, dass der Text innerhalb des Elements b in Fettdruck erscheint (also auf den entsprechend definierten Schnitt umschaltet).

Ab sofort kann an nun eigene Elemente mit Styles versehen. Wenn man z.B. folgende Daten hat

<data>hello <green>green</green> world</data>

kann man mit CSS das Element einfärben:

von Patrick Gundlach |

Neue stabile Version: 2.8

Pünktlich zur XMLPrague gibt es eine neue stabile Version des Publishers. Es ist ein weiterer Schritt Richtung 3.0. Einige Verhaltensweisen haben sich geändert, weil sie sinnfrei waren. Das hatte ich auch schon im Beitrag vom September geschrieben. Es geht hauptsächlich um das Verhalten des Cursors, wenn man ein Objekt ausgibt, das an den rechten Rand ragt. Auch etliche Bugfixes sind enthalten

Ebenfalls wurde das Verhalten beim Laden von Bildern über href="..." verbessert. Nun können auch Bilder über HTTPS abgerufen werden und gecached werden.

Bei den Trennungen gibt es auch Änderungen: U+2011 NON-BREAKING HYPHEN wird nun als solcher akzeptiert.

Die Liste der Neuigkeiten gibt es wie immer unter https://doc.speedata.de/publisher/de/changelog/

Der Download ist auch an der üblichen Stelle zu finden: https://download.speedata.de/.

von Patrick Gundlach |

Feature der Woche: Farben im speedata Publisher

Die Ausgabe von Farben im speedata Publisher ist sehr einfach. In der Regel reicht eine Angabe bei dem Objekt, das ausgegeben werden soll:

    <PlaceObject column="4" row="4">
      <Circle
         radiusx="2"
         backgroundcolor="deeppink"
         framecolor="mediumaquamarine"
         rulewidth="8pt"/>
    </PlaceObject>

Nicht jede Farbkombination ist schön

Die Angabe der Farben kann auch als Hexadezimalwert angegeben werden, wie bei HTML. Die Syntax hierfür ist ...color="#F0F0F0".

Möchte man Farben in einem anderen Farbraum (CMYK, Grau, Sonderfarben) ausgeben, müssen diese vorher definiert werden:

  <DefineColor name="logofarbe" model="spotcolor" colorname="PANTONE 116 C" />

  <Record element="data">
    <PlaceObject>
      <Box width="5" height="2" backgroundcolor="logofarbe"/>
    </PlaceObject>
  </Record>

Diverse Sonderfarben sind im Publisher vorgegeben, so die Farbe Pantone 116.

Wird eine eigene Sonderfarbe definiert, die noch nicht im Publisher enthalten ist, muss sie CMYK-Werte enthalten, damit im PDF ein Ersatz dargestellt werden kann. Sonderfarben sind im PDF an sich unbekannt und nur als Anweisung für den Drucker vorhanden. Daher müssen im PDF ebenfalls Anweisungen enthalten sein, wie diese Farbe am Bildschirm oder auf Druckern, die diese Sonderfarbe nicht enthalten, ausgegeben werden.

<DefineColor
    name="meinefarbe"
    model="spotcolor"
    colorname="speedatagrün"
    c="56" m="7" y="98" k="21" />

Hier wird eine Farbe definiert, die im Publisher bei den Ausgabebefehlen unter dem Namen meinefarbe angesprochen wird. Im PDF wird diese Farbe unter dem Namen speedatagrün geführt und in der Ausgabe erscheint diese dann in einem dunklen grün.

Die neue Farbe erscheint im PDF als eigener Farbkanal.

Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.8. 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.

von Patrick Gundlach |

Feature der Woche: Fontalias

Diese Woche ein Feature, das noch ganz frisch ist. Es gibt einen neuen Befehl (seit Version 2.7.12):

<DefineFontalias existing="..." alias="..."/>

Was einen alternativen Namen für einen existierenden Fontnamen zu der Liste der bekannten Fontnamen hinzufügt. Die Befehle

von Patrick Gundlach |

Feature der Woche: Einbinden des RelaxNG Schemas

Eine Besonderheit beim speedata Publisher ist sicherlich, dass die Eingabesprache in XML formuliert ist. XML ist in manchen Kreisen nicht sonderlich beliebt, besonders weil es verhältnismäßig »geschwätzig« ist: Man muss für die Start-Tags auch immer Ende-Tags schreiben:

<PlaceObject>
   ...
</PlaceObject>

im Vergleich zu einer C-ähnlichen Schreibweise wie

placeOjbect(...)

ist das schon mehr Tipparbeit. Die Lösung für dieses »Problem« ist die Verwendung eines Texteditors, der gut mit XML umgehen kann. Die Eingabe eines Start-Tags würde beispielsweise sofort auch das Ende-Tag einfügen. Oder bei einer Änderung im Tagnamen würden sowohl Start-Tag als auch das Ende-Tag gleichzeitig geändert werden.

Gute XML-Editoren bewirken aber noch viel mehr, als nur die erleichterte Eingabe von Tags.

Was ist ein Schema?

In einem Schema (z.B. XML-Schema oder RelaxNG) stehen Informationen über den erlaubten Aufbau einer XML-Datei. So steht im Schema, das mit dem speedata Publisher mitgeliefert wird, beispielsweise

  • Das Wurzelelement muss Layout heißen
  • Das Kindelement von PlaceObject muss entweder Barcode, Box, Circle, Frame, Image, Rule, Table, Textblock oder Transformation sein.
  • Das Attribut valign in der Tabellenzeile darf eines der Werte top, middle oder bottom sein
  • u.v.m.

Ebenso steht in dem mitgelieferten Schema die Dokumentation der einzelnen Befehle sowie die der Auwahlmöglichkeiten. Ein guter XML-Editor kann ein solches Schema einlesen und dem Anwender die Eingabe des Quelltextes erheblich erleichtern. Und mit erheblich meine ich das wirklich so. Die Eingabe mit einem guten Schema mach viel Spaß und hat einige Vorteile gegenüber dem klassischen Texteditor:

  • Syntaxfehler werden sofort angezeigt
  • Befehle (Tags) müssen nicht vollständig eingegeben werden, weil der Editor eine Autovervollständigung bietet
  • Die erlaubten Werte in Attributen werden sofort auf sinnvolle Werte überprüft
  • Dokumentation steht direkt im Editor bereit

Im Prinzip das, was man von einer integrierten Entwicklungsumgebung (IDE) erwartet.

Auswahl an erlaubten Kindelementen

Erlaubte Attribute bei Textblock

Einbinden des RelaxNG-Schemas

Die Einbindung eines Schemas ist natürlich stark abhängig vom Editor. Für oXygen XML kann man in den Einstellungen eine neue Dokumenttypen-Zuordnung erstellen. Einerseits muss festlegen, bei welchem Namensraum das Schema benutzt werden soll

Verknüpfungsregeln

Dann muss man noch definieren, welches Schema für diese Verknüpfungsregeln geladen werden soll. Das wird im zweiten Tab der Einstellung festgelegt:

Als Schema RelaxNG + Schematron einstellen

Ab sofort sollte zu jedem Layout im Namensraum

xmlns="urn:speedata.de:2009/publisher/en"

das Schema hinterlegt sein. Das erkennt man daran, dass nun bei Eingabe einer öffnenden spitzen Klammer (<) eine Auswahl der Befehle erscheint.

Ist das Schema richtig eingebunden, dann erscheint eine Auswahlliste sobald man einen Befehl eingibt.

Dieser Artikel bezieht sich auf den speedata Publisher in der Version 2.7.11. 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.

von Patrick Gundlach |