Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
O autorze

O autorze

Mariusz (Vir) Grabczyński
Reklama

Reklama

Podobne Artykuły

Poniżej znajduje się lista podobnych artykułów:
Brak powiązanych artykułów

Generowanie plików RTF

Rich Text Format (RTF) jest formatem dokumentów stworzonym przez firmę Microsoft. Format RTF bywa wykorzystywany przez twórców stron internetowych do automatycznego generowania dokumentów np. formularzy zamówień. Dokumenty RTF można przenosić między różnymi systemami operacyjnymi oraz można zapisywać je i odczytywać w wielu powszechnie dostępnych aplikacjach. Dokumenty RTF z pozoru przypominają dokumenty .doc z programu Word. RTF ma szereg zalet, a najważniejsze z nich to:

  1. łatwe formatowanie dokumentów (możliwość zmiany czcionki, jej wielkości, możliwość wstawienia tabel itp.)
  2. wspomniana "przenośność" - możliwość uruchomienia dokumentu w wielu programach.

W niniejszym artykule przedstawię sposób w jaki możemy wygenerować plik w formacie RTF z poziomu przeglądarki internetowej.

Zaczynamy

Do wygenerowania dokumentu RTF potrzebne będą nam tylko dwa pliki. Pierwszy z nich to plik z formularzem, drugi to szablon dokumentu RTF, w którym zostaną wyświetlone dane przesłane z formularza.

Jedyna uwaga dotycząca formularza to konieczność umieszczenia pól formularza w znaczniku:

Dane z poszczególnych pól przekazywane są metodą POST bezpośrednio do pliku RTF. Nie ma konieczności tworzenia dodatkowych skryptów. Czas zająć się zatem przygotowaniem pliku RTF.

Tworzymy dokument RTF

Dokument RTF możemy stworzyć w dowolnym edytorze obsługującym ten format, tym niemniej najlepszym wyborem wydaje się być program Word. W miejscu, gdzie mają się pojawić dane wpisujemy funkcję PHP odpowiedzialną za ich wyświetlenie:

<?php
 echo $_POST['nazwa_zmiennej'];
?>

Imię

<?php echo $_POST['imie']; ?>

Nazwisko

<?php echo $_POST['nazwisko']; ?>

Adres

<?php echo $_POST['adres']; ?>

Notatka

Rozmiar tabeli będzie zależał ostatecznie od ilości tekstu wprowadzonego do tabeli w wyniku wygenerowania dokumentu, a nie od długości funkcji.

Tak stworzony dokument zapisujemy jako plik w formacie RTF, następnie otwieramy go, tym razem w programie, który nie obsługuje tego formatu. Możemy posłużyć się np. Notatnikiem. Na początku dokumentu dodajemy następujący kod PHP:

<?php
Header("Content-Type: application/rtf");

$tab1 = Array("&#177;", "?", "&#182;", "&#166;", "?", "&#172;");
$tab2 = Array("\'b9", "\'a5", "\'9c", "\'8c", "\'9f", "\'8f");
$tab3 = Array("imie", "nazwisko", "adres");

for ($i = 0; $i <= count($tab3); $i++)
{
 $_POST[$tab3[$i]] = str_replace( $tab1, $tab2, $_POST[$tab3[$i]]);
}
?>

Notatka

W przypadku kodowania strony z formularzem w standardzie Windows-1250 możesz pominąć funkcję konwertującą polskie znaki i pozostawić tylko deklarację nagłówka (Header).

Powyższy kod wskazuje typ danych jakie mają zostać przetworzone, a następnie konwertuje polskie znaki na odpowiadające im tzw. sekwencje ucieczki. Sekwencje ucieczki są to odpowiedniki poszczególnych znaków występujące w dokumentach RTF. Tabela $tab1 zawiera symbole polskich liter (ą, Ą, ś, Ś, ź, Ź) właściwe dla standardu ISO-8859-2, inne litery z polskiego alfabetu nie są konwertowane (standard Windows-1250 różni się od ISO-8859-2 pozycją tylko sześciu podanych liter w tablicy ASCII). Tabela $tab2 zawiera wspominanie wcześniej sekwencje ucieczki, natomiast zawartość tabeli $tab3 stanowią nazwy pól formularza (dla przykładu są to: imię, nazwisko, adres). Dzięki funkcji zawartej w pętli wszystkie znaki w wymienionych w tabeli $tab3 polach zostaną przekonwertowane.

