4.6.10

Kody paskowe w OpenOffice.org


W dzisiejszych czasach kod paskowy (czy kod kreskowy, jeśli ktoś woli) musi znaleźć się na każdym towarze: książce, gazecie, płycie, jogurcie czy opakowaniu chleba. Dlatego coraz częściej potrzebujemy też wstawiać kody paskowe w dokumentach, aby móc je umieszczać na opakowaniach.
Rozwiązania komercyjne do tworzenia kodów paskowych potrafią kosztować nawet kilka tysięcy euro, chociaż z informatycznego punktu widzenia tworzenie ich jest sprawą banalną. Istnieje co prawda od lat pakiet GNU Barcode, który oczywiście jest bezpłatny, ale niestety, jego obsługa wymaga co najmniej znajomości wiersza poleceń, a w dodatku czasem pojawiają się problemy: niektóre kody nie są generowane poprawnie... Rozwój tego projektu zatrzymał się w roku 2002, więc małe szanse, że ktoś to poprawi.
Ale od czego OpenOffice.org i jego rozszerzenia? Istnieje rozszerzenie Barcode, które świetnie nadaje się do tego celu. Wystarczy pobrać plik ze strony (zielona ikonka "Get it"), kliknąć go dwa razy i zainstaluje się w programie OpenOffice.org Draw – trzeba oczywiście zaakceptować licencję. Następnie zamykamy OpenOffice.org (łącznie z modułem szybkiego uruchamiania) i otwieramy ponownie, wybierając aplikację Draw (lub opcję Rysunek z ekranu startowego).
W menu Wstaw zobaczymy nowe polecenie Barcode:

Wystarczy je wybrać, a pojawi się okienko, w którym wybiera się standard kodu:

Oto przykład - kod przepisany z zeszytu (a więc EAN-13, wybrałem obliczenie cyfry kontrolnej – a więc przepisałem tylko 12 cyferek, a proszę kod się zgadza):

Teraz mógłbym zapisać plik w formacie obsługiwanym przez Draw (lub wyeksportować do pliku PDF) i już miałbym piękny, dorodny kod kreskowy :) Ale to tylko przykład, więc efektu nie zapisałem.

5.4.10

Odblokowywanie dokumentu do edycji

Czasami po zakończeniu przenoszenia plików, lub po zmianie uprawnień, podczas otwarcia dokumentu wyskakuje komunikat informujący o zablokowaniu dokumentu do edycji przez innego użytkownika.

Komunikat ten w języku angielskim brzmi:

Document file nazwa_pliku.odt is locked for editing By użytkownik (DD.MM.YYYY HH:MM)

Co zostało przetłumaczone na "Plik dokument "nazwa_pliku.odt" w dniu 05.04.2010 01:12 został przez Ciebie na innym systemie zablokowany przed edycją".

Aby odzyskać do niego dostęp, należy w opcjach środowiska ustawić, aby system pokazywał pliki ukryte. Dla środowiska KDE będzie to skrót Alt+. (klawisz Alt + klawisz kropki), a dla środowiska GNOME będzie to kombinacja Ctrl+H.

Następnie szukamy przezroczystego pliku z nazwą .~lock.nazwa_pliku.odt# i zwyczajnie go usuwamy.

Bardziej zaawansowani użytkownicy mogą go wyedytować i odblokować dostęp tylko sobie, a zablokować go pozostałym grupom.

26.3.10

Poprawka dla autokorekty w OpenOffice 3.2

Autokorekta – poprawianie w czasie pisania – w OpenOffice.org 3.2 przestała działać z powodu drobnego błędu w pliku. Wystarczy otworzyć Narzędzia > Opcje autokorekty..., aby przekonać się, że na karcie Zamień nie ma żadnych wpisów.

Błąd udało się wykryć i zlikwidować, a tutaj udostępniam proste lekarstwo: wystarczy zapisać ten plik na dysku (po kliknięciu prawym przyciskiem myszy), a następnie kliknąć dwukrotnie (lub jednokrotnie w zależności od systemu). Po zainstalowaniu rozszerzenia (i być może też ponownym uruchomieniu OpenOffice.org) na karcie Zamień pojawią się wpisy.

Poprawka jest niepełna, bo nie można normalnie redagować takiej poprawionej autokorekty, ale lepszy rydz niż nic :)

4.3.10

Tworzymy i publikujemy blog z poziomu OpenOffice.org.

