2009-03-24 15 views
12

Tôi có tệp RTF mà tôi muốn hiển thị bên trong trang web sau khi thẻ đã được thay thế bằng thông tin nhập của người dùng.Có thể hiển thị tệp RTF bên trong một trang web bằng cách sử dụng PHP không?

Tôi muốn có thể hiển thị tệp RTF mà không phải chuyển đổi tệp đó thành nội dung nào đó trước khi hiển thị.

Mỗi lần tôi thử nó bây giờ nó mang lại cho tôi popup mở/hộp mặc dù tôi đang nói với nó để hiển thị nó inline với tiết kiệm:

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

echo $output; 
+0

Mọi người đều cho rằng điều này là không thể, nhưng tôi hiểu Mark là gì sau đó. Đôi khi trình duyệt sẽ hiển thị nội dung PDF hoặc Word doc, được nhúng bên trong trình duyệt. Không chắc chắn tại sao nó đôi khi làm điều đó. Tôi nghĩ nội tuyến/đính kèm là điều duy nhất kiểm soát hành vi này. –

+0

Liệu người dùng có cài đặt MS Word luôn không? –

+0

CHÍNH XÁC !!!! Bạn hiểu những gì tôi sau. Tôi không thể đảm bảo rằng người dùng sẽ cài đặt Word. Đó là lý do tại sao tôi muốn hiển thị nội tuyến. Tôi đoán tôi sẽ phải chuyển đổi nó thành một cái gì đó khác như JPG. Cuối cùng tôi sẽ cần phải chuyển đổi nó sang PDF, nhưng đó là một vấn đề khác. – Mark

Trả lời

7

Hầu hết các trình duyệt sẽ không hiển thị nội dung RTF một cách đáng tin cậy. Có thể phân tích cú pháp RTF thành HTML và hiển thị nội dung HTML trên trang web của bạn.

Bạn cần một số loại chương trình để phân tích RTF và chuyển đổi nó thành HTML. Tôi cho rằng nó phải miễn phí. Tôi không biết bất kỳ phân tích RTF miễn phí đáng tin cậy hoặc RTF nào cho các thư viện HTML trong PHP.

tôi khuyên bạn nên sử dụng một chương trình chuyển đổi dòng lệnh như RTF2HTML: http://sageshome.net/?w=downloads/soft/RTF2HTML.html

Bạn sẽ cần phải tải về và cài đặt chương trình này trên máy chủ web của bạn, cho phép người dùng tải lên các tập tin vào một thư mục tạm, và sau đó gọi ứng dụng dòng lệnh từ PHP với shell_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); 

Sau đó, phân tích các kết quả dưới dạng HTML và hiển thị chúng. Không phải là một chiến lược xấu. Lưu ý rằng có thể bạn sẽ cần xóa phần đầu, phần thân và các thẻ khác nếu bạn định hiển thị nội dung bên trong một trang web khác.

+2

Yêu cầu (tôi biết): "Tôi muốn có thể hiển thị tệp RTF mà không phải chuyển đổi nó thành nội dung nào trước khi hiển thị." ? –

+3

Vâng, tôi đã nhận được yêu cầu. Thay vì chỉ nói với anh ta anh ấy là SOL, giống như một số người khác, tôi nghĩ tôi sẽ nói với anh ấy anh ấy là SOL trong khi cung cấp một giải pháp có cơ hội làm việc. Tôi cho rằng anh ta không muốn tự mình triển khai trình phân tích cú pháp RTF. Bằng cách này anh ta không phải làm thế. – danieltalsky

-2

Bạn có thể không chỉ ra một tập tin từ bên trong mã PHP . Bạn cần trích xuất dữ liệu từ nó, sau đó in nội dung nội tuyến.

Chức năng php 'file_get_contents' có thể làm những gì bạn cần. Các chức năng của nhãn hiệu là ở đây: http://us2.php.net/filegetcontents

sử dụng Một mẫu là ở đây:

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

thực hiện điều này cũng giống như sử dụng fread(); nó xuất ra tất cả mã rtf thay vì tài liệu rtf thực tế. thậm chí tôi có thể hiển thị một tài liệu RTF trong một trang web hay tôi cần phải chuyển đổi nó sang một cái gì đó khác trước? – Mark

+0

Theo như tôi biết, trước hết bạn cần phải lấy nội dung ra khỏi nó. Nếu không trình duyệt không biết phải làm gì với nó. –

+0

Vâng, điều này chỉ thẳng sẽ không hoạt động. Nếu bạn in kết quả của cuộc gọi này đến màn hình, người dùng sẽ thấy một chuỗi các chuỗi thoát RTF, sẽ không giống như tài liệu mà họ đang mong đợi. – danieltalsky

1

trang Web chỉ có thể chứa HTML. Bạn sẽ cần một plugin trình duyệt như flash để hiển thị các loại tệp khác. Xem ví dụ Scribd.

+0

Một nitpick: bạn chủ yếu là đúng nhưng hầu hết các trình duyệt cũng có thể hiển thị XML (phần lớn thời gian) và tất nhiên là văn bản thuần túy. –

+0

Plus, với trình duyệt plugin acrobat có thể hiển thị pdf. –

2

Đầu tiên: bạn đã loại sai nội dung của mình. cho RTF là text/rtf

Thứ hai: bạn sẽ chỉ có thể hiển thị nội dòng loại nội dung này, trình duyệt web có thể hiển thị. RTF không phải là một trong số này. Vì vậy, bạn sẽ không thể hiển thị trực tuyến mà không cần chuyển đổi hoặc không có trình cắm nào đó cho trình duyệt. Tất nhiên chuyển đổi có thể là on-the-fly.

+0

+1 cho "Nội dung RTF đúng loại văn bản/rtf" –

0

Đây không phải là câu trả lời chính xác cho câu hỏi của bạn, nhưng một điều bạn có thể muốn làm là xóa "filename = mark.rtf" khỏi tiêu đề. Tôi đã có trình duyệt xử lý nội dung nào đó dưới dạng tải xuống nếu tôi bao gồm "tên tệp" trong tiêu đề, ngay cả khi "Nội dung-Bố cục" là "nội tuyến".

4

Bạn có thể muốn kiểm tra https://github.com/tbluemel/rtf.js cho client-side RTF rendering.Nó vẫn còn ở giai đoạn đầu nhưng nó ám cả đồ họa nhúng. Tuy nhiên, việc hỗ trợ hiển thị ảnh nghệ thuật WMF được nhúng vẫn rất hạn chế và yêu cầu hỗ trợ trình duyệt cho thẻ.