alte Dokumente unlesbar (Codierung?)

Hallo Matthias,

Das ist der Punkt. Die Textdaten müssen extrahiert werden,

Nach Allem, was ich gelesen habe und auch hier diskutiert wurde, läuft
es (bis auf eine Ausnahme) wohl darauf hinaus - und das ufert leicht
aus.

was einigermaßen komfortabel nur für ODT-Daten funktioniert und auch
nur hier automatisiert werden kann.

Wobei mir nicht klar ist, wie dieser Schritt zzgl. die
Rückkonvertierung ins odt-Format für viele Dateien in einem Rutsch
möglich wäre (ich vermute: gar nicht).

Das ist vermutlich der einfachere Teil des Workflows. Word-Daten sind
komplett binär, das ist nix mit automatisch den Textteil extrahieren.
Erst nach dem Extrahieren ist es möglich mit einem Tool wie recode oä
zu konvertieren.

Ab hier wird es beliebig komplex.....

Eben. Ich aber kann mir solch einen Aufwand nicht ans Bein binden.

Diese Ausführlichkeit, hat einen einfachen Grund: Ich habe schon mit
solch einem Problem gekämpft und dann frustriert aufgegeben. Und das
waren bereits Textdaten, die allerdings von Windows nach Linux
transferiert wurden.

Au weia...

Falls du es doch versuchen willst, läuft das ganze auf Scripten raus.
Werkzeuge mit denen du dann arbeiten müsstest wären
"gzip" / "gunzip" um die SO-/LO-Daten zu entpacken
"find" um sie zu finden und sie dann mit
"mv" oder "cp" zu verschieben oder kopieren
Für das Ersetzen der seltsamen (eigentlich regulären Unicode-)
Zeichen kommen diverse Werkzeuge in Frage: "tr", "sed", "recode" und
wahrscheinlich noch ein paar.

s.o.: Scheitert am Aufwand. Der muss in Grenzen bleiben.

Aus meiner Sicht die einfachste Methode, allerdings auch die mit dem
meisten Stumpsinn (und deshalb durchaus fehleranfäälig):
Mit LO öffnen und über Suchen/ersetzen (eventl mit RegEx-Hilfe) die
Dateien einzeln zu bearbeiten.

Ja, ist wohl die (handwerklich) einfachste, aber eben auch sehr
aufwändig, weil jede einzelne Datei bearbeitet werden muss. Insofern
scheint sich mit der hier vorgeschlagenem (und von mir als bereits
angewandt entdeckten) Makro-Variante das Ganze noch etwas komfortabler
zu gestalten. Offenbar gibt es kein Mittel, solch ein Makro über viele
Dateien auf einmal zu jagen.

Hilfreich wäre nun für mich ein Tipp, wie ich das vorhandene Makro um
weitere Zeichen aufstocke. Gibt es in der entsprechenden Maske dafür
Schalter, Buttons, o.ä.?

Danach sofort als PDF/A exportieren. PDF/A deshalb, weil es ein
ISO-genormtes Archivformat ist, siehe
https://de.wikipedia.org/wiki/PDF/A

Exportiert LO denn nicht in PDF/A?

Viele Grüße

Rainer

Hallo Rainer,

Hilfreich wäre nun für mich ein Tipp, wie ich das vorhandene Makro um
weitere Zeichen aufstocke. Gibt es in der entsprechenden Maske dafür
Schalter, Buttons, o.ä.?

Wieso Schalter und Buttons? Thomas Krumbein hat Dir das schon sehr
ausführlich aufgeschrieben. Du brauchst, wenn Du das Makro fertig hast,
nur einen Button - und den drückst Du, wenn so ein Dokument mit den
merkwürdigen Zeichen auftaucht. Dann werden alle Zeichen, die Du in dem
Array aSearch aufgezeigt hast durch die Zeichen in aReplace ersetzt.

Auch wie so ein Makro in eine Symbolleiste eingebaut werden kann steht
in Thomas Mail.

Gruß

Robert

Hallo Robert,

>
> Hilfreich wäre nun für mich ein Tipp, wie ich das vorhandene Makro
> um weitere Zeichen aufstocke. Gibt es in der entsprechenden Maske
> dafür Schalter, Buttons, o.ä.?

