2009-03-24 10 views
12

Mam plik RTF, który chcę wyświetlić wewnątrz strony internetowej po zastąpieniu znaczników wprowadzeniem przez użytkownika.Czy można wyświetlić plik RTF na stronie internetowej przy użyciu PHP?

Chciałbym móc wyświetlić plik RTF bez konieczności konwertowania go na coś przed wyświetleniem.

Za każdym razem staram się teraz wyskakuje mi okienko Open/Save pole choć mówię to, aby go wyświetlić inline:

header("Content-type: application/msword"); 
header("Content-Disposition: inline; filename=mark.rtf"); 
header("Content-length: " . strlen($output)); 

echo $output; 
+0

Wszyscy sugerują, że nie jest to możliwe, ale rozumiem, o co chodzi Markowi. Czasami przeglądarka wyświetla plik PDF lub Word doc wbudowany w przeglądarce. Nie wiem, dlaczego czasami to robi. Myślałem, że inline/attachment jest jedyną rzeczą, która kontroluje to zachowanie. –

+0

Czy użytkownik ma zawsze zainstalowany program MS Word? –

+0

DOKŁADNIE !!!! Rozumiesz, po co jestem. Nie mogę zagwarantować, że użytkownik będzie miał zainstalowane Word. Właśnie dlatego chciałem wyświetlić go w linii. Sądzę, że będę musiał przekonwertować to na coś innego, jak JPG. Konieczne będzie przekonwertowanie go na format PDF, ale jest to inny problem. – Mark

Odpowiedz

7

Większość przeglądarek nie wyświetla zawartości RTF w niezawodny sposób. Możliwe jest parsowanie RTF do HTML i wyświetlanie treści HTML na twojej stronie internetowej.

Potrzebujesz jakiegoś programu do parsowania RTF i przekonwertowania go na HTML. Zakładam, że to musi być darmowe. Nie znam żadnej wiarygodnej bezpłatnej analizy RTF lub bibliotek RTF do HTML w PHP.

polecam użyć programu do konwersji wiersza polecenia podobnego RTF2HTML: http://sageshome.net/?w=downloads/soft/RTF2HTML.html

Trzeba by pobrać i zainstalować ten program na swoim serwerze, pozwalają użytkownikowi przesłać plik do katalogu temp, a następnie zadzwonić aplikacja linii poleceń z PHP z powłoką_exec():

$html_output_path = '/path/for/processing/files/' 
$html_output_filename = $username . $timestamp; 
if (is_uploaded_file($_FILES['userfile']['tmp_name']) 
{ 
    shell_exec('rtf2html ' . 
    escapeshellarg($_FILES['userfile']['tmp_name']) . " " . 
    $html_output_path . $html_output_filename); 
} 
$html_to_display = file_get_contents($html_output_path . 
    $html_output_filename); 

Następnie przeanalizuj wyniki jako HTML i wyświetl je. Niezła strategia. Pamiętaj, że prawdopodobnie będziesz musiał usunąć nagłówek, treść i ewentualnie inne znaczniki, jeśli zamierzasz wyświetlać zawartość na innej stronie internetowej.

+2

Co z wymaganiem (zwariowane wiem): "Chciałbym móc wyświetlić plik RTF bez konieczności konwertowania go na coś przed wyświetleniem." ? –

+3

Tak, mam wymóg. Zamiast po prostu powiedzieć mu, że jest SOL, tak jak inni, pomyślałem, że powiem mu, że jest SOL, jednocześnie oferując rozwiązanie, które ma szansę pracować. Sądziłem, że po prostu nie chce samodzielnie implementować parseru RTF. W ten sposób nie musi. – danieltalsky

-2

nie można po prostu wyjściowy plik z kodem PHP . Musisz wyodrębnić z niego dane, a następnie wydrukować zawartość w linii.

Funkcja php "file_get_contents" może zrobić to, czego potrzebujesz. Instrukcja funkcje jest tutaj: http://us2.php.net/filegetcontents

Wykorzystanie Próbka jest tutaj:

$contents = file_get_contents('yourfile.rtf'); 
+0

robi to tak samo, jak przy użyciu fread(); wyprowadza on cały kod rtf zamiast rzeczywistego dokumentu rtf. czy mogę wyświetlić dokument RTF na stronie internetowej, czy muszę najpierw przekonwertować go na coś innego? – Mark

+0

Z tego, co wiem, najpierw musisz pobrać zawartość. W przeciwnym razie przeglądarka nie wie, co z nią zrobić. –

+0

Tak, to po prostu nie zadziała. Jeśli wydrukujesz wyniki tego połączenia na ekranie, użytkownik zobaczy kilka sekwencji pomocniczych RTF, które nie będą wyglądać tak, jak oczekują tego dokumenty. – danieltalsky

1

strony internetowe mogą zawierać tylko HTML. Aby wyświetlać inne typy plików, potrzebujesz wtyczki przeglądarki, takiej jak flash. Zobacz na przykład Scribd.

+0

Dziurkacz: w większości masz rację, ale większość przeglądarek potrafi renderować XML (przez większość czasu) i oczywiście zwykły tekst. –

+0

Plus, z przeglądarkami wtyczek acrobat można wyświetlić pdf. –

2

Po pierwsze: nieprawidłowy typ zawartości. w przypadku RTF jest to text/rtf

Po drugie: będzie można wyświetlać tylko ten typ treści w linii, który może być renderowany przez przeglądarkę internetową. RTF nie jest jednym z nich. Nie będzie można wyświetlać go w linii bez konwertowania lub bez wtyczki do przeglądarki. Oczywiście konwersja może być "w locie".

+0

+1 dla "Prawidłowy typ treści RTF to tekst/rtf" –

0

To nie jest dokładnie odpowiedź na twoje pytanie, ale jedną rzeczą, którą możesz chcieć zrobić, to usunąć "filename = mark.rtf" z nagłówka. Mam przeglądarki traktujące coś jako plik do pobrania, jeśli dodaję w nagłówku "filename", nawet jeśli "Content-Disposition" jest "inline".

4

Możesz chcieć sprawdzić https://github.com/tbluemel/rtf.js na stronie klienta RTF renderingu.Wciąż jest na wczesnym etapie, ale renderuje nawet osadzoną grafikę. Obsługa renderowania osadzonych kompozycji WMF jest nadal bardzo ograniczona i wymaga obsługi przeglądarki dla tagu.

Powiązane problemy