Stichwortverzeichnisse als normaler Text (Anfänderfrage)

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

MKmitta
Beiträge: 2
Registriert: Fr, 08.07.2005 20:11

Stichwortverzeichnisse als normaler Text (Anfänderfrage)

Beitrag von MKmitta »

Hallo,
ich möchte mit einem OpenOffice-Basic-Makro ein Stichwortverzeichnis erstellen, bei welchem die Seitenzahlen als Hyperlinks gestaltet sind die auf die betreffenden Textstellen verweisen. (Das so behandelte Dokument soll mittels extendedPDF von JDiSoftware in das PDF-Format konvertiert werden.)
Deshalb meine Frage:
Wie kann man den druckbaren Inhalt eines Stichwortverzeichnisses als normalen (formatierten) Text in ein Dokument einfügen? Oder wenn das nicht geht: Wie gelangt man an sämtliche Inhalte (auch Schlüsselwörter und die Eigenschaft ob es sich um einen Hauptindexeintrag handelt) von allen Index-Marken innerhalb eines Dokumentes.
Ein weiteres Problem währe zu den Ankern oder der Position der Index-Marken zu gelangen um Text-Cursor zu erzeugen.
Oder kommt dieses Feature mit OpenOffice 2.0?
zap
**
Beiträge: 20
Registriert: Di, 11.01.2005 13:18
Wohnort: Hannover

Beitrag von zap »

Hi MKmitta,

ich hab mal ein bisschen herumexperimentiert:

Code: Alles auswählen

sub Stichwoerter
  dim verzeichnisse
  dim verzeichnis_namen
  doc = ThisComponent
  verzeichnisse = doc.getDocumentIndexes
  verzeichnis_namen = verzeichnisse.getElementNames()
  
  ' alle Verzeichnisse anzeigen lassen
  msgbox Join(verzeichnis_namen, CHR$(10))
  
  ' ein Verzeichnis ist eine Sammlung von Absaetzen
  ' wird also durch ein Textintervall beschrieben
  ' mal den Hintergrund auf gruen setzen
  verzeichnisse.getByIndex(0).anchor.charbackcolor = RGB(0,255,0)
  
  Dim s as String
  Dim i as integer
  ' durch das Verzeichnis selber laufen. Leider sind die eintraege selber
  ' nur Text, a
  AbsatzEnum = verzeichnisse.getByIndex(0).Anchor.CreateEnumeration
  do while AbsatzEnum.hasmoreElements()
    Absatz = AbsatzEnum.nextElement()
    WortEnum = Absatz.CreateEnumeration()
    i = i+1
    s = s & "Absatz " & CStr(i) &"---------" & CHR$(10)
    do while WortEnum.hasmoreElements()
      Wort = WortEnum.nextElement()
      s = s & wort.TextPortionType & CHR$(10)
    loop
  loop
  msgbox s

  ' die verankerung im dokument. auf roten hintergrund setzen
  marken = verzeichnisse.getByIndex(0).documentindexmarks
  s = ""
  for i = 0 to UBound(marken)
  	s = s & marken(i).anchor.string & CHR$(10)
  	marken(i).anchor.charbackcolor = RGB(255,0,0)
  next i
  msgbox s
end sub
Wie man sieht, ist ein Verzeichnis ein einziger Textblock, also kann man nicht auf einzelne Worte zugreifen um Links aus ihnen zu machen. Die einzige Moeglichkeit, die mir einfällt, ist es das Verzeichnis nach dem aktualisieren zu parsen und für jedes wort, dass mit einem stichwort zusammenfaellt die Links auf die Anchor-Eigenschaft zu setzen.

Zap
MKmitta
Beiträge: 2
Registriert: Fr, 08.07.2005 20:11

Beitrag von MKmitta »

Hallo zap,

es tut mir Leid das ich jetzt erst antworte.
Deine Antwort hat mich auf die richtige Spur gebracht, wird mir noch sehr hilfreich sein ohne diese wäre ich wahrscheinlich nicht weiter gekommen, auch wenn meine Frage doof erscheint. Ich sah den Wald vor lauter Bäumen nicht.

Danke
MKmitta
Antworten