2012-03-12 3 views
1

내 사이트는 AJAX 서버 측 PHP를 호출하는 HTML/Javascript입니다. 사용자가 아이콘을 클릭하고 MySQL 데이터에서 보고서를 작성한 다음 페이지를 다시로드하지 않고 클라이언트의 바탕 화면에 을 저장하도록 허용하려고합니다.사용자 데스크탑에서 doc/docx 문서를 동적으로 생성합니다.

문서를 만드는 옵션은 다음과 같이 표시됩니다. (필자는 자바가 아닌 서버 측에서 처리해야한다.) 파일이 어디서 끝나는 지 모르겠습니다. 제 오해를 바로 잡으십시오.

방법 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

내 집 dev에 환경에서 1 & 2를 테스트했습니다,하지만 난 파일을 찾을 수 없습니다! 앞으로 나아갈 수있는 최선의 방법은 무엇입니까?

감사합니다 :) BTW

, 나는 관련 게시물 here, herehere가 알고 있지만, 아무도 정말 질문에 대한 대답하지 않습니다.

+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, ...)를 생성 할 수 있습니다. 결과를 임시 파일없이 다운로드하거나 서버 측에 저장하도록하는 기능이 있습니다.

관련 문제