![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Opinie na temat artykułu "Generowanie plików RTF"
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 25.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Hi!
Na początek małe sprostowanie do arykułu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) i sorki za "tasiemca". Napisałem, że jedynie znaki { } oraz \ wymagają zamiany na tzw. sekwencje ucieczki. Teoretycznie zmianie powinny także podlegać wszystkie znaki o kodach ASCII powyżej 127. W praktyce nie stanowi to problemu bo po pierwsze - 99% tych znaków to hieroglify, których nie idzie wpisać do pola tekstowego w formularzu, po drugie - wpisanie np. tyldy (kod ASCII 152) nic nie knoci. I jeszcze jedna kwestia, która wyszła dopiero na dniach po instalacji nowego systemu i oprogramownia (m.in. Office 2003). W Office 2000 wpisanie w treści dokumentu RTF kodu php wraz z cudzysłowanimi (np. echo "bleble") wyglądało później (w czystym kodzie - po otwarciu np. w Notatniku) tak samo tzn. cudzysłów pozostawał cudzysłowem. Office 2003 przykłada się bardziej do roboty i zmienia cudzysłowy na sekwencje ucieczki. Taki kod może później szwankować, ponieważ nie będzie prawidłowo interpretowany. W związku z tym należy w momencie dodawania deklaracji nagłówka przejrzeć dla pewności wpisane funkcje - czy przypadkiem nie stało się tak jak wspomniałem. Nie powinno być to problemem mimo, że kod dokumentu RTF nie wygląda zbyt ciekawie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - klikasz CRTL+F i znajdujesz dane funkcje. Zmienione cudzysłowy (podane w formie sekwencji ucieczki - może być \'84 \'93 \'94), czy inne niechciane zmiany przywracamy do stanu pierwotnego. Warto przy okazji wskazać na kolejną interesującą kwestię (powiązaną z powyższą). Otóż wprowadzane np. w Notaniku (zwykłym edytorze) cudzysłowy to tzw. cudzysłowy proste o kodzie ASCII 34 (<=127). Tak samo cudzysłów wprowadzany w formularzu na stronie internetowej będzie cudzysłowem prostym, a nie tym Word-owskim. Jednym słowem nie będzie sprawiał problemów. Niektórzy pomyślą skoro nie cudzysłowów to użyję apostrofów. Tutaj też jest problem - po zapisaniu do formatu RTF są one zamieniane na oznaczenie \rquote. Podsumowując konieczne jest sprawdzenie fukcji i ewentualne poprawienie ich. Być może nie jest to kwestia wersji Office'a, tylko jego ustawień, tym niemniej będziecie wiedzieli w razie kłopotów o co biega (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Niektórym może przyda się informacja, że poszczególne znaki przyporządkowane kodom ASCII zarówno powyżej, jak i poniżej 127 możemy uzyskać konwertując dzięsiętną wartość kodu ASCII na liczbę szesnastkową (Hex, hexadecimal) i zapisując ją w formacie \'hh gdzie hh to wspomniana wartość Hex. W bardzo prosty sposób zrobimy to używając standardowego kalkulatora Windows-owego (wcześniej należy tylko przełączyć wygląd na profesjonalny - wpisujemy kod ASCII i klikamy na radiobutton-a Hex). I w końcu odpowiem na Wasze maile (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Mail makay-a: Sprawdź to co napisałem o zmianie cudzysłowów i apostrofów, sprawdź czy po otwarciu dokumentu np. w Notatniku wpisany przez Ciebie kod php nie został zmieniony podczas zapisu do RTF-a w inny sposób. Na 99% to wspomniany problem z Wordem. Może raczej nie problem tylko "kwestia techniczna" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Mail migacz-a: Sprawa jest do wykonania, ale jest pewne ale (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - czytaj pkt. 1 Analizując zaprezentowane przeze mnie rozwiązanie widać, że kod dokumentu RTF znajduje się poza kodem php. Nie można dowolnie obrabiać kodu dokumentu RTF, "zapętlać" jego fragmentów np. tabel, a następnie "wyprintować" go. Można natomiast wywołać funkcją echo fragment dokumentu RTF, który wstawiony "w środku" zostanie prawidłowo zinterpretowany i wyświetlony. Może jaśniej zobrazuje to przykład z wykonaniem dokumentu, o który Ci chodzi - w którym jakieś dane pobierane są z bazy danych i wstawiane są do automatycznie generowanej tabeli. A więc po kolei: 1) Po pierwsze będziesz musiał zajrzeć do specyfikacji RTF (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) w celu przyjrzenia się definiowaniu tabel 2) Otwórz czysty dokument, wpisz w nim np. xxx i zapisz jako dokument RTF 3) Otwieramy zapisany dokument RTF np. w Notatniku. Na początku wprowadzamy (zgodnie z informacjami z artykułu) deklarację nagłówka, a wraz z nim możemy wpisać funkcje odpowiedzialne za połączenie z bazą danych np.:
następnie odnajdujemy (CTRL+F czy F3) wcześniej wpisany ciąg znaków (u nas było to xxx - sprawdź tylko, żeby nie był to ciąg zaraz bo definicji \title bowiem w tym miejscu zapisywany jest tytuł dokumentu - kolejne nasze xxx powinno być we właściwym miejscu). Ciąg tych znaków zmieniamy na funkcję php wyświetlającą poszczególne dane z bazy. Efekt zapytania zostaje "wkomponowany" w zdefiniowaną w kodzie RTF tabelę, którą wywołujemy poprzez użycie funkcji echo. Przykład:
4) W wyniku wywołania w oknie przeglądarki tak "spreparowanego" dokumentu RTF ukaże nam się zwykły dokument, w którym będzie widniała jednokolumnowa tabela, a zawartość poszczególnych wierszy będzie stanowić zawartość pola 'opis' z bazy danych. Teraz tylko musisz poczytać w specyfikacji RTF o tabelach, tak żeby stworzyć tabelę jaką potrzebujesz. Możesz także pobawić się w ten sposób, iż stworzysz w Wordzie tabelę, zapiszesz dokument w formacie RTF, a następnie przeglądając go w Notatniku zechcesz "wyłapać" definicję owej tabeli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Co do wyświetlania pierwszego wiersza na każdej ze stron to myślę, że jest to zadanie z serii "mission impossible", ale mogę się mylić - pokombinuj, mam nadzieję, że Cię nakierowałem. Przyjrzę się jeszcze temu i w razie jak coś wymyślę to się odezwę. Hmm, i tak wyszedł tekst dłuższy od artykułu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Mam nadzieję, że pomogłem. Pozdrawiam serdecznie i życzę miłej zabawy. Ten post edytował Vir 5.07.2004, 16:51:24 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 16:31 |