Co prawda OpenOffice.org jest przede wszystkim pakietem biurowym, możemy jednak wykorzystać jego zdolność łączenia się z zewnętrznymi systemami zarządzania bazami danych, jak MySQL, by stworzyć wygodne rozwiązania, rozszerzające jego funkcje poza zwyczajne redagowanie dokumentów. Możemy na przykład połączyć OpenOffice’a z bazą danych aplikacji do blogowania, co pozwoli pisać i publikować posty bezpośrednio z Writera. Brzmi to może jak zadanie dla zawodowego programisty, ale w rzeczywistości wystarczy kilka prostych makr.

Rysunek 1: Doskonałym kandydatem do naszego zadania będzie Bilboblog.

Elementy układanki

By ułatwić zrozumienie działania tego projektu, podzielę jego wykonanie na kilka kroków. Najpierw powinniśmy zainstalować i skonfigurować aplikację do blogowania. Teoretycznie do naszych celów nada się każda z nich, o ile korzysta z bazy danych MySQL. W praktyce powinniśmy jednak wybrać niezbyt skomplikowany program, posługujący się prostą bazą danych. W naszym przykładzie użyjemy nieco zmodyfikowanej wersji aplikacji do blogowania Bilboblog (Rysunek 1) [1]. Przechowuje ona treści w prostej tabeli z zaledwie trzema polami, dzięki czemu nadaje się idealnie do wykorzystania w naszym projekcie.

Będziemy również potrzebować serwera PHP / MySQL lub konta na odpowiednim serwisie, gdzie będziemy mogli zainstalować Bilbobloga. By to zrobić, wystarczy stworzyć bazę danych MySQL (na przykład bilboblog), pobrać najnowszą wersję aplikacji, rozpakować archiwum i przenieść jego zawartość (katalog bilboblog) do katalogu głównego na serwerze. Nadajemy mu prawa zapisu i poprzez przeglądarkę przechodzimy do http://twojserwer/bilboblog. Tu wypełniamy wymagane pola i klikamy Install.

Rysunek 2: Konfiguracja połączenia z MySQL-em za pomocą aplikacji Database Wizard.

Następnie musimy połączyć OpenOffice’a z bazą danych Bilbobloga. W tym celu potrzebujemy rozszerzenia Sun MySQL Connector dla OpenOffice.org [2], które integruje się bezpośrednio z naszym pakietem biurowym i umożliwia połączenie z bazą danych (Rysunek 2). By go zainstalować, pobierzmy najnowszą wersję rozszerzenia. W OpenOffice.org wchodzimy w Narzędzia | Menedżer rozszerzeń, wciskamy przycisk Dodaj i wybieramy pobrany plik .oxt. Teraz wystarczy zrestartować OpenOffice – i gotowe.

Rysunek 3: Struktura bazy danych bilboblog.

Na koniec tworzymy prosty plik bazy danych (Base), łączący pakiet biurowy z bazą danych Bilbobloga (domyślnie bilboblog). W tym celu w OpenOffice.org wybieramy Plik | Nowy | Baza danych, zaznaczamy opcję Połącz z istniejącą bazą danych i wyszukujemy na liście rozwijanej MySQL. Teraz wciskamy Dalej i zaznaczamy opcję Connect native. W kolejnym kroku określamy ustawienia połączenia z bazą danych i nazwę użytkownika, a następnie zaznaczamy pole Wymagane hasło.

By sprawdzić, czy połączenie funkcjonuje prawidłowo, wciskamy przycisk Testuj połączenie, po czym upewniamy się, że zaznaczona jest opcja Tak, zarejestruj bazę danych, odznaczamy pole Otwórz bazę danych do edycji i zapisujemy efekt końcowy jako Bilboblog.odb. Powstały plik nie tylko łączy się z bazą danych bilbobloga, ale też pozwala przyjrzeć się jej strukturze. Otwórzmy Bilboblog.odb i przejdźmy do sekcji Tabele. Jeśli klikniemy dwukrotnie na bazę danych bilboblog, powinna pojawić się tabela articles (Rysunek 3). Jej strukturę także możemy podejrzeć poprzez podwójne kliknięcie.

Piszemy makra

Tabela articles składa się z trzech pól: num_article, gdzie znajdują się numery ID postów, article_pub z czasem publikacji oraz article_content, przechowująca treść postów. Na początek musimy napisać proste makro w języku OpenOffice.org Basic. Będzie ono tworzyć rekord w tabeli articles i zapisywać zawartość otwartego dokumentu Writer w polu article_content. Makro ma wykonywać trzy czynności: pobierać tekst z otwartego dokumentu Writer, łączyć się z bazą danych bilboblog i zapisywać tekst w polu article_content tabeli articles. Pierwszy krok – pobranie zawartości aktywnego dokumentu – wymaga trzech prostych linii kodu:

