Opinie na temat artykułu "http://php.pl/index.php/phppl/artyku_y/pomys_y_porady_i_sugestie/generowanie_plik_w_rtf"
Witam
Artykuł bardzo ciekawy. Pomógł mi rozwiązać parę problemów, ale mam jeszcze jeden, dla mnie b.istotny.
Otóż pobieram z bazy dane i muszę je wstawić do rtf w postaci tabeli
|Lp.|Nazwisko|Imie|
|1 |Kowalski |Jan |
|2 |Chrzna |Jan |
itd.
Oczywiście za każdym razem liczba osób jest inna. Gdzie wstawić pętlę by generowala nowe wiersze tabeli automatycznie, oraz by 1 wiersz tabeli był widoczny na każdej nowej stronie.
Z góry dzięki za jakąkolwiek pomoc
Mama problemy z tworzeniem tego rtf wyskakuje mi [php:1:3ba0b4254e]Warning: Unexpected character in input: '' (ASCII=92) state=1 in c:program filesapache groupapachehtdocsadminm.rtf on line 1
Warning: Unexpected character in input: '' (ASCII=92) state=1 in c:program filesapache groupapachehtdocsadminm.rtf on line 1
Parse error: parse error, unexpected T_STRING in c:program filesapache groupapachehtdocsadminm.rtf on line 1
[/php:1:3ba0b4254e]
Co robie nie tak
Sorki, że tak późno się odzywam i bez gotowych odpowiedzi, ale poczekajcie chwilę na nie - może jeszcze z 1 dzień bo komp łącznie z siecią tak mi szwankuje, że cudem piszę tego posta (o ile nie wywali mnie zaraz ).
Ps.
Problemy są do rozwiązania
Hi!
Na początek małe sprostowanie do arykułu 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 - 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
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
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"
Mail migacz-a:
Sprawa jest do wykonania, ale jest pewne ale - 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 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.:
<?php http://www.php.net/header('Content-Type: application/rtf'); $conn=http://www.php.net/mysql_connect('localhost', 'root') or http://www.php.net/die ('Nie mogę się połączyć z bazą.'); http://www.php.net/mysql_select_db('info', $conn); $result=http://www.php.net/mysql_query('select opis from dane', $conn); ?>
<?php while ($myrow = http://www.php.net/mysql_fetch_assoc($result)) { http://www.php.net/echo 'trowd trgaph cellx1440 pardintbl ' .$myrow['opis'] .'cell row'; } ?>
dzięki za odpowiedź. pocztalem troche o rtfie i pomału dochodzę do tego co chce osiągnąc. Dzięki
Witam, Może ktoś wymyśli sposób żeby rtfa można było zapisać po podaniu ścieżki i nazwy ?
z góry dzięki za każdą pomoc i pozdrawiam
Nie ma możliwości zapisania takiego pliku we wskazane miejsce na dysku usera (bo zakładam, że chodzi Ci o takie rozwiązanie), ponieważ php to język server-side. Możesz zrobić co najwyżej tak:
za
<?php http://www.php.net/header('Content-Type: application/rtf'); ?>
<?php http://www.php.net/header('Content-Disposition: attachment; filename=nazwa.rtf'); ?>
Ok, dzięki, to chyba się nie przyda
W związku z tym, że docierały do mnie w ostatnim czasie pytania (na PW) dotyczące różnych zagadnień z zakresu generowania dokumentów RTF postanowiłem niniejszym przedstawić publicznie rozwiązania dwóch problemów poruszanych przez użytkowników do mnie piszących.
Przy okazji zwracam się z prośbą o nie pisanie w przyszłości PW z zapytaniem dotyczącym generowania dokumentu RTF, a umieszczanie go na forum, w tym wątku, tak aby inni mogli później skorzystać z udzielonej odpowiedzi.
Pierwsze zapytanie dotyczło formatowania tekstu. Odpowiedź: W celu sformatowania tekstu w generowanym dokumencie RTF należy zastosować polecenia formatujące (do znalezienia w specyfikacji RTF). Listę podstawowych poleceń formatujących przedstawiam poniżej:
\i kursywa
\b pogrubienie
\ul podkreślenie
\super indeks górny
\sub indeks dolny
\strike przekreślenie.
Kolejną poruszaną kwestią było wstawienie obrazka do dokumentu RTF.
Przykład wstawienia obrazka .gif to wywołanie funkcją echo wartości hex danego pliku graficznego poprzedzonej funkcją RTF deklarującą wstawiany typ danych:
<?php http://www.php.net/echo \"{pict pngblip 2sfjssfs9sfm00000000sf0034}\"; ?>
<html> <head> <title>Bin2Hex</title> <style type=\"text/css\"> body { background-color: #f6f6f6; font-family: Verdana, monospace; font-size: 12px; } a { color: #000000; text-decoration: none; } a:hover { color: #696969; } </style> <script type=\"text/javascript\"> function zaznacz() { document.getElementById('hex').select(); } </script> </head> <body> <h5>Konwersja pliku to wartości hex</h5> <form enctype=\"multipart/form-data\" action=\"bin2hex.php\" method=\"post\"> Plik do konwersji: <input name=\"file\" type=\"file\"> <input type=\"submit\" value=\"Konwertuj\"> <br /><br /> <textarea cols=\"80\" rows=\"26\" id=\"hex\"><?php if ( http://www.php.net/is_uploaded_file( @$_FILES['file']['tmp_name'] ) ) { $filename = $_FILES['file']['tmp_name']; $fd = http://www.php.net/fopen ($filename , \"r\" ); $data = http://www.php.net/fread ( $fd, http://www.php.net/filesize ( $filename ) ); http://www.php.net/fclose ( $fd ); http://www.php.net/print http://www.php.net/bin2hex($data); } ?></textarea> </form> <a href=\"javascript:zaznacz()\">Zaznacz wszystko</a> </body> </html>
mam problem,
wykonuje wszystko tak jak jest podane w przykladzie podanym przez Vir'a, odnosnie tabeli. i nic.
zapisuje po wszytkich modyfikacjach ten plik jako plik.php i w przegladarce otwiera mi sie dodatkowe okno z komunikatem ze rozpoczeto pobieranie pliku nieznanego typu MIME.
Uzywam Mozilli PL 1.6.
w oknie tym mam do dyspozycji kilka opcji:
otworz za pomoca domyslenej aplikacji...
kiedy otwieram ten plik w domyslnej aplikacji, a w tym przypadku jest to edytor edHTML,
widze tylko kod z wynikiem zapytania w odpowiednim miejscu.
Jesli wybiore opcje zapisz, i zapisze ten plik z rozszerzeniem .rtf , uzyskuje poprawny dokument rtf z tabela
Czy istnieje mozliwosc, aby od razu zostal wygenerowany dokument rtf, bez koniecznosci dodawania rozszerzenia .rtf i zapisu na dysku?
Przepraszam, za tak dlugi tekst.
Prosze o wskazowke.
Jak sformatowac wyniki zapytania z bazy
w postaci listy:
1.
a)
c)
....
w rtf?
prosze o wskazowki.
W dokumentacji jest strasznie duzo opcji i nie wiem od czego zaczac, i ktore z nich sa mi potrzebne.
pozdrawiam
Ciekawe pytanie
Przez najbliższe 2 tygodnie mogę nie mieć czasu przyjrzeć się temu bliżej, ale możesz zacząć od poczytania o "List table" w specyfikacji RTF. Być może znajdziesz tam coś ciekawego.
Ostatecznie można to zrobić w samym php - jeżeli odczytujesz dane z bazy w pętli to również w pętli możesz wypisać kolejne cyfry 1,2... do tego dodać kropkę i znak tabulacji, czy jakiś podwójny odstęp... Można pokombinować
Swoją drogą podglądając kod dokumentu RTF, który zawiera wypunktowanie widać, że zapisane są poszczególne cyfry i litery wypunktowania (wniosek - może nie da rady zrobić tego "automatem").
dzieki za wskazowki, sprobuje cos pobrobowac.
pozdrawiam:)
mam pytanie o konfiguracje serwera przy tych plikach rtf :
IIS nie posiada ani pliku .htaccess ani httpd.conf
to są pliki z Apache
niestety z opisu nie wynika jak się te pliki rtf tworzy ani po co taka a nie
inna konfiguracja więc prosze o podpowiedz jak to robić na IIS.
AddType jest to dyrektywa w Apache'u za pośrednictwem której dodaje się nowe typy MIME o danym rozszerzeniu.
AddType application/x-httpd-php .rtf - AddType - dyrektywa, application/x-httpd-php - typ MIME, .rtf - rozszerzenie.
Dzięki temu dokumenty RTF zostaną skojarzone ze skryptami php.
Z tego co widziałema na php.net to jest opisane kojarzenie plików o danym rozszerzeniu ze skryptami php (.php)
i wydaje mi się, że w tym przypadku tak samo jak rozszerzenie .php należy dodać rozszerzenie .rtf.
A w zasadzie wrzucę rozwiązanie po angielsku (nie moje):
Witam Wwszystkich . Jestem u Was nowy.
Znalazłem to hasło "Generowanie plików RTF" w Gogle i tak tu trafiłem Zainteresowany jestem specyfikacją plików RTF. Nie mogę jednak otworzyć odnosnika "Generowanie plików RTF". Mieli sie i mieli ,ale się nie otwiera. Czy jest inny sposób do dotarcia do niego?
http://wortal.php.pl/phppl/wortal/artykuly/pomysly_porady_sugestie_dobre_nawyki/generowanie_plikow_rtf
pytanie nie do tego tematu :
jak Vir zrobił dwa posty które się nie połaczyły ?
Witam,
bardzo zaciekawił mnie ten artykuł =]
Zrobiłem sobie fajny formularzyk który się generuje do rtfa =]
Teraz chciałbym więcej =]]
Obecnie sprawa wygląda tak:
Ktoś wypełnia formularz, zatwierdza naciskając przycisk, i generuje się plik rtf, widzimy pytanie czy chcemy zapisać czy otworzyć ten plik..
Ja jednak chciałbym zzipować ten plik rtf i dodać go jako załącznik mailowy..
Czy ktoś już może to robił?
Będę wdzięczny za pomoc =]
Pozdrawiam,
Przemek Kiesio
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)