Wieso Schalter und Buttons? Thomas Krumbein hat Dir das schon sehr
ausführlich aufgeschrieben. Du brauchst, wenn Du das Makro fertig
hast, nur einen Button - und den drückst Du, wenn so ein Dokument mit
den merkwürdigen Zeichen auftaucht.

Das weiß ich doch alles. Offenbar aber ist Dir mein Posting von heute
morgen 9.14 Uhr entgangen, mit dem (bzw. zusammen mit dem von 1 Stunde
vorher) ich Deinem von 7.59 Uhr geantwortet hatte. Es enthielt einen
Hinweis darauf, dass ich bereits ein funktionierendes Makro habe und
einen Link auf eine Seite mit dem Inhalt:

https://paste.ubuntu.com/p/c8N2rqKTzB/

Es geht mir also um genau die Frage von hier weiter oben: Wie ich das
vorhandene Makro um weitere Zeichen aufstocke (und nicht darum, wie
ich ein neues erstelle). Zitat aus meiner Mail von heute Morgen:

Die von mir erwähnten, zusätzlichen Zeichen sind zwar nicht dabei,
aber es ist gut möglich, dass ich sie damals noch gar nicht benutzt
habe. Falls erforderlich, müsste ich das Makro erweitern. Die Frage
ist nur: Wie geht das? Ins vorhandene Makro einfach einen Abschnitt
per copy 'n' paste neu einfügen und anpassen?

Viele Grüße

Rainer

Hallo Rainer,

Das weiß ich doch alles. Offenbar aber ist Dir mein Posting von heute
morgen 9.14 Uhr entgangen, mit dem (bzw. zusammen mit dem von 1 Stunde
vorher) ich Deinem von 7.59 Uhr geantwortet hatte. Es enthielt einen
Hinweis darauf, dass ich bereits ein funktionierendes Makro habe und
einen Link auf eine Seite mit dem Inhalt:

https://paste.ubuntu.com/p/c8N2rqKTzB/

Das, was Du da hast, kann das natürlich bewerkstelligen, macht aber doch
nicht das, was das Makro von Thomas macht. Da steht in ca. 15 Zeilen
alles, was Du komplett brauchst - nichts zum Aufstocken eines Suchmakros
von über 300 Zeilen. Die Paare für die Zeichen stehen bei Thomas in den
Arrays.
Du brauchst aus Deinem Makro nur die Paare
args5(10).Name = "SearchItem.SearchString"
args5(10).Value = "§"
args5(11).Name = "SearchItem.ReplaceString"
args5(11).Value = "ß"

args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "š"
args4(11).Name = "SearchItem.ReplaceString"
args4(11).Value = "ö"

... usw.

und hast dann bei Thomas Makro
aSearch = array("§","š", usw.)
aReplace = array("ß","ö", usw.)

Die ganzen zusätzlichen Zeilen in Deinem Makro sind bei dem, was Thomas
aufgeschrieben hat, unnötig. Du brauchst dafür pro Buchstabe ein Array
von 18 Paaren(args(0) bis args(18). In dem Makro von Thomas sind das 2
Arrays, bei denen lediglich die Buchstaben paarweise eingetragen werden
müssen).

Gruß

Robert

Hallo Robert,

>
> https://paste.ubuntu.com/p/c8N2rqKTzB/

Das, was Du da hast, kann das natürlich bewerkstelligen, macht aber
doch nicht das, was das Makro von Thomas macht.

Sorry, aber ich habe keine Ahnung vom Umgang mit Makros und weiß auch
nicht mehr, wie ich zu dem vorhandenen gekommen bin. Dass das von
Thomas ein (bis auf vielleicht ein paar mehr, noch fehlende Zeichen)
komplettes und im Vergleich zu meinem abgespecktes ist, war mir nicht
klar.

Da steht in ca. 15 Zeilen alles, was Du komplett brauchst - nichts
zum Aufstocken eines Suchmakros von über 300 Zeilen. Die Paare für
die Zeichen stehen bei Thomas in den Arrays.

[..]