ThisDoc=ThisComponent
ThisText=ThisDoc.Text
Article=ThisText.String


Teraz musimy połączyć się z bazą danych. Tu również wystarczą trzy instrukcje:

DBContext=createUnoService ("com.sun.star.sdb.DatabaseContext")
DataSource=DBContext.getByName ("Bilboblog")
DB=DataSource.GetConnection ("użytkownik", "hasło")

W miejscu ciągów “użytkownik” i “hasło” wpisujemy nazwę użytkownika i hasło do bazy danych. Podanie tych elementów na stałe sprawia, że makro staje się mniej elastyczne (jeśli zmienimy któreś z nich, musimy ręcznie edytować makro), możemy więc pokusić się o zmodyfikowanie go tak, by samo pytało o dane do logowania. W takim wypadku kod umożliwiający połączenie z bazą danych przybierze następującą postać:

DBContext=createUnoService ("com.sun.star.sdb.DatabaseContext")
DataSource=DBContext.getByName("Bilboblog")
UserName=InputBox ("Użytkownik MySQL", "Attention")
UserPassword=InputBox ("Hasło", "Attention")
DB=DataSource.GetConnection (UserName, UserPassword)

Do manipulowania bazą danych OpenOffice.org Basic wykorzystuje zapytania SQL, więc aby zapisać pobrany tekst w polu article_content, makro posługuje się zapytaniem opartym na poleceniu INSERT INTO o następującym formacie:

INSERT INTO articles (pole1, pole2) VALUES ('wartość1', 'wartość2')

W naszym przypadku zapytanie INSERT INTO wyglądać będzie tak:

SQLQuery="INSERT INTO articles (article_content) VALUES ('" + Article + "')"

W języku OpenOffice.org Basic po zapytaniu INSERT INTO następują dwie instrukcje, służące do jego wykonania:

SQLStatement=DB.createStatement
Result=SQLStatement.executeQuery (SQLQuery)

Kiedy kwerenda zostanie już wykonana, makro sprząta po sobie, zamykając połączenie z bazą danych:

DB.close
DB.dispose

Cały kod przedstawiony jest w Listingu 1.

Sub PostToBilboblog
ThisDoc=ThisComponent
ThisText=ThisDoc.Text
Article=ThisText.String
DBContext=createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource=DBContext.getByName("Bilboblog")
UserName=InputBox("Użytkownik MySQL", "Attention")
UserPassword=InputBox("Hasło", "Attention")
DB=DataSource.GetConnection (UserName, UserPassword)
SQLQuery="INSERT INTO articles (article_content) VALUES ('" + Article + "')"
SQLStatement=DB.createStatement
Result=SQLStatement.executeQuery (SQLQuery)
DB.close
DB.dispose
End Sub
Listing 1: Makro w języku OpenOffice.org Basic

Wszystko pięknie, ale powstałe makro ma jedno poważne ograniczenie: odziera tekst z wszelkiego formatowania, więc jeśli chcemy, by zachowane zostały pogrubienia, kursywa, podkreślenia i inne style tekstowe, będziemy potrzebować trochę więcej kodu. Bilboblog formatuje tekst za pomocą podzbioru znaczników BBCode, w tym pogrubienia (znaczniki [b] i [/b]), kursywy ([i] i [/i]) oraz podkreślenia ([u] i [/u]). Możemy oczywiście użyć tychże znaczników w trakcie pisania tekstu w Writerze, ale byłoby znacznie wygodniej, gdyby makro potrafiło przetworzyć tekst automatycznie, w momencie wstawiania jego zawartości do tabeli articles. W tym celu musimy zmodyfikować makro, aby odnajdywało wszystkie fragmenty sformatowane za pomocą pogrubienia, kursywy i podkreślenia i otaczało je odpowiednimi znacznikami. Bez zbędnych ceregieli przyjrzyjmy się Listingowi 2, który zawiera przykładowe makro wyszukujące pogrubione fragmenty tekstu i oznaczające je znacznikami [b] i [/b].

