Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Generowanie pliku RTF - rozwiązanie
Vir
post
Post #1





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


Hi!

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 biggrin.gif

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>


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"


Jak to zrobić? Nie wnikałem, mi wystarczy kodowanie windows-1250 smile.gif Najważniejsze problemy mamy (chyba) za sobą.

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

@Vir
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
chfast
post
Post #2





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


A ja tak z ciekawości chciałbym zapytać do czego się wykorzystuje pliki RTF?


--------------------
pozdrawiam, chfast
Go to the top of the page
+Quote Post
Vir
post
Post #3





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


RTF (Rich Text Format) jest formatem dokumentów. Nie jest to jednak język znaczników, który mógłby być użyty do ręcznego zakodowania całego dokumentu (choć jest to możliwe). Według założeń jego twórców, RTF jest formatem danych, które mogą być odczytywane i zapisywane przez aplikacje dowolnego rodzaju. Założenia te zostały spełnione: obecnie setki aplikacji korzysta właśnie z tego formatu. Elastyczność RTF sprawia, że jest to idealny format do wielu zastosowań i może być wykorzystany zarówno do generowania faktur i raportów, jak i do tworzenia słowników na podstawie baz danych słów.

Ź r ó d ł o: RTF. Leksykon kieszonkowy, Wyd. Helion (www.helion.pl)
Go to the top of the page
+Quote Post
chfast
post
Post #4





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Jakieś przykłady praktycznego wykorzystania?


--------------------
pozdrawiam, chfast
Go to the top of the page
+Quote Post
orson
post
Post #5





Grupa: Zarejestrowani
Postów: 548
Pomógł: 2
Dołączył: 19.07.2003

Ostrzeżenie: (0%)
-----


witam ...

kazdy program ma dolaczona na plycie instrukcje w pliku rtf [ostatnio czesciej pdf] ... to jest tak jak doc ale jest otwarty wiec mozna wymieniac dokumenty pomiedzy platformami

cya


--------------------
Computer games don't affect kids; I mean if <span style="font-weight: bold;">Pac Man</span> affected us as kids,we would all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music.
Go to the top of the page
+Quote Post
Seth
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Vir: a moze zrobil bys z tego artykul i wzucili bysmy do php.pl ?
Go to the top of the page
+Quote Post
Vir
post
Post #7





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


Spróbować zawsze można biggrin.gif Ciekawe, czy podołam zadaniu...
Napiszę PW z pytaniami, które mi się nasuwają z związku z napisaniem takiego artykułu.
Go to the top of the page
+Quote Post
matic
post
Post #8





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.07.2003

Ostrzeżenie: (0%)
-----


Taki artykuł już istnieje:
http://www.phpsolmag.org/pl/files/forms_pl_hi.pdf (HI - 1.2MB)
http://www.phpsolmag.org/pl/files/forms_pl_lo.pdf (LO - 0.4MB)
Go to the top of the page
+Quote Post
Vir
post
Post #9





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


Cytat

Istnieje i takie rozwiązanie, jak to przedstawione w artykule, do którego podałeś linki. Czytałem ten artykuł przed opisaniem powyższego rozwiązania. Ponadto przedstawiony we wspomnianym przez Ciebie artykule sposób jest pewną modyfikacją/rozszerzeniem tego co już dawno można było przeczytać np. w książce "php i MySQL. Programowanie sieci Web" wyd. Robomatic.
Nie sądzę w żadnym wypadku, że jest to złe rozwiązanie, przecież działa ;-) natomiast to, które opisałem wydaje mi się być lepsze.
Pod pojęciem lepszego rozwiązania rozumiem jego prostotę (wbrew temu jakie wrażenie może wywrzeć pierwsze czytanie tego postu) - nie ma konieczności pisania dodatkowych skryptów, dzięki wprowadzaniu kodu php bezpośrenio do dokumentu RTF nie krążymy po skryptach tylko wszystko wpisujemy bezpośrenio w miejscu, gdzie mają pojawić się dane. Łatwiej nam poradzić sobie z wartościami przekazywanymi z checkbox-ów, znakami nowej linii w polach textarea...
O tym w artykule, który mam nadzieję jednak powstanie biggrin.gif
Go to the top of the page
+Quote Post
matic
post
Post #10





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.07.2003

Ostrzeżenie: (0%)
-----


Ty miales ksiazke. Inni nie wiedzieli do czego bijesz, wiec pokazalem cos gdzie mozna uzyskac szczegolowe info. dot. tego tematu.
Twoj post to rozszerzenie, wiec Ty wiesz co chciales przekazac. Majac podstawy reszte mozna juz samemu stworzyc w miare potrzeb.
Go to the top of the page
+Quote Post
pieto
post
Post #11





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

Ostrzeżenie: (0%)
-----


