Gedruckte Tabellen bearbeiten

Anforderung

Mit dem Konzept der Feldindizes und der Mustererkennung lassen sich in print2forms ganz leicht Texte an bestimmten Positionen des Blattes abfragen. Will man aber Texte innerhalb von gedruckten Tabellen erkennen, bräuchte man mit diesem Konzept für jede mögliche Tabellenzeile ein eigenes Feld - alle mit dem gleichen Suchmuster aber eben mit unterschiedlichen Feldindizes.

Das wäre ein doch ganz erheblicher Aufwand bei der nachträglichen Bearbeitung von Tabellendaten. print2forms unterstützt daher eine weiteres Konzept, nämlich das der Bereiche von Feldindizes.

Realisierung

Ein Feldindex ist eine zehnstellige Hexadezimalzahl, deren erste zwei Ziffern eine Seitennummer repräsentieren. Die vier nächsten Ziffern stehen für die vertikale Position des Feldes auf dem Blatt und die letzten vier Ziffern stehen für die horizontale Position des Feldes. Die Einheiten für die Positionen sind eigentlich ohne Bedeutung. Nur weil sichergestellt werden muss, dass mit vier Ziffern ein gesamtes Blatt abgedeckt werden muss, ergeben sich Einheiten zu 1/360 Zoll.

In frühen Versionen von print2forms wurden in den Feldindizes sogenannte Wildcards eingeführt. Dabei konnte jede der beiden Positionen mit Fragezeichen aufgefüllt werden, was im Prinzip nichts anderes aussagte, als dass hier jeder Positionswert gültig ist.

Ein Feldindex '01????0100' bezog sich demzufolge auf alle Textstellen auf dem Blatt, die an der horizontalen Position 256/360 Zoll anfangen, unabhängig von deren vertikaler Position. Genauso bezieht sich der Feldindex '010200????' auf alle Textstellen, die an der vertikalen Position 512/360 Zoll stehen.

Bei den Seitenzahlen stand aus historischen Gründen von Anfang an der Wert '00' für eine beliebige Seite, weil in Dokumentenprozessen Indizes benötigt wurden, die sich auf alle Seiten eines Dokuments bezogen. Das ist Gründen der Kompatibilität auch aktuell noch so.

Mit der Version 3.x von print2forms wurden die Wildcards um echte Bereiche erweitert. Ab da war es möglich, mit eckigen Klammern einen minimalen und einen maximalen Wert für einen Positionsbereich anzugeben. '01[0100-1200]0200' bezeichnet demnach alle Textstellen, deren vertikale Position im angegebenen Bereich liegt. Damit wird quasi ein horizontales Fenster (Reihen) über das Blatt gelegt. Entsprechend ein vertikales Fenster (Spalten), wenn für die horizontale Position ein Bereich angegeben wird.

Durch gleichzeitige Angabe eines Bereichs für vertikale und horizontale Position kann ein beliebiges Rechteck auf dem Blatt für den Test des Suchmusters ausgewählt werden.

Für die Bearbeitung von gedruckten Tabellen ist das alles insofern von grosser Bedeutung, als mit den Feldindexbereichen ein einziges Suchmuster jetzt mehrfach gefunden werden kann - zum Beispiel eben in jeder Zeile einer Tabelle.

Als erstes Beispiel soll im Lieferscheindruck der print2forms-Demoinstallation die dort gedruckte Tabelle um die letzten zwei Spalten gekürzt werden. Dazu ist natürlich erforderlich, die einzelnen Tabellenzeilen zu erkennen. Ein Blick in die Indexdatei zeigt, dass die Tabelle bei der vertikalen Position 0681 anfängt, und - hier der Übersicht halber gekürzt - bei 0D11 wieder aufhört.

[p2f]134676739
[Client]3.1.0.5721;A$O4ER.XML
[Param]3.0;10.1.17.27
[Time]24.06.13 17:46:06
[Computer]THINKCENTRE3
[User]Volker
[Model]p2f Printer
[Job]Sample 1
[File]1
[Process]ANLAGEN.XML
[0102C10000]                                                         00001/15
[0103390000]                                                         1704
[0103750000]       Kunde AG
[0103B10000]       Z.Hd. Hr. X. Kunde                                347-57897
[0104290000]       Kundengasse 19                                    15595
[0104650000]       D-48535 Kundendorf
[0104A10000]                                                         Hr. G. Muster
[0105190000]                                                         24.06.2013
[0106810000]      1   HK25FM7  SUB-D Verlaengerung 7.0 m      St     260      0    260
[0106F90000]      2   VGA2MF   SVGA/VGA Verlaengerung 2 m     St     270      0    270
[0107710000]      3   DVID5    DVI Digital Kabel 5 m          St      30      0     30
...
[010C210000]     13   L1GE50   Schaltlitze 0,14x50 m gelb     St      90      0     90
[010C990000]     14   L1SW500  Schaltlitze 0,14x500 m schw.   St      50      0     50
[010D110000]     15   2L1003A  Kabelset AT 3,0 m              St      20      0     20
[Page]
[End]

Demzufolge kann ein Feldindex von '01[0681-0D11]0000' benutzt werden, den Tabellenbereich mit einem Suchmuster zu überprüfen. Ein potentielles Suchmuster für die hier gestellte Aufgabe wäre etwa '(.{60}).*', weil nur die Daten inklusive der ersten Mengenspalte gebraucht werden. Ein einziges Textfeld im Formular reicht dann aus, das gewünschte Ergebnis zu erzielen.

Was beim Druck des Formulars passiert, ist recht gut in der Ablaufverfolgung des Clients oder Gateways zu erkennen:

Hier ist zu sehen, dass das Suchmuster Nummer 5 insgesamt 15-mal an unterschiedlichen Positionen (ohne Seite angegeben) gefunden wurde. Die im ersten Textspeicher des Suchmusters aufgesammelten Texte werden ebenfalls angezeigt. Für jede Fundstelle wird jetzt das Textfeld ausgeführt. Durch die Angabe 'Feld ausblenden: Ja' im Textfeld wurde dafür gesorgt, dass die ursprüngliche Tabellenzeile entfernt wird, und mit der Schablone '\Tabellenzeile:1' wird stattdessen der im ersten Textspeicher des Suchmusters gefundene Text ausgegeben. Die Angaben unter 'Positionierung' veranlassen, dass der Text wieder an der Stelle ausgegeben wird, an der er gefunden wurde.



Bemerkungen