Sub ReplaceBold
Dim SearchAttributes(0) As New com.sun.star.beans.PropertyValue
ThisDoc=ThisComponent
SearchAttributes(0).Name="CharWeight"
SearchAttributes(0).Value=com.sun.star.awt.FontWeight.BOLD
ReplaceObj=ThisDoc.createReplaceDescriptor
ReplaceObj.SearchStyles=false
ReplaceObj.SearchAll=true
ReplaceObj.SearchRegularExpression=true
ReplaceObj.SetSearchAttributes(SearchAttributes)
ReplaceObj.SearchString=".*"
ReplaceObj.ReplaceString="[b]&[/b]"
ThisDoc.replaceAll(ReplaceObj)
End Sub
Listing 2: Makro zachowujące pogrubienie

Makro zaczyna się od określenia atrybutów wyszukiwania name i value i stworzenia obiektu ReplaceObj. Jego parametry definiują operacje wyszukania i zastąpienia. Ustawienie opcji SearchStyles na false zapobiega wyszukiwaniu przez makro konkretnych stylów, zaś aktywowanie parametru SearchAll pozwala na przeszukanie całego dokumentu. SearchRegularExpression umożliwia wykorzystanie wyrażeń regularnych, więc makro może posłużyć się wartością .* opcji SearchString, by przeszukać cały tekst. Parametr ReplaceString definiuje ciąg, którym zostanie zastąpiony odnaleziony fragment tekstu. Następnie ThisDoc.replaceAll(ReplaceObj) przeprowadza operację wyszukania i zamiany.

By tak samo postąpić z tekstem kursywą, wystarczy następująco zmodyfikować wartości SearchAttributes(0).Name, SearchAttributes(0).Value i ReplaceObj.ReplaceString:

SearchAttributes(0).Name="CharPosture"
SearchAttributes(0).Value=com.sun.star.awt.FontSlant.ITALIC
ReplaceObj.ReplaceString="[i]&[/i]"

Zamiast pisać kilka podprocedur dla każdego stylu, możemy z łatwością zmienić makro w funkcję i wywołać ją z podprocedury głównej – wystarczy, że zastąpimy wartości zmiennymi (Listing 3).

Function MarkupStr(SearchAttrName, SearchAttrValue, ReplaceStr)
Dim SearchAttributes(0) As New com.sun.star.beans.PropertyValue
ThisDoc=ThisComponent
SearchAttributes(0).Name=SearchAttrName
SearchAttributes(0).Value=SearchAttrValue
ReplaceObj=ThisDoc.createReplaceDescriptor
ReplaceObj.SearchStyles=false
ReplaceObj.SearchAll=true
ReplaceObj.SearchRegularExpression=true
ReplaceObj.SetSearchAttributes(SearchAttributes)
ReplaceObj.SearchString=".*"
ReplaceObj.ReplaceString=ReplaceStr
ThisDoc.replaceAll(ReplaceObj)
End Function
Listing 3: Zmieniamy podprocedurę w funkcję

Teraz możemy wywołać funkcję w głównej podprocedurze i podać odpowiednie wartości. Poniższy fragment kodu wyszukuje pogrubione, podkreślone i przekreślone fragmenty tekstu oraz kursywę za pomocą funkcji MarkupStr i stosuje w nich odpowiednie znaczniki.

MarkupStr("CharWeight", com.sun.star.awt.FontWeight.BOLD, "[b]&[/b]")
MarkupStr("CharPosture", com.sun.star.awt.FontSlant.ITALIC, "[i]&[/i]")
MarkupStr("CharUnderline", com.sun.star.awt.FontUnderline.SINGLE, "[u]&[/u]")
MarkupStr("CharStrikeout", com.sun.star.awt.FontStrikeout.SINGLE, "[s]&[/s]")

Makro jest prawie gotowe, powinniśmy jednak naprawić jeszcze jeden niewielki mankament. Bilboblog zapisuje datę i czas w tak zwanym uniksowym formacie czasowym, określanym jako liczba sekund, które upłynęły od północy 1 stycznia 1970 roku. Jeśli wrzucimy do tabeli articles rekord bez podania właściwego znacznika czasu, domyślnie wyświetlony zostanie właśnie 1 stycznia 1970 roku, co nie jest zbyt praktyczne. By uniknąć tego problemu, powinniśmy dodać instrukcję, która przypomina o podaniu daty i czasu:

Timestamp=InputBox ("Podaj znacznik czasu", "Attention")

Musimy również zmodyfikować zapytanie SQL, by wpisywało pobraną wartość znacznika czasu w polu article_pub:

