Właśnie skończyłem męczyć się z generowaniem plików RTF z poziomu strony internetowej. Przeglądałem trochę rozwiązań, być może znalazły by się lepsze, ale to wydaje mi się na prawdę dobre i niezawodne. Rozwiązanie oparte jest o sposób przedstawiony na stronie http://lab.artlung.com/php/rtf/. Podczas pracy pojawiło się trochę problemów, które uwzględnia poniższy tekst. Należy liczyć się z tym, że część informacji nie wniesie niczego nowego w stosunku do tego co znajdziecie na stronie http://lab.artlung.com/php/rtf/. Zainteresowanych zapraszam do lektury

Dla porządku przedstawię wszystko w kolejnych punktach:
1) Potrzebne nam będą 3 pliki:
- plik 1 - formularz np. formularz.html
- plik 2 - dokument RTF np. formularz.rtf
- plik 3 - plik .htaccess
2) Tworzymy dokument RTF np. w programie Word, zapisujemy go np. pod przyjętą w pkt 1 nazwą formularz.rtf. Miejsca, które mają być wypełnione na razie pozostawiamy puste.
3) Tworzymy html-owy odpowiednik utworzonego przed chwilą formularza i zapisujemy go np. pod przyjętą w pkt 1 nazwą formularz.html.
Pola, które będą wypełnione umieszczamy w znaczniku
Kod
<form action="nazwa_pliku.rft" method="post"></form>
np.
Kod
<form action="formularz.rtf" method="post">
Podaj imię: <input type="text" name="imie"><br>
Podaj adres: <textarea name="adres"></textarea>
</form>
Podaj imię: <input type="text" name="imie"><br>
Podaj adres: <textarea name="adres"></textarea>
</form>
4) Tworzymy plik .htaccess z następującą zawartością:
Kod
AddType apaplication/x-httpd-php .rtf
* Pliki, o których mowa w pkt 1, 2, 3 powinny znajdować się w tym samym katalogu *
5) Aby plik .htaccess przyniósł zamierzony rezultat (aby nowy typ został dodany) należy (w razie konieczności) zmienić dyrektywę
Kod
AllowOverride None
na Kod
AllowOverride FileInfo
Dyrektywę tą znajdziesz w pliku konfiguracyjnym Apacha - httpd.conf. Może być też Kod
AllowOverride All
ale nie wiem czy jest to bezpieczne (muszę jeszcze trochę poczytać o Apache :-))
Uwaga - zamiast zmieniać dyrektywę AllowOverride i tworzyć plik .htaccess można zamieścić deklarację
Kod
AddType application/x-httpd-php .rtf
bezpośrednio w pliku httpd.conf (w miejscu deklaracji typów).
Dobra mamy już pliki formularz.html, formularz.rtf oraz .htaccess, teraz trochę pomieszamy ;-)
6) Otwieramy plik formularz.rtf stworzony w pkt 2. W puste miejsca, które mają być wypełnione danymi z formularza html wpisujemy
[php:1:8ee5bfa475]<?php echo StripSlashes($_POST['nazwa_zmiennej')?>[/php:1:8ee5bfa475].
Przy imieniu będzie to
[php:1:8ee5bfa475]<?php echo StripSlashes($_POST['imie']) ?>[/php:1:8ee5bfa475]
a przy adresie [php:1:8ee5bfa475]<?php echo StripSlashes($_POST['adres']) ?>[/php:1:8ee5bfa475]
Uwaga - być może pamiętasz, że pole adres to textarea, a więc bardzo prawdopodobne, że przyszły użytkownik zechce przejść do nowej linii wybierając Enter. Standardowo przejście do nowej linii nie zostanie zinterpretowane poprawnie i w wygenerowanym dokumencie RTF będzie widoczny ciągły tekst. W tym celu należy użyć następującego wywołania (może nie jest ono skomplikowane, ale wpadłem na nie dopiero po jakimś czasie):
[php:1:8ee5bfa475]<?php echo str_replace('<br />', 'line', nl2br(StripSlashes($_POST['nazwa_zmiennej']))) ?>[/php:1:8ee5bfa475]
Myślę, że nie trzeba tłumaczyć. Zainteresowanych użytymi funkcjami zapraszam do manuala ;-) W skrócie chodzi o to, żeby zastąpić znacznik
Kod
<br />
wpisem Kod
line
znaczącym w specyfikacji RTF tyle co "przejdź do nowej linii".
Teraz radzę się wczytać ;-)
Załóżmy, że nasz przykładowy formularz (imię, adres) chcemy umieścić w tabeli:
- lewa kolumna pierwszy wiersz - "Imię"
- lewa kolumna drugi wiersz - "Adres"
- w prawej kolumnie znajdą się wygenerowane dane z formularza html
Wcześniej pisałem, że w miejscu w którym dane mają się pojawić - wiersze prawej kolumny - musi znaleźć się stosowna funkcja. Funkcja nie zawiera polskich znaków. W związku z tym mogą się pojawić problemy w postaci błędnego wyświetlania polskich znaków w wierszach, do których będą wstawiane dane z formularza html. Rozwiązanie jest (chyba) jedno - należy dodać np. w środku funkcji jakieś polskie znaki, które później w ramach weryfikacji opisanej w punkcie 7 usuniemy.
Po prostu jeżeli w kolumnie znajdą się polskie litery to struktura pliku RTF zostanie tak stworzona, że nie będzie problemów z wstawieniem polskich znaków (czytaj uwagi końcowe).
7) Otwieramy ponownie plik formularz.rtf tym razem za pomocą programu, który nie interpretuje tego formatu, tylko wyświetla 'czysty' RTF (np. za pomocą notatnika)
Na początku, przed deklaracją dokumentu RTF tzn. {rtf1... wpisujemy
Kod
<? Header('Content-Type: application/rtf') ?>
! Ważne jest, aby między znakiem ">" a "{" nie było spacji.
Jednym słowem dokument powinien rozpoczynać się tak:
Kod
<? Header('Content-Type: application/rtf') ?>{rtf1...
Dodatkowo radzę odnaleźć wprowadzone w pkt 6 wywołanie zmiennych w celu sprawdzenia, czy po zapisie do formatu RTF nie zostało coś zmienione. Z tego co zauważyłem to dodawany jest jeden ukośnik przy line (line) w przypadku funkcji [php:1:8ee5bfa475]<?php echo str_replace('<br />', 'line', nl2br(StripSlashes($_POST['nazwa_zmiennej']))) ?>[/php:1:8ee5bfa475]
Oczywiście zbędne "dodatki" należy usunąć.
Uwagi końcowe
Podany opis powinien działać bez zarzutu, gdy strona kodowa formularza ustawiona jest na windows-1250. W przypadku kodowania iso-8859-2 konieczna jest dodatkowa zmiana polskich czcionek wprowadzanych do formularza na następujące kody:
Kod
"ą"=>"u261a"
"Ą"=>"u260A"
"ę"=>"u281e"
"Ę"=>"u280E"
"ć"=>"u263c"
"Ć"=>"u262C"
"ł"=>"u322l"
"Ł"=>"u321L"
"ń"=>"u324n"
"Ń"=>"u323N"
"ś"=>"u347s"
"Ś"=>"u346S"
"ź"=>"u378z"
"Ź"=>"u377Z"
"ż"=>"u380z"
"Ż"=>"u379Z"
"Ą"=>"u260A"
"ę"=>"u281e"
"Ę"=>"u280E"
"ć"=>"u263c"
"Ć"=>"u262C"
"ł"=>"u322l"
"Ł"=>"u321L"
"ń"=>"u324n"
"Ń"=>"u323N"
"ś"=>"u347s"
"Ś"=>"u346S"
"ź"=>"u378z"
"Ź"=>"u377Z"
"ż"=>"u380z"
"Ż"=>"u379Z"
Jak to zrobić? Nie wnikałem, mi wystarczy kodowanie windows-1250

Mam nadzieję, że powyższe informacje komuś się przydadzą

@Vir