문제

PHPDOCX PRO를 사용하여 PHPDOCX PRO를 사용하여 .docx 파일을 생성하는 프로젝트가 있습니다. 데이터를 템플릿에 가져 오는 데 사용할 수 있습니다 만, 파일이 다운로드되어 MS Word 2010에서 열리면 프로그램이 내용에 문제가 있기 때문에 파일을 열 수 없기 때문에 "파일이 손상된 세부 사항이 있습니다. 열 수 없습니다. " 단어는 문서를 복구 할 수 있지만 문제는 여전히 처음부터 손상되어서는 안된다는 것을 의미합니다.

이 문서를 생성하는 방법입니다.

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');
  }
}
.

원래는 PergenaCodicetagode 함수를 사용하여 파일을 가져 오려고했지만 이상적이지 않은 서버에 .docx 파일의 사본을 남기고있었습니다. 나는 뭔가를 놓치고 있니? Phpdocx가 손을 빌려주는 누군가가 있습니까?

편집 : 글쎄, 나는 바보 같아. 파일을 출력하는 코드의 일부로 문제를 좁히면 마침내 파일을 열었고 파일이 성공적으로 출력 된 후 Web FrontEnd가 성공적으로 출력 된 후 Web Frontend가 HTML의 시작을 끝까지 추가합니다. DOCX 파일은 '손상된'파일을 만듭니다. createDocxAndDownload()가 고정 된 직후의 한 줄은 다음을 고정시킨 직후 :

exit;
.

pekka : 새로운 정보로 답하고 싶다면 답변을 받아 들일 것입니다.

도움이 되었습니까?

해결책

파일을 출력하는 코드 부분으로 문제를 좁히면 마침내 파일이 파일을 열었습니다. 파일이 성공적으로 출력 된 후 웹 프런트 엔드가 HTML의 시작을 추가합니다.DOCX 파일의 끝까지 '손상된'파일을 만듭니다.unlink()가 고정 된 직후의 한 줄은 다음을 고정시킨 직후 :

exit;
.

다른 팁

이것은 템플릿 파일에 직접 액세스하지 않고도 정확히 정확하지 않고 템플릿 엔진이 종종 실패하는 포인터가 있습니다.

  • 모든 PHP 변수를 콘솔에 로깅하십시오. print print_r($this->rec->variable_name, true);를 선택한 다음 모든 변수가 문자열인지 확인하십시오.
  • 는 null입니다.
  • 템플릿 파일을 검사하고 스타일 (즉, 글꼴 유형, 글꼴 크기 등)이 각 템플리트 변수에서 일관되게되어 있는지 확인하십시오. 즉, 변수의 절반이 다른 스타일 인 변수가 변수와 다른 스타일 인 변수가 없는지 확인하십시오. 이 특정 미묘함은 템플릿 파일에 소개하기가 매우 쉽고 일반적으로 해결하는 가장 쉬운 방법은 간단한 삭제 및 각 템플릿 변수를 다시 작성하는 것입니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top