und hast dann bei Thomas Makro
aSearch = array("§","š", usw.)
aReplace = array("ß","ö", usw.)

Die ganzen zusätzlichen Zeilen in Deinem Makro sind bei dem, was
Thomas aufgeschrieben hat, unnötig. Du brauchst dafür pro Buchstabe
ein Array von 18 Paaren(args(0) bis args(18). In dem Makro von Thomas
sind das 2 Arrays, bei denen lediglich die Buchstaben paarweise
eingetragen werden müssen).

OK.

Die Frage ist, wie schreite ich zur Tat? Leeres Textdokument öffnen ->
Extras -> Makros -> Makro aufzeichnen -> ins leere Dokument das (um ein
paar weitere Zeichen ergänzte) Makro von Thomas hineinkopieren?

Wenn sich herausstellen sollte, dass noch nicht alle Zeichen erfasst
wurden: Lässt sich das Makro dann ändern (erweitern)?

Und wenn mir etwas nicht auf Anhieb gelingt: Wie werde ich fehlerhafte
Makros bzw. Module wieder los? Derzeit sieht es so bei mir aus:

http://sambalada.de/Makros.png

Aber wenn ich z.B. ein Modul markiere, finde ich nirgends eine
Funktion, mit der ich es löschen könnte. Wenn ich es wüsste, wäre ich
beim Ausprobieren wohl etwas mutiger :wink:

Viele Grüße

Rainer

Schau mal da:

https://wiki.documentfoundation.org/images/9/94/ErsteSchritte_Handbuch_Kapitel_13_MakrosEinfuehrung_V52.pdf

Gruß
Hans-Werner

------ Originalnachricht ------

Hallo Rainer,

zuerst einmal diesen Inhalt von Thomas kopieren:

SUB MySearchReplace
  dim aSearch()
  dim aReplace()

  aSearch = array("§","š")
  aReplace = array("ß","ö")

For i = 0 to ubound(aSearch)
   oReplace = ThisComponent.CreateReplaceDescriptor
   With oReplace
     .SetSearchString(aSearch(i))
     .SetReplaceString(aReplace(i))
     .SearchCaseSensitive = True
   end with
   ThisComponent.replaceAll(oReplace)
next
END SUB

Das Makro kannst Du später ergänzen. In dem Arraypaar stehen jetzt nur
die Zuordnungen § → ß und š → ö. Da kannst Du weitere Zuordnungen
ergänzen, indem Du immer ein Komma setzt und dann den neuen Wert
eingibst - auch später noch, wenn das Makro längst abgespeichert ist.

Öffne nach dem Kopieren
Extras > Makros > Makros verwalten > LibreOffice Basic
Unter Meine Makros > Standard > Module1 kannst Du über Bearbeiten den
Editor öffnen. Gegebenenfalls hast Du hier noch kein Modu. Das muss
vorher erstellt werden.
Hast Du den Writer geöffnet, so geht auch
Extras > Makros > Makros bearbeiten
Dann landest Du direkt in dem Ordner "Standard".

In das dortige Modul fügst Du das obige Makro ein. Würdest Du jetzt von
einem der "befallenen" Dateien das Makro über
Extras > Makro ausführen
starten, so würden eben nur die 2 bisher verzeichneten Paare ausgetauscht.

Über
Extras > Symbolleisten > Kategorie "Makros"
kannst Du das Makro aussuchen und über den Pfeil nach rechts der
Symbolleiste "Standard" hinzufügen. Der Titel des Makros erscheint jetzt
ausgeschrieben als "MySearchReplace" ganz rechts auf der Symbolleiste.
Du benötigst also kein Symbol, wenn Du auch mit der Textfassung
zufrieden bist.

Über den Button kannst Du jetzt das Makro direkt starten, sobald Du ein
"befallenes" Dokument hast.

Anschließend kannst Du auch weiterhin noch Paare zu dem Makro hinzufügen.

Gruß

Robert

Hallo Robert,

SUB MySearchReplace

  Snip

END SUB

Nebenbei mal ne ergänzende Frage: Welche Programmiersprachen werden für die
Makroprogrammierung eigentlic unterstützt

Bitte nur kurzen Hinweis, Link tut's auch.