SQLQuery="INSERT INTO articles (article_content, article_pub) VALUES ('" + Article + "', '" + Timestamp + "')"

Sub PostToBilboblog
MarkupStr("CharWeight", com.sun.star.awt.FontWeight.BOLD, "[b]&[/b]")
MarkupStr("CharPosture", com.sun.star.awt.FontSlant.ITALIC, "[i]&[/i]")
MarkupStr("CharUnderline", com.sun.star.awt.FontUnderline.SINGLE, "[u]&[/u]")
MarkupStr("CharStrikeout", com.sun.star.awt.FontStrikeout.SINGLE, "[s]&[/s]")
ThisDoc=ThisComponent
ThisText=ThisDoc.Text
Article=ThisText.String
DBContext=createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource=DBContext.getByName("Bilboblog")
UserName=InputBox("Użytkownik MySQL", "Attention")
UserPassword=InputBox("Hasło", "Attention")
DB=DataSource.GetConnection (UserName, UserPassword)
Timestamp=InputBox("Podaj znacznik czasu", "Attention")
SQLQuery="INSERT INTO articles (article_content, article_pub) VALUES ('" + Article + "', '" + Timestamp + "')"
SQLStatement=DB.createStatement
Result=SQLStatement.executeQuery (SQLQuery)
DB.close
DB.dispose
End Sub
Function MarkupStr(SearchAttrName, SearchAttrValue, ReplaceStr)
Dim SearchAttributes(0) As New com.sun.star.beans.PropertyValue
ThisDoc=ThisComponent
SearchAttributes(0).Name=SearchAttrName
SearchAttributes(0).Value=SearchAttrValue
ReplaceObj=ThisDoc.createReplaceDescriptor
ReplaceObj.SearchRegularExpression=true
ReplaceObj.searchStyles=false
ReplaceObj.searchAll=true
ReplaceObj.SetSearchAttributes(SearchAttributes)
ReplaceObj.SearchString=".*"
ReplaceObj.ReplaceString=ReplaceStr
ThisDoc.replaceAll(ReplaceObj)
End Function

Listing 4: Makro i funkcja

Na Listingu 4 znajduje się ostateczna wersja makra i dołączonej do niego funkcji. Pytanie brzmi: jak wyliczyć wartość znacznika czasu? Możemy wprawdzie napisać kod konwertujący bieżącą datę i czas na znacznik czasu w formacie uniksowym, ale może to być problematyczne. Najprostszym rozwiązaniem jest skorzystanie z polecenia date %s w terminalu lub zainstalowanie rozszerzenia TimeStamp Converter dla Firefoksa [3].

Ostateczny szlif

Na koniec przyjrzyjmy się makru, które analizuje linki w dokumencie Writer i nadaje im formatowanie Bilbobloga. W odróżnieniu od funkcji zajmującej się formatowaniem tekstu, makro przetwarzające hiperłącza wykorzystuje obiekt Enumeration, za pomocą którego możemy po kolei przejrzeć paragrafy dokumentu, pobrać wartości parametru HyperlinkURL, a następnie zastosować określone formatowanie (Listing 5).

Sub MarkupURL
ThisDoc=ThisComponent
ThisText=ThisDoc.Text
ParaEnum=ThisText.createEnumeration
While ParaEnum.hasmoreElements
Para=ParaEnum.nextElement
PortionEnum=Para.createEnumeration
While PortionEnum.hasMoreElements
Portion=PortionEnum.nextElement
If Portion.HyperlinkURL <> "" then
Portion.String = "[url=" + Portion.HyperlinkURL +"]" +Portion.String + "[/url]"
End if
Wend
Wend
End Sub

Listing 5: Analiza i formatowanie hiperłączy

By przetworzyć hiperłącza za pomocą tego makra, wystarczy wywołać je z głównej podprocedury PostToBilboblog.

Info


Artykuł znaleziono w serwisie czytelnia.ubuntu.pl. Jego autorem jest Dmitri Popov, a sam tekst jest przedrukiem z gazety Linux Magazine 1(71)/2010 i został opublikowany za zgodą redakcji.

5.9.09

Numbertext: liczby słownie (i jeszcze więcej)

2 lata temu na łamach tegoż poradnika opublikowałem wpis instruujący, jak za pomocą prostego makropolecenia zautomatyzować sobie pracę w Calcu. Wczoraj zaś odkryłem rozszerzenie, które robi to samo i jeszcze więcej!