Ważne jest, aby wklejony do dokumentu RTF powyższy kod wprowadzony został "ciągiem" (bez znaków nowej linii). Istotne jest także, żeby między znakiem ?> kończącym kod PHP, a {\rtf1... rozpoczynającym właściwy dokument RTF nie było spacji.

Kolejnym i zarazem ostatnim etapem przygotowania szablonu jest zmiana ustawień znaków. Nie wnikając w strukturę pliku RTF należy zmienić wszystkie polecenia \fcharsetN występujące w dokumencie z liczby oznaczonej jako N na 238 (Europa Wschodnia).

Bezpieczeństwo

W związku z faktem, że znak odwrotnego ukośnika "\, lewa klamra "{" oraz prawa klamra "}" mają w specyfikacji RTF określone znaczenie, należy je zamienić na odpowiadające im sekwencje ucieczki. W tym celu rozszerzymy poprzedni kod konwertujący polskie znaki. Całość będzie wyglądała następująco:

<?php
Header("Content-Type: application/rtf");

$tab1 = Array("&#177;", "?", "&#182;", "&#166;", "?", "&#172;");
$tab2 = Array("\'b9", "\'a5", "\'9c", "\'8c", "\'9f", "\'8f");
$tab3 = Array("imie", "nazwisko", "adres");
$tab4 = Array("\\", "{", "}");
$tab5 = Array("\'5c", "\'7b", "\'7d");

for ($i = 0; $i <= count($tab3); $i++)
{
 $_POST[$tab3[$i]] = str_replace( $tab4, $tab5, $_POST[$tab3[$i]]);
};

for ($i = 0; $i <= count($tab3); $i++)
{
 $_POST[$tab3[$i]] = str_replace( $tab1, $tab2, $_POST[$tab3[$i]]);
};
?>

Ważne jest, aby zachować kolejność pętli. Najpierw przekształcamy znaki "\", "{" oraz "}", następnie w oddzielnej pętli przekształcamy polskie znaki.

Konfiguracja serwera

Mamy już przygotowany plik formularza oraz dokument RTF, pozostała jeszcze tylko konfiguracja serwera... Istnieją dwie możliwości konfiguracji. Pierwsza to umieszczenie w katalogu z formularzem i dokumentem RTF pliku .htaccess z następującym wpisem:

AddType apaplication/x-httpd-php .rtf

Możliwości ta wymaga, aby ustawienia serwera pozwalały na wykorzystanie plików .htaccess. W tym celu należy ustawić dyrektywę AllowOverride w pliku httpd.conf na:

Drugi sposób to dodatnie wpisu AddType application/x-httpd-php .rtf bezpośrednio do pliku konfiguracyjnego httpd.conf w miejscu deklaracji typów. Z teoretycznego punktu widzenia drugie rozwiązanie jest szybsze.

Informacje dodatkowe

Przedstawiony w artykule sposób generowania plików RTF daje sporo dodatkowych możliwości łatwych w wykonaniu. Zdarzyć się może, że w formularzu użyjesz pól typu textarea. W związku z charakterem tych pól użytkownik może wprowadzić znak nowej linii (przycisnąć Enter). Aby przejście do nowej linii zostało poprawnie zinterpretowane, należy w dokumencie RTF użyć następującej funkcji wyświetlającej dane:

<?php
 echo str_replace('<br />', '\line', nl2br($_POST['nazwa_zmiennej']));
?>

Wskazówka

(Od redakcji) Więcej informacji o znakach końca linii znaleźć można w innym artykule na naszych łamach.

Kolejnym problemem, który być może przyjdzie Ci rozwiązać to przekazywanie danych z checkbox-ów. W takim przypadku wystarczy tylko nadać inną nazwę każdemu z checkbox-ów i funkcję wyświetlającą dane wzbogacić o wyświetlenie kolejnych pól np.:

<?php
 echo $_POST['checkbox_1'];
 echo $_POST['checkbox_2'];
 echo $_POST['checkbox_3'];
?>

Wartości z pól niezaznaczonych nie zostaną wyświetlone.

Podsumowanie

Opanowanie czynności opisanych w tym artykule pozwoli Ci stworzyć szybko i sprawnie kolejne szablony dokumentów RTF. Przedstawione rozwiązanie ma dużą zaletę przejawiającą się w możliwości wpisywania funkcji bezpośrednio w polu, w którym mają być wyświetlone dane. Zwiększa to intuicyjność rozwiązania. Istotny jest także fakt, że korzystamy tylko z dwóch plików - formularza i dokumentu RTF. W razie konieczności użycia dodatkowych funkcji możemy wpisać je na początku dokumentu, tak jak wprowadzaliśmy deklarację nagłówka i funkcję konwertującą polskie znaki.

Gdyby nie konieczność konwersji polskich znaków i podanych wcześniej symboli użycie przedstawionego rozwiązania byłoby banalne. Wyobraź sobie formularz, do którego miałyby być wprowadzone tylko dane liczbowe...

Opisane rozwiązanie oparte jest na sposobie przedstawionym na stronie http://lab.artlung.com/php/rtf/.

Specyfikacja RTF dostępna jest tutaj.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (2)
Brak wpisu
Poniedziałek 06 Luty 2012 10:34:53 am - Kshyhoo

Możliwości ta wymaga, aby ustawienia serwera pozwalały na wykorzystanie plików .htaccess. W tym celu należy ustawić dyrektywę AllowOverride w pliku httpd.conf na:

No wlaśnie, jak?

A co dalej? =]
Poniedziałek 07 Maj 2007 12:25:37 pm - pschemo <nuras10_at_op.pl>

Witam,

Mam takie pytanko, a jak mogę załączyć taki dokument w mailu?
Chodzi mi o to że gdy wygeneruje się plik rtf możemy go zapisać lub otworzyć..
Ja bym chciał aby plik był od razu konwertowany do zipa a potem wysyłany mailem jako załącznik..
Czy da się jakoś kontrolować co się dzieje po wygenerowaniu rtf-a??

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2018 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System