Texte und Bereiche suchen in 4D Write Pro 17.2

Hallo Forum,

ich bin gerade auf der Zielgeraden, meine 4D Write Dokumente in das 4D Write Pro Format zu konvertieren. Allerdings habe ich hier und da einige Fontprobleme, die ich gerne prozedual glattbügeln würde.
Ich tue mich allerdings sehr schwer, die Inhalte des 4D Write Pro Dokumentes auszulesen. Vielleicht hat ja jemand mal einen Tip, wie ich folgende Routine bewerkstellige:

  • Suchen von String “Text1” in 4D Write Pro Dokument
  • Suchen von String “Text2” in 4D Write Pro Dokument
  • Ändern des Fonts für den Bereich zwischen “Text1” und “Text2”

Der Text in 4D Write Pro enthält schon Stilangaben, die aus 4D Write konvertiert wurden.
Ich nutze derzeit 4D 17.2 - 32 bit als Client-Server auf OSX 10.14.6.

Danke für jede Hilfe.

Gruß,
Marc Mennigmann

Schriften können dann nicht mehr passen, wenn das Dokument beschädigt wäre, alte OS 9 Schriften verwnedet werden oder es diese Schriften unter OS 10.14.6 (COCOA) einfach anders aussehen, breiter laufen, …

Frage ist nun, Reparatur bereits im alten 4D Write durchführen, oder erst nach der Konvertierung. Im alten 4D Write kennen Sie die Befehle dazu sicher und können das in einer Offscreen Area machen. Sind die Dokumente “sehr alt”, ist die Frage, ob sich orgendein Aufwand dazu noch lohnt, oder wer die Arbeit zahlt. Bei neueren oder aktuellen Dokumenten ist das sicher anders.

Wollen Sie nach der Konvertierung ändern, dann gibt es 2 Wege:

  • über Befehle aus dem kapitel Mehrfachstiltext. ST Get text oder ST Get plain text. Dann den Text mit ST GET/SET ATTRIBUTES entsprechend abfragen oder setzen.
  • Mit Position die Start- und Endposition abfragen. Den Text mit WP Text range quasi auswählen und dann mit WP GET/SET ATTRIBUTES arbeiten.

Danke für die Hilfe. Ich konnte mein Problem bereits durch Antworten im Englischsprachigen Forum lösen.
Der Vollständigkeit halber hier mal den resultierenden Code. Vielleicht ist er ja an anderer Stelle für ein ähnliches Prolem hilfreich.

Ich habe sehr alte als auch einfach nur “normal alte” 4D Write Dokumente, die ich nun alle auf 4D Write Pro konvertiert habe. Nach der Konvertierung bügel ich jetzt die Darstellungsfehler mit folgender Routine glatt. Für meine Zwecke musste ich die Bildbreite des Logos im Kopfteil setzen, welche unter 4D Write Pro anders interpretiert wird, als auch einige Änderungen im Dokumenten und Fußteil:

// 4DWP_HealOldDocuments

C_OBJECT($headerSource;$rangeSource;$bodySource;$footerSource)

// the edits
$DurchschussDok:=“100%”
$DurchschussFoot:=“110%”
$widthLogo:=“85pt”

// als erstes Bild im Headerbereich und durchschuss
$headerSource:=WP Get header([RECHNUNG]oRechnung_4DW;1;wk first page)
If ($headerSource#Null)
$rangeSource:=WP Create range($headerSource;wk start text;wk end text)
$oPicts:=WP Create picture range($rangeSource)
WP SET ATTRIBUTES($oPicts;wk width;$widthLogo)
WP SET ATTRIBUTES($rangeSource;wk line height;$DurchschussDok)
End if

// jetzt footer
$footerSource:=WP Get footer([RECHNUNG]oRechnung_4DW;1;wk first page)
If ($footerSource#Null)
$rangeSource:=WP Create range($footerSource;wk start text;wk end text)
WP SET ATTRIBUTES($rangeSource;wk line height;$DurchschussFoot)
End if

// jetzt body
$bodySource:=WP Get body([RECHNUNG]oRechnung_4DW)
If ($bodySource#Null)
$rangeSource:=WP Create range($bodySource;wk start text;wk end text)
WP SET ATTRIBUTES($rangeSource;wk line height;$DurchschussDok)
$text:=WP Get text($rangeSource;wk expressions as space)
$p1:=Position(Char(19)+":";$text)
$p2:=Position(Char(13);$text;$p1)
$rangeFind:=WP Create range($rangeSource;$p1;$p2)
WP SET ATTRIBUTES($rangeFind;wk font;“Frutiger Light”)
// WP SET ATTRIBUTES($rangeFind;wk font bold;wk true)
// WP SET ATTRIBUTES($rangeFind;wk font bold;wk false)
End if

Damit klappt’s für meine Zwecke ganz hervorragend.