Numbertext, bo tak brzmi jego nazwa, to dodatek, który nie tylko zmienia zapis liczbowy na słowny, ale również konwertuje liczby na walutę. Ponadto potrafi skonwertowaną walutę zapisać w nastu obcych językach! Kolejnym plusem tego dodatku jest jego forma. Dzięki dystrybucji w postaci rozszerzenia, każdy użytkownik poradzi sobie z jego integracją (instalacją) z OpenOffice.org.

Rozszerzenie Numbertext jest odpowiedzią na (ograniczoną) funkcję BAHTTEXT w Excelu. Zanim jeszcze przejdziemy do głównej części tego wpisu, dopowiem, że społeczność skupiona wokół tej funkcji usiłowała zastąpić nią BAHTTEXT w specyfikacji OpenDocumentFormat Formula (ODFF) w ODF 1.2.

Po instalacji dodatku, będziemy mogli w Calcu operować na dwóch nowych funkcjach. Na NUMBERTEXT oraz na MONEYTEXT.

Przykład 1.
Aby zapisać liczbę 12345678 słownie, korzystamy z pierwszej funkcji, a zapisujemy ją następująco: =NUMBERTEXT(12345678)

Wynik: dwanaście milionów trzysta czterdzieści pięć tysięcy sześćset siedemdziesiąt osiem

Jeśli chcemy zapisać liczbę w obcym języku, używamy składni =NUMBERTEXT(1234567;"KOD_JĘZYKA"). Do testu użyłem języka domyślnego (polskiego), francuskiego (Szwajcaria), hiszpańskiego, niemieckiego, czeskiego, rosyjskiego i tajskiego. Kod dla poszczególnych języków to:

=NUMBERTEXT(12345678)
=NUMBERTEXT(12345678;"fr-CH")
=NUMBERTEXT(12345678;"es-ES")
=NUMBERTEXT(12345678;"de-DE")
=NUMBERTEXT(12345678;"cs-CZ")
=NUMBERTEXT(12345678;"ru-RU")
=NUMBERTEXT(12345678;"th-TH")

Wynik:
dwanaście milionów trzysta czterdzieści pięć tysięcy sześćset siedemdziesiąt osiem
douze millions trois cent quarante-cinq mille six cent septante-huit
doce millones trescientos cuarenta y cinco mil seiscientos setenta y ocho
zwölf Millionen dreihundertfünfundvierzigtausendsechshundertachtundsiebzig
dvanáct milionů tři sta čtyřicet pět tisíce šest set sedmdesát osm
двенадцать миллионов триста сорок пять тысяч шестьсот семьдесят восемь
สิบสองล้านสามแสนสี่หมื่นห้าพันหกร้อยเจ็ดสิบแปด

Przykład 2.
Aby skonwertować liczbę na walutę, wpisujemy funkcję =MONEYTEXT(50). Funkcja ta również doskonale sobie radzi z odmianą liczb po przecinku.

Wynik:
pięćdziesiąt złotych
pięćdziesiąt złotych osiemdziesiąt groszy
pięćdziesiąt złotych osiem groszy

Chcąc zaznaczyć, że chodzi nam obcą walutę, posługujemy się analogicznym zapisem: =MONEYTEXT(50;"KOD_WALUTY"). W tym przypadku użyłem "GBP" i "CNY" dla waluty Królestwa Wielkiej Brytanii i Chin.

Wynik:
pięćdziesiąt funtów szterlingów
pięćdziesiąt funtów szterlingów osiemdziesiąt pensów
pięćdziesiąt funtów szterlingów osiem pensów

pięćdziesiąt juanów
pięćdziesiąt juanów osiem jiao
pięćdziesiąt juanów osiem fenów

Natomiast jeśli chcemy zapisać słownie obcą walutę w obcym języku, korzystamy z funkcji =MONEYTEXT(50;"KOD_WALUTY";"KOD_KRAJU"). W ten oto sposób możemy zapisać zdanie "pięćdziesiąt funtów szterlingów" w języku mandaryńskim, lub też zdanie "pięćdziesiąt juanów" możemy zapisać po angielsku.

Kod:
=MONEYTEXT(50;"GBP";"zh-ZH")
=MONEYTEXT(50;"CNY";"en-GB")

Wynik:
五十英镑
fifty Chinese yuan

.

3.9.09

Writer2LaTeX - konwersja plików ODT do TEX

