[SOLVED] Losowa czcionka w dokumencie

Użytkowanie edytora dokumentów
Biedronas
Posty: 2
Rejestracja: wt sty 24, 2023 12:04 pm

[SOLVED] Losowa czcionka w dokumencie

Post autor: Biedronas »

Cześć,
Borykam się z takim problemem. Mam duży dokument tekstowy. Chciałbym zmienić w nim poszczególne znaki tak, aby każdy z nich był zapisany losową czcionką (z listy 4), rozmiar i formatowanie (pogrubienie, pochylenie, przekreślenia) byłyby takie same. Żeby zobrazować mój problem, załóżmy, że A to dowolny znak zapisany czcionką numer 1, B to dowolny znak zapisany czcionką numer 2, C to dowolny znak zapisany czcionką numer 3, D to dowolny znak zapisany czcionką numer 4. Tak więc chciałbym, aby z "AAAAAAAAAA..." zrobić np. "DCBDAABDCD...".
- cykliczność, czyli zamiast losowego przypisywania czcionki, czcionka zmieniałaby się cyklicznie, tzn. "AAAAAAAAAA..." zmieniło by się na "ABCDABCDAB..."
- zamiast zmieniać pojedyncze znaki, zmieniać całe wyrazy, tzn. "AAA A AAAA AA..." zmienić na "AAA B CCCC DD..."

Niestety do tej pory użytkowałem OpenOffica do bardzo prostych rzeczy, tak więc nie znam jego zaawansowanych funkcji. Będę bardzo wdzięczny za pomoc.
Ostatnio zmieniony wt sty 24, 2023 6:58 pm przez Biedronas, łącznie zmieniany 1 raz.
Libre Office 7.4.3.2 na Windows 10
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Losowa czcionka w dokumencie

Post autor: Jermor »

Nie zrobisz tego standardowymi opcjami i możliwościami Writera.
Trzeba napisać makro.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Biedronas
Posty: 2
Rejestracja: wt sty 24, 2023 12:04 pm

Re: Losowa czcionka w dokumencie

Post autor: Biedronas »

Z pomocą internetu udało mi się zrobić takie makra:

Kod: Zaznacz cały

import random
import string

def change_font_sequence():
    # changing font in sequence: AAAAAAAAA... -> ABCDABCDA...
    letter_fonts = ["Arial", "Tempus Sans ITC", "High Tower Text", "Courier New" ]
    letter_index = 0
    document = XSCRIPTCONTEXT.getDocument()
    viewCursor = document.getCurrentController().getViewCursor()
    viewCursor.gotoStart(False)
    viewCursor.collapseToEnd()
    while viewCursor.goRight(1, True):
        letter = viewCursor.getString()
        viewCursor.CharFontName = letter_fonts[letter_index]
        letter_index = (letter_index + 1)%4
        viewCursor.goRight(0, False)  # deselect
        viewCursor.collapseToEnd()

def change_font_random():
    # changing font randomly: AAAAAAAAA... -> ACBDBCADB...
    letter_fonts = ["Arial", "Tempus Sans ITC", "High Tower Text", "Courier New" ]
    document = XSCRIPTCONTEXT.getDocument()
    viewCursor = document.getCurrentController().getViewCursor()
    viewCursor.gotoStart(False)
    viewCursor.collapseToEnd()
    while viewCursor.goRight(1, True):
        letter = viewCursor.getString()
        viewCursor.CharFontName = random.choice(letter_fonts)
        viewCursor.goRight(0, False)  # deselect
        viewCursor.collapseToEnd()
Wygląda na to, że działa :)
Libre Office 7.4.3.2 na Windows 10
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Losowa czcionka w dokumencie

Post autor: Jan_J »

Wygląda sensownie; nie testowałem.
Jest to nieliczny acz chwalebny przypadek spontaniczniego (tj. nie motywowanego misją oświeceniową) użycia Pythona jako języka do tworzenia makr na naszym forum.
Python jest nowocześniejszy od Basica, ładniejszy jako język i łatwiejszy do zrozumienia. Niestety, zarządzanie kodem makr napisanych w Pythonie jest w Open/LibreOffice trudniejsze wskutek braku zintegrowanego środowiska uruchomieniowego.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