Hey Matthias,

eigentlich.... fast alle;)

Mit der eingebauten IDE:  nur LO-Basic (bedingt auch VBA im Kompatibilitätsmodus - keine volle Objektunterstützung!)

Ansonsten nativ: Python, JavaScript, C++ und in Verb. mit JRE auch Java

Über entsprechende Bridges (Verbindungsobjekte) auch so ziemlich alle wichtigen Sprachen , also auch z.B. PHP etc.

Läuft alles im Ergebnis auf die UNO-Objekte hinaus. Die musst Du halt ansprechen und verarbeiten:)

VG

Thomas

Hallo Thomas,

Hey Matthias,

eigentlich.... fast alle;)

Danke, das reicht mir als Auskunft.

Rest gelöscht weil erschöpfend.

Mit der eingebauten IDE: nur LO-Basic (bedingt auch VBA im
Kompatibilitätsmodus - keine volle Objektunterstützung!)

Nicht in LO's eigener IDE bearbeitbar, aber zumindest über ein
Editierfenster in LibreOffice mit debuggingfunktionalität:
javascript/beanshell (rhino JS editor/debugger)

Ansonsten nativ: Python, JavaScript, C++ und in Verb. mit JRE auch Java

javasript/beanshell auch nur in Verbindung mit einer JRE

ciao
Christian

Hallo Robert,

zuerst einmal diesen Inhalt von Thomas kopieren:

Habe ich gemacht und nur diese Zeile:

SUB MySearchReplace

vorläufig in "SUB Zeichen" umbenannt.

Das Makro kannst Du später ergänzen. In dem Arraypaar stehen jetzt nur
die Zuordnungen § → ß und š → ö. Da kannst Du weitere Zuordnungen
ergänzen, indem Du immer ein Komma setzt und dann den neuen Wert
eingibst - auch später noch, wenn das Makro längst abgespeichert ist.

Das ist gut. Deshalb habe ich es zunächst versuchsweise bei den beiden
Arraypaaren belassen.

Öffne nach dem Kopieren
Extras > Makros > Makros verwalten > LibreOffice Basic
Unter Meine Makros > Standard > Module1 kannst Du über Bearbeiten den
Editor öffnen.
Hast Du den Writer geöffnet, so geht auch
Extras > Makros > Makros bearbeiten
Dann landest Du direkt in dem Ordner "Standard".

In das dortige Modul fügst Du das obige Makro ein.

Hat geklappt:

http://sambalada.de/LO_Basic_Makros.png

Würdest Du jetzt von einem der "befallenen" Dateien das Makro über
Extras > Makro ausführen starten, so würden eben nur die 2 bisher
verzeichneten Paare ausgetauscht.

Hat bei meinem Test funktioniert.

Extras > Symbolleisten > Kategorie "Makros"
kannst Du das Makro aussuchen und über den Pfeil nach rechts der
Symbolleiste "Standard" hinzufügen.

Hier:

http://sambalada.de/SL_Makros.png

ist zu sehen, dass die Pfeile ausgegraut sind und nichts geht. Hat eine
Weile gedauert, bis ich herausgefunden hatte, dass sich der Zustand
nicht durch einen Klick auf das vorangestellte "+" ändern lässt,
sondern durch einen Doppelklick auf "Zeichen". Dadurch sind nicht nur
die Makros zu sehen, sondern werden auch die Pfeile in der Mitte
aktiviert, und eine Schaltfläche lässt sich wie gewünscht einrichten.

Der Rest ist Such- und Fleißarbeit. Die bekannten Arraypaare übersetze
ich später und anschließend immer die, auf die ich im Laufe der Zeit
stoße.

Vielen Dank und viele Grüße

Rainer

Hallo Rainer,

http://sambalada.de/SL_Makros.png

Das sieht bei mir etwas anders aus. Bei mir öffnet sich auf einen Klick
auf das führende Zeichen ">" (bei Dir "+") der komplette Verzeichnisbaum
von "Meine Makros". Und wenn ich dann das Makro anklicke, das ich haben
will, dann sind die Pfeile auch aktiv.