Czasami istnieje potrzeba konwersji OpenOffice'owskich plików ODT do plików TEX. Wprawdzie sam OpenOffice Writer posiada możliwość eksportu treści do plików TeX-a, ale ów eksport nie jest najlepszym z możliwych. Niestety OpenOffice generuje przy eksporcie strasznie skomplikowany kod wynikowy (wszędzie te formatowania...), który ciężko później wstawić do swojej pracy bez oczyszczania (a proces oczyszczania kodu trwa dłużej niż proces kopiuj-wklej tekst + dorób formatowanie w LaTeX-u). Na szczęście znalazłem niedawno lepszą alternatywę, a mianowicie program Writer2Latex. Zaletą programu Writer2Latex jest duża czystość generowanego kodu TeX-a przy konwersji plików ODT do TEX.

Writer2Latex jest konsolowym programem napisanym w Javie. Działa szybko i bezboleśnie. Radzi sobie z tabelkami i wzorami. Potrafi wyciągać obrazki z dokumentu ODT. Oprócz eksportu do formatu TEX, Writer2Latex pozwala także na eksport do plików BibTeX oraz XHTML i XHTML+MathML (tutaj także eksport z OO Calc).

Ponieważ, jak wspomniałem wcześniej Writer2Latex jest napisany w Javie. Ponieważ wpisywanie długich ścieżek mnie nudzi, przygotowałem mały skrypcik o nazwie w2l, umieszczony w /usr/local/bin, o treści:

#!/bin/bash
java -jar /usr/local/bin/writer2latex/writer2latex.jar $PWD/$1 $PWD/$2


I teraz wystarczy uruchomić Writer2Latex poleceniem:

w2l plik.odt plik.tex

Artykuł pochodzi z bloga Karola Kozioła i został opublikowany za jego zgodą.

30.6.09

OpenOffice.org - Używanie grafiki

Chociaż OpenOffice.org posiada wiele możliwości związanych z używaniem grafiki w dokumentach, to niestety wielu osobom sprawia to trudności oraz doprowadza do frustracji. Oto kilka podstawowych zasad, którymi należy się kierować:

I. Użycie obrazów zewnętrznych

Występuje, gdy chcemy przechowywać pliki poza dokumentem ODF.

Menu „Wstaw”->”Obraz”->”Z pliku”. W oknie:

darmowy hosting obrazkówdarmowy hosting obrazków

Widać wyraźnie pole wyboru podpisane „Link”.

W dołączonym na końcu załączniku jest plik ODT, w którym powyższy screen jest umieszczony właśnie w taki sposób.
Wady:
  • wszystkie pliki graficzne, użyte w dokumencie muszą zostać dostarczone razem z plikiem.
  • użyte pliki mogą się znajdować w każdej części Twojego komputera

Zalety:

  • pliki są gotowe do dalszej publikacji, np. na stronie www
  • zmiany dokonane w pliku są widoczne w dokumencie

II. Użycie obrazów wewnętrznych

Występuje, gdy program kopiuje plik obrazu do zawartości dokumentu.

Menu „Wstaw”->”Obraz”->”Z pliku”. W oknie:

darmowy hosting obrazków

Pole wyboru podpisane „Link” pozostawiamy odznaczone.
W dołączonym na końcu załączniku jest plik ODT, w którym powyższy screen jest umieszczony właśnie w taki sposób.
Wady:
  • zmiany dokonane w obrazie wymagają ponownego wstawienia go do dokumentu w miejscu starszej wersji
  • pliki nie są gotowe do dalszej publikacji

Zalety:

  • pliki są zawsze dostępne, niezależnie od położenia dokumentu lub systemu operacyjnego
  • nie wymaga dodatkowych zabiegów przy publikacji

III. Użycie obrazów w dokumentach przenoszonych oraz edytowanych przez większą liczbę użytkowników

Użycie obrazów w taki sposób, to główna przyczyna powstania tego tekstu. Na początek troszkę podstaw technicznych dot. przechowywania obrazów poza dokumentem.
Położenie pliku jest określane ścieżką. W zależności od systemu może ona wyglądać różnie. Niemniej są dwa rodzaje ścieżek bezwzględna (absolutna) i względna.

Ścieżki bezwzględne

d:\projekty\OpenOffice.org\docs\uzycie-obrazu\wstaw-obraz.jpg
/home/user/OpenOffice.org/docs/uzycie-obrazu/wstaw-obraz.jpg

Ta ścieżka jest poprawna w systemie, w którym została wygenerowana i jest poprawna, gdy zostanie użyta w dowolnym miejscu struktury katalogów używanego systemu.

Ścieżki względne

