2012-03-12 3 views
1

Мой сайт HTML/Javascript с AJAX, вызывающим серверный PHP-сервер. Я хочу разрешить пользователю щелкнуть значок и создать отчет из данных MySQL, а затем сохранить его на рабочем столе клиента без, выполняющего перезагрузку страницы.Динамическое создание документа doc/docx на рабочем столе пользователей

Варианты создания документа, как я могу его собрать, выглядят следующим образом. (Я считаю, что это нужно сделать на стороне сервера, а не с Javascript.) Я не уверен, где файл попадает в каждом случае. Пожалуйста, не стесняйтесь исправить мои недоразумения :)

Способ 1 - это появляется только для создания файла .doc. Я не уверен, где файл ставится.

$fp = fopen("method1.doc", 'w+'); 
$str = "<B>This is the text for the word file created through php programming</B>"; 
fwrite($fp, $str); 
fclose($fp); 

Способ 2 - это также создает файл .doc.

$word = new COM("word.application") or die ("couldnt create an instance of word"); 
echo "loaded , word version{$word->version}"; 
$word->visible = 1; 
$word->Documents->Add(); 
$word->Selection->TypeText("Sample text."); 
$word->Documents[1]->SaveAs("method2.doc"); 
$word->Quit(); 
$word->Release(); 
$word = null; 

Способ 3 - также файл .doc, я думаю.

header('Content-type: application/vnd.ms-word'); 
header("Content-Disposition: attachment;Filename=method3.doc"); 

echo "<html>"; 
echo "<body>"; 
echo "<b>My first document</b>"; 
echo "</body>"; 
echo "</html>"; 

Метод 4 - PHPWord

Метод 5 - PHPDocx

Я тестировал 1 & 2 в моей домашней Dev среде, но я не могу найти файлы! Каков наилучший путь вперед, пожалуйста?

Спасибо :)

Кстати, я знаю, что есть соответствующие должности here, here и here, но никто на самом деле не отвечает на вопрос.

+0

В первой и второй попытке файл сохраняется на сервере, а не отправляется клиенту.Если вам нужен клиент для сохранения файла, вы должны вывести сгенерированный контент и установить правильные заголовки ответов, как в третьем примере (хотя это не будет точно генерировать «правильный» документ Word). –

ответ

1

Методы 1 & 2 создайте документ на стороне сервера где-нибудь в файловой системе (после этого вам нужно передать его клиенту).

Способ 3 создает документ как ответ на запрос клиента - в зависимости от настроек браузер либо сохранит его, либо откроется в окне (или спросит «Сохранить/Открыть/Отменить?»).

Я лично сделал бы java-апплет или флэш-приложение, которое будет иметь доступ к вашей локальной файловой системе. Он может загружать документ с сервера и сохранять в локальную файловую систему без перезагрузки страницы.

2

Если вы хотите иметь значок, а при нажатии на значок он загружается без перезагрузки страницы, вам просто нужно сделать ссылку на значок, который приносит скрипту, который запускает загрузку с использованием соответствующих заголовков ,

Пример:

header ('Pragma: no-cache'); 
header('Content-Disposition: attachment; filename="'.$File.'"'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Cache-Control: public'); 
header('Content-Description: File Transfer'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: '.$Len); 

Делая это, загрузка начнется, но страница, на которой щелкнул пользователь не будет изменен, и не перегружается.

Если вы хотите создавать динамические файлы DOCX для загрузки, я рекомендую использовать OpenTBS. Эта библиотека может создавать DOCX (и XLSX, PPTX, ODT, ODS, ...) с использованием шаблонов. Он имеет функцию, которая позволяет отправлять результат непосредственно в виде загрузки, без временных файлов, или позволяет сохранять на стороне сервера.

Смежные вопросы