ist zu sehen, dass die Pfeile ausgegraut sind und nichts geht. Hat eine
Weile gedauert, bis ich herausgefunden hatte, dass sich der Zustand
nicht durch einen Klick auf das vorangestellte "+" ändern lässt,
sondern durch einen Doppelklick auf "Zeichen".

"Zeichen" sehe ich bei Dir im Screenshot nicht. Ich hätte dort direkt
"+" betätigt.

Funktioniert jetzt aber doch, oder habe ich das falsch verstanden?

Gruß

Robert

Hallo Robert,

>
> http://sambalada.de/SL_Makros.png

Das sieht bei mir etwas anders aus. Bei mir öffnet sich auf einen
Klick auf das führende Zeichen ">" (bei Dir "+") der komplette
Verzeichnisbaum von "Meine Makros". Und wenn ich dann das Makro
anklicke, das ich haben will, dann sind die Pfeile auch aktiv.
>

Wie gesagt: Ein Klick auf "+" bewirkt nichts (keine Reaktion).

> ist zu sehen, dass die Pfeile ausgegraut sind und nichts geht. Hat
> eine Weile gedauert, bis ich herausgefunden hatte, dass sich der
> Zustand nicht durch einen Klick auf das vorangestellte "+" ändern
> lässt, sondern durch einen Doppelklick auf "Zeichen".

"Zeichen" sehe ich bei Dir im Screenshot nicht.

Stimmt. Ich wahl wohl im Tran und habe versehentlich "Zeichen"
geschrieben, obwohl es hätte "Meine Makros" heißen müssen :wink:

Funktioniert jetzt aber doch, oder habe ich das falsch verstanden?

Ja, funktioniert bestens.

Viele Grüße

Rainer

Hallo zusammen,

nachgefragt:

> Danach sofort als PDF/A exportieren. PDF/A deshalb, weil es ein
> ISO-genormtes Archivformat ist, siehe
> https://de.wikipedia.org/wiki/PDF/A
>
Exportiert LO denn nicht in PDF/A?

Weiß hier jemand, ob LO in PDF/A exportiert oder ob ich prüfen kann, ob
es sich bei einem exportierten LO-Dokument um das Format handelt? Die
Wiki-Seite bietet zwar einen Link zu einer entsprechenden Seite an, und
dort ist von einem Checker die Rede. Aber schlau werde ich nicht
daraus. Scheint eine Software zu sein.

Viele Grüße

Rainer

Hallo Rainer,

ein bisschen selbst recherchieren wäre auch ganz gut:
Datei -> Expoertieren als -> Als PDF exportieren..., dann hast du unter ALlgemein auf der rechten Seite u.s. die Auswahl PDF/A

Gruß

Gerhard

Hallo Gerhard,

ein bisschen selbst recherchieren wäre auch ganz gut:

Du weiß sicher, dass ich nicht recherchiert habe?

Datei -> Expoertieren als -> Als PDF exportieren..., dann hast du
unter ALlgemein auf der rechten Seite u.s. die Auswahl PDF/A

Danke. Diesen Weg bin ich noch nie gegangen, sondern habe immer die
Schaltfläche benutzt - und dort gibt es diese Option nicht.

Da ich mittlerweile ja massenhaft pdf-Dateien habe: Lässt sich prüfen,
ob die im PDF/A-Format angelegt wurden?

Viele Grüße

Rainer

Hallo Rainer,

ich habe es ausprobiert und einfach eine PDF/A-Datei erzeugt. Wenn ich sie im Acrobat-Reader öffne, erscheint eine Info-Meldung, die beginnt mit "Diese Datei verlangt Konformität mit dem PDF/A-Standard". Durch Klicken auf das i im Kreis davor kann man die Meldung aus- und einblenden, also ggf. da drauf klicken.
Weitere Informationen, ob das Dokument PDF/A unterstützt, habe ich im Dokument nicht entdecken.
Aber vielleicht hilft dir das Tool zum Prüfen weiter, das unter https://verapdf.org/ zu finden. Diese Seite habe ich über den Wikipedia-Artikel über PDF/A gefunden.

Gruß

Gerhard

Hallo Gerhard,