./wstaw-obraz.jpg

Z kolei ścieżki względne są odniesieniem do lokalizacji, w której zostały wygenerowane. Wynika z tego, że tylko tam są poprawne. Jest w nich jednak ogromna siła: nie ma znaczenia w jakim systemie operacyjnym została użyta.

OpenOffice.org, używa ścieżek bezwzględnych, tylko jeżeli pliki obrazów znajdują się poza katalogiem, w którym znajduje się dokument. Tę właściwość poprawiono i w wersji 3.1 pakietu z całą pewnością działa prawidłowo. Niestety w swoim interfejsie bez względu na to, którego rodzaju ścieżki używa zawsze w okienkach wyświetla ścieżkę bezwzględną. Domyślnie zawsze kopiuje obraz do dokumentu.

Dlatego zasady są trzy:

  1. Jeżeli w dokumencie używasz obrazów i przechowujesz je poza dokumentem, to koniecznie przechowuj je w katalogu, w którym on się znajduje oraz przenoś razem z plikami ODF.

  2. Jeżeli nie ma potrzeby dbania o aktualność obrazów najlepiej dołączaj je do dokumentu. W takiej sytuacji wszystko jest w jednaj nierozerwalnej całości i nie trzeba pamiętać o kopiowaniu dodatkowych plików.

  3. Jeżeli tworzysz szablon dokumentu, zawsze dołączaj obrazy do dokumentu i nie stosuj linków, a każdy, kto skorzysta z Twojego szablonu z całą pewnością zobaczy obrazy w taki sam sposób jak Ty.

Powyższe zasady dotyczą wszystkich funkcji obrazów dostępnych w OpenOffice.org również tła.

Gdzie można to sprawdzić?

W okienku „Wstaw obraz”, „Wybór obrazu” oraz:

Zakładka „Grafika” właściwości obrazu: (menu kontekstowe „Obraz”)


darmowy hosting obrazków darmowy hosting obrazków

Zakładka „Tło” właściwości stylów:

darmowy hosting obrazków darmowy hosting obrazków

Zakładka „Tło” właściwości akapitu: (Menu „Format”-> „Akapit”)

darmowy hosting obrazków darmowy hosting obrazków

Zakładka „Tło” właściwości strony: (menu „Format”-> „Strona”)

darmowy hosting obrazków darmowy hosting obrazków

Mam nadzieję, że udało mi się wyjaśnić i pokazać, co w trawie piszczy. Mam nadzieję, że kolejne publikacje przygotowane przy użyciu pakietu OpenOffice.org nie przysporzą tylu problemów jej autorom. Uważam, że prawidłowe dobranie środków do osiągnięcia zamierzonego celu znacznie ułatwia życie.

IV. Tło z dołączonej do OpenOffice.org galerii

OpenOffice.org jest rozpowszechniany z niewielką biblioteką gotowych obrazów. Można z niej skorzystać po wybraniu z menu „Narzędzia” -> „Galeria” (powtórzenie tej czynności wyłącza ją).

Użycie zawartych w niej obrazów jest proste. Wystarczy kliknąć prawym przyciskiem myszy na wybranym obrazku.


darmowy hosting obrazków

Jak widać jest kilka możliwości.

  • „Kopiuj” - wstawia obraz zapisując jego kopię w dokumencie
  • „Łącze” - wstawia obraz zapisując jedynie ścieżkę do obrazu (zawsze bezwzględną)
  • „Tło” i „Strona” lub „Akapit” - wykorzystuje obraz jako tło zawsze używając ścieżki również bezwzględnej.

W przypadku publikacji takiego dokumentu wykorzystanie funkcji innych niż „Kopiuj” wiąże się z koniecznością wniesienia ręcznych poprawek do właściwości obrazów, akapitu lub strony. Wykorzystując odpowiednie okna dialogowe (patrz zamieszczone tutaj screeny wyżej ) koniecznie trzeba zamienić link na obraz dołączony do dokumentu. Np. odznaczyć pole wyboru podpisane „Połącz”.

Załącznik

Po pobraniu wystarczy rozpakować i otworzyć w OpenOffice.org plik ODT, aby przyjrzeć się dokładniej tematowi. Tylko dwa pierwsze obrazki są przechowywane w pliku, reszta jest linkowana do plików w katalogu. Usuń albo zmień nazwę obrazów w katalogu i sprawdź co się stanie, gdy program nie będzie w stanie "namierzyć" plików.
Pobierz załącznik (1,83 MB)