2012-05-21 3 views
0

나는 phpdocx pro를 사용하여 from 템플릿에 .docx 파일을 생성하는 프로젝트를 가지고 있습니다. 파일을 쉽게 다운로드 할 수 있지만 MS Word 2010에서 파일을 다운로드하여 열 때 프로그램에서 내용에 문제가있어 파일을 열 수 없다고보고합니다. "파일이 손상되었습니다. 열 수 없습니다 ". Word는 문서를 복구 할 수 있지만 문제는 여전히 처음부터 손상되어서는 안된다는 것을 의미합니다. 내가 파일을 얻기 위해 자신의 createDocxAndDownload() 기능을 사용하려고했다, 원래phpdocx로 손상된 .docx 다운로드

function generateUnitDesign(){ 
    if($this->populateRecords()){ 
     require_once dirname(__FILE__).'/phpdocx/classes/CreateDocx.inc'; 
     $filename = 'UnitDesignTemplate-'.str_replace(' ', '', $this->rec->title); 
     //Create Document 
     $document = new CreateDocx(); 
     $document->addTemplate(dirname(__FILE__).'/templates/unitdesigntemplate.docx'); 

     // Fill in text fields 
     $document->addTemplateVariable('TITLE', $this->rec->title); 
     $document->addTemplateVariable('CHALLENGE', $this->rec->challenge, 'html'); 
     $document->addTemplateVariable('HOOK', $this->rec->hook, 'html'); 
     $document->addTemplateVariable('RESEARCH', $this->rec->research, 'html'); 
     $document->addTemplateVariable('AUDIENCE', $this->rec->audience, 'html'); 
     $document->addTemplateVariable('SUMMARY', $this->rec->project_brief, 'html'); 
     $document->addTemplateVariable('RESOURCES', $this->rec->resources, 'html'); 
     $document->addTemplateVariable('REQUIREMENTS', $this->rec->requirements, 'html'); 
     $document->addTemplateVariable('SCAFFOLDING', $this->rec->scaffolding, 'html'); 

     $document->createDocx($filename); 
     unset($document); 
     header("Content-Type: application/vnd.ms-word"); 
     header("Content-Length: ".filesize($filename.'.docx')); 
     header('Content-Disposition: attachment; filename='.$filename.'.docx'); 
     header('Content-Transfer-Encoding: binary'); 
     ob_clean(); 
     flush(); 
     readfile($filename.'.docx'); 
     unlink($filename.'.docx'); 
    } 
} 

하지만 서버에 .DOCX 파일의 복사본을 떠날 것이다 :

이 나는 ​​문서를 생성하고있어 어떻게 , 그것은 이상적이지 않았다. 내가 놓친 게 있니? 손을 빌려주는 phpdocx에 더 많은 경험을 가진 사람이 있습니까?

편집 : 글쎄, 나는 바보처럼 느껴진다. 파일을 출력하는 코드 부분까지 문제를 좁히고 나면, 마침내 16 진수 편집기에서 파일을 열었습니다. 문제는 파일이 성공적으로 출력 된 후 웹 프론트 엔드가 HTML의 시작 부분을 끝에 추가한다는 것입니다. docx 파일은 '손상된'파일을 만듭니다.

exit;

페카 : 새 정보와 함께이 대답하고 싶은 경우에, 나는 당신의 대답을 받아 들일 것이 한 줄 바로 unlink() 후 전체를 고정. 확인 확인 후 print print_r($this->rec->variable_name, true);과 :

+1

파일을 조사 했습니까? PHP 오류 메시지가 포함되어있을 것입니다. –

+0

@Pekka 오류 없음 ... 파일에 추가 된 일부 HTML의 윗부분. –

답변

2

파일을 출력하는 코드 부분까지 좁히고 난 후, 마침내 16 진수 편집기에서 파일을 열었습니다. 그리고 파일이 성공적으로 출력 된 후 웹 프런트 엔드가 HTML은 docx 파일의 끝에 '손상된'파일을 만듭니다. unlink() 바로 다음 한 줄로 전체 내용을 수정했습니다.

exit;
1

이 템플릿 파일에 직접 액세스하지 않고 파악하기는 어렵지만, 여기 템플릿 엔진은 종종 실패 할 몇 가지 포인터 :

  • 는 콘솔에 모든 PHP 변수를 로그인 시도는 모든 변수가 문자열이고 아무 것도 NULL이 아님을 나타냅니다.
  • 템플릿 파일을 검사하고 스타일 (예 : 글꼴 유형, 글꼴 크기 등)이 각 템플릿 변수에서 일관성이 있는지 확인하십시오. 즉, 변수의 절반이 나머지 변수와 다른 스타일 인 경우 변수가 없는지 확인하십시오. 이 특별한 미묘함은 템플릿 파일에서 매우 쉽게 소개 할 수 있으며, 일반적으로 수정하는 가장 쉬운 방법은 각 템플릿 변수를 간단히 삭제하고 다시 쓰는 것입니다.

마지막으로 addTemplateVariable 메서드를 호출 할 때 'html'매개 변수를 제거하고 차이가 있는지 확인하십시오. 실제로 HTML을 사용하지 않는다면 'html'매개 변수를 전달할 필요가 없습니다. 반대로 HTML을 사용하는 경우 손상된 파일은 잘못 구성된 HTML 일 수 있으므로 Microsoft Word에서 문서를 손상된 것으로 플래그 지정합니다.

+0

나는 이것을 시도했지만 문제가 코드의 docx 부분이 아니라는 것을 발견했다. 그것은 코드의 출력에있다. –

관련 문제