Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Generowanie plików RTF [Vir]
scanner
post
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"
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Vir
post
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.:

  1. <?php
  2.  
  3. Header('Content-Type: application/rtf'); $conn=mysql_connect('localhost', 'root') or die ('Nie mogę się połączyć z bazą.'); mysql_select_db('info', $conn); $result=mysql_query('select opis from dane', $conn);
  4.  
  5. ?>


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:

  1. <?php
  2.  
  3. while ($myrow = mysql_fetch_assoc($result)) { echo 'trowd trgaph cellx1440 pardintbl ' .$myrow['opis'] .'cell row'; }
  4.  
  5. ?>


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
Go to the top of the page
+Quote Post

Posty w temacie
- scanner   Generowanie plików RTF [Vir]   6.04.2004, 08:30:32
- - migacz   pętla w tabeli   15.04.2004, 13:46:52
- - makay   Mama problemy z tworzeniem tego rtf wyskakuje mi ...   19.04.2004, 12:29:54
- - Vir   Sorki, że tak późno się odzywam i bez gotowych odp...   20.04.2004, 17:17:45
- - Vir   Hi! Na początek małe sprostowanie do arykułu ...   22.04.2004, 02:02:55
- - migacz   dzięki za odpowiedź. pocztalem troche o rtfie i po...   27.04.2004, 11:11:09
- - pieto   Witam, Może ktoś wymyśli sposób żeby rtfa można by...   5.05.2004, 15:22:42
- - Vir   Nie ma możliwości zapisania takiego pliku we wskaz...   5.05.2004, 17:11:26
- - pieto   Ok, dzięki, to chyba się nie przyda   5.05.2004, 17:45:04
- - Vir   W związku z tym, że docierały do mnie w ostatnim c...   1.06.2004, 22:20:34
- - oksi   Generowanie plików RTF [Vir]   4.06.2004, 00:31:54
- - Vir   Cytatzapisuje po wszytkich modyfikacjach ten plik ...   4.06.2004, 14:17:32
- - oksi   Jak sformatowac wyniki zapytania z bazy w postaci ...   5.06.2004, 18:24:28
- - Vir   Ciekawe pytanie Przez najbliższe 2 tygodnie mogę ...   8.06.2004, 17:53:11
- - oksi   dzieki za wskazowki, sprobuje cos pobrobowac. poz...   9.06.2004, 18:31:32
- - Kiler   mam pytanie o konfiguracje serwera przy tych plika...   29.06.2004, 11:30:46
- - Vir   AddType jest to dyrektywa w Apache'u za pośred...   5.07.2004, 16:20:59
- - samolot   Witam Wwszystkich . Jestem u Was nowy. Znalazłem ...   9.04.2007, 19:08:14
- - phpion.com   http://wortal.php.pl/phppl/wortal/artykuly...anie_...   10.04.2007, 22:07:20
- - wert1   pytanie nie do tego tematu : jak Vir zrobił dwa po...   20.04.2007, 14:58:26
- - pschemo   Witam, bardzo zaciekawił mnie ten artykuł =] Zrob...   7.05.2007, 11:36:25


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 16:31