ich habe es ausprobiert und einfach eine PDF/A-Datei erzeugt. Wenn
ich sie im Acrobat-Reader öffne, erscheint eine Info-Meldung, die
beginnt mit "Diese Datei verlangt Konformität mit dem
PDF/A-Standard". Durch Klicken auf das i im Kreis davor kann man die
Meldung aus- und einblenden, also ggf. da drauf klicken.

Deine Rahmenbedingungen sind andere, als meine: Du arbeitest mit
Windows, ich mit Linux, und Du benutzt den Acrobat-Reader, ich Atril.

Weitere Informationen, ob das Dokument PDF/A unterstützt, habe ich im
Dokument nicht entdecken.

Ich inzwischen schon: Schaue ich in einem geöffneten Dokument unter
Eigenschaften nach, ist dort eine Zeile "Format" zu finden und darin
z.B. "PDF-1.4".

Aber vielleicht hilft dir das Tool zum Prüfen weiter, das unter
https://verapdf.org/ zu finden. Diese Seite habe ich über den
Wikipedia-Artikel über PDF/A gefunden.

Hatte ich auch schon vor meiner Nachfrage und deshalb im Posting
geschrieben:

Die Wiki-Seite bietet zwar einen Link zu einer entsprechenden Seite
an, und dort ist von einem Checker die Rede. Aber schlau werde ich
nicht daraus. Scheint eine Software zu sein.

Natürlich hatte ich mir vorher angesehen, wie weit ich mit "Explore ->
Validation" komme, bin auf der Seite aber hängengeblieben.

Abgesehen davon scheint mir die Sache aussichtslos: Auf meinem System
befinden sich dermaßen viele pdf-Dokumente, die so verstreut sind, dass
ich mir nicht vorstellen kann, wie sie alle ins PDF/A-Format zu bringen
sein könnten. Hinzu kommt, dass sie aus verschiedensten Quellen stammen
(LO, Scanner, Download, etc.) und verschiedene Format-Angaben
enthalten. Und auf das Format neuer Dokumente, die mittels Druckfunktion
von Websites generiert werden, habe ich keinen Einfluss (müssten also -
sofern möglich - vom abgespeicherten Format wieder ins PDF/A
konvertiert werden). Meine Einschätzung: Praktisch nicht umsetzbar,
weil der Aufwand viel zu groß.

Viele Grüße

Rainer

Hallo,

vorweg: Ich habe (aus Zeitgründen) die bisherige Diskussion nur sporadisch verfolgt, ich erinnere, Du nutzt LINUX?
Folgender Abschnitt ist mir aufgefallen:

Abgesehen davon scheint mir die Sache aussichtslos: Auf meinem System
befinden sich dermaßen viele pdf-Dokumente, die so verstreut sind, dass
ich mir nicht vorstellen kann, wie sie alle ins PDF/A-Format zu bringen
sein könnten. Hinzu kommt, dass sie aus verschiedensten Quellen stammen
(LO, Scanner, Download, etc.) und verschiedene Format-Angaben
enthalten. Und auf das Format neuer Dokumente, die mittels Druckfunktion
von Websites generiert werden, habe ich keinen Einfluss (müssten also -
sofern möglich - vom abgespeicherten Format wieder ins PDF/A
konvertiert werden). Meine Einschätzung: Praktisch nicht umsetzbar,
weil der Aufwand viel zu groß.

Ich denke, Du kannst mit einem BASH / find eine Liste aller PDF-Dateien erzeugen, egal wo sie auf Deiner Platte gespeichert sind.
So weit ich in Erinnerung hatte, prüft OCRmyPDF, ob bereits durchsuchbarer Text vorhanden ist und fügt ihn hinzu, falls dies noch nicht vorhanden ist; siehe hierzu diese Diskussion. <https://github.com/jbarlow83/OCRmyPDF/issues/72>
Ich habe es nicht getestet, aber wenn das so funktioniert, könntest Du wieder per BASH Deine Liste durch OCRmyPDF schicken und die neue erzeugten Files speichern lassen. Schließlich  - wenn gewünscht - die alten Dateien nach Listeneinträgen löschen und die neuen nach den Listeneinträgen umbenennen.

Gruß
Michael