Hej, witam, Poważny problem Jak zminienić formatowanie tekstu tj bold, italic, underline itp. bo problem jest w tym ze w html jest <b>BOLD</b>, a jak przerobić to na rtf ?


--------------------
Materiały i Wypracowania znajdziesz na zgapa.pl i
Encyklopedii Zgapedia
Jedyny przedawkowany portal motoryzacyjny to autoholik.pl
Go to the top of the page
+Quote Post
FiDO
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


www.wotsit.org

Tam jest specyfikacja RTF i sa opisane wszystkie znaczniki.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
pieto
post
Post #13





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

Ostrzeżenie: (0%)
-----


Nie za bardzo idzie się połapać, teraaz chodzi mi o tabele może komuś udało się skonstruować takie cuś ?


--------------------
Materiały i Wypracowania znajdziesz na zgapa.pl i
Encyklopedii Zgapedia
Jedyny przedawkowany portal motoryzacyjny to autoholik.pl
Go to the top of the page
+Quote Post
madalena
post
Post #14





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 14.10.2003

Ostrzeżenie: (0%)
-----


Witajcie
Ja mam Pytanie nastepującej treści
Mam w bazie kontrahentów z ich szczegółowymi danymi, a chciałbym aby wszystkie te dane wyswietlić w rtf i dodatkowo w tabeli

Liczba wierszy w tym przypadku byłaby różna

Jak to rozwiązać
Go to the top of the page
+Quote Post
Vir
post
Post #15





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


http://forum.php.pl/index.php?showtopic=14659

Podobny problem miał Migacz.

Pozdrawiam

Ten post edytował Vir 2.09.2004, 16:08:59
Go to the top of the page
+Quote Post
Fremd
post
Post #16





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 22.05.2003

Ostrzeżenie: (0%)
-----


Nie chcialbym irytowac VIR'a, ale jest tu expertem od RTF i byc moze pomoze mi zlokalizowac problem, z ktorym sie spotkalem.
Wykonalem wszystkie instrukcje jakie sa powyzej opisane i niestety efektu pozytywnego nie widac. Jesli wstawie
  1. <? Header('Content-Type: application/rtf') ?>
(bez spacji - jak w opisie) oczywiscie w notatniku lub innym programie nie czytajacym RTF to po otwarciu pliku.rtf przez Worda widac taki sam kod jak w notatniku. Oczywiscie po wygenerowaniu z przegladarki RTF'a widac wlasnie ten kod. Strona kodowa taka jaka polecal VIR, ustawienia w Apachu tez.
Proba byla wykonywana na lokalnym kompie, z wersja Worda 2002 SP3. Polskich czcionek nie uzywam, mam wszystko 'de'.

Temat mnie zaciekawil, wiec nie chcialbym go tak pozostawic. Uznanie dla VIR'a za artykow i informacje o RTF'ie.

Pozdrawiam @d@m


--------------------
Nigdy nie bierz udzialu w cudzej krucjacie.
Go to the top of the page
+Quote Post
Vir
post
Post #17





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 25.02.2004

Ostrzeżenie: (0%)
-----


Spróbuj rozpocząć kod php znacznikiem <?php i wstawić ; po deklaracji nagłówka:
  1. <?php
  2. Header(&#092;"Content-Type: application/rtf\");
  3. ?>


Jak to nie pomoże to podeślij mi na PW kod dokumentu /mam nadzieję, że nie jest zbyt długi winksmiley.jpg /.

Rozwiązanie umieszcze na forum.

Pozdrawiam smile.gif

Edit:

Otrzymałem przesłany przez Ciebie kod dokumentu RTF.
Wszystko działa pięknie, ładnie...

W związku z powyższym wnioskuję, że problem leży po stronie serwera. Sprawdź jeszcze raz wszystkie dyrektywy konfiguracyjne serwera (AddType apaplication/x-httpd-php .rtf, AllowOverride FileInfo lub AllowOverride All itd.). Nie zapomnij go zrestartować winksmiley.jpg

Edit2 - do postu poniżej:
Chmm, ja też bezmyślnie wkleiłem powyżej kod z artykułu, w którym jak widać jest literówka tongue.gif Przy najbliżej okazji zgłoszę to do poprawki biggrin.gif
Pozdrawiam

Ten post edytował Vir 7.09.2004, 11:07:40


--------------------
Polak wszystko może, a jak nie może to stara się jak może.
Go to the top of the page
+Quote Post
Fremd
post
Post #18





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 22.05.2003

Ostrzeżenie: (0%)
-----


Istotnie problem lezal po stronie Apacha,

bezmyslnie skopiowalem
AddType apaplication/x-httpd-php .rtf

zamiast
AddType application/x-httpd-php .rtf

Dziekuje za pomoc.

Ten post edytował Fremd 6.09.2004, 08:19:36


--------------------
Nigdy nie bierz udzialu w cudzej krucjacie.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 13:48