[PHP] MS Word docx 파일 생성 라이브러리
업무에 필요해서 자료를 검색하던 중 php에서 word docx 파일을 생성할 수 있는 공개 라이브러리를 발견했다. PHPWord 인데 베타 상태이긴 하지만 잠깐 사용해본 바로는 아무 이상없이 파일을 생성해줬다. 워드 파일에서 특정 필드에 웹에서 넘겨받은 값을 넣고 docx 파일을 생성하려는 기능이 필요했는데 딱 PHPWord가 그 기능을 제공했다.
PHPWord 사이트 : http://phpword.codeplex.com/
내개 필요했던 기능은 Template 기능으로 서버상에 템플릿 docx 파일이 존재하고 이 파일에 특정 항목의 값을 post로 넘겨 받은 후 템플릿 파일에 그 값을 채워넣고 워드파일을 생성하는 것이다. PHPWord/Examples/Template.php 파일이 예제이다.
그런데 이 기능을 테스트할 때 변수에 한글이 입력되면 워드파일에서 글자가 깨지는 문제가 발생했다. 이 부분을 수정하려면 PHPWord/Template.php 파일에서 아래 부분을 찾아 수정하면 된다.
public function setValue($search, $replace) {
if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
$search = '${'.$search.'}';
}
if(!is_array($replace)) {
$replace = utf8_encode($replace);
}
$this->_documentXML = str_replace($search, $replace, $this->_documentXML);
}
위 코드를 아래와 같이 수정한다.
public function setValue($search, $replace) {
if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
$search = '${'.$search.'}';
}
if(!is_array($replace)) {
//$replace = utf8_encode($replace);
}
$this->_documentXML = str_replace($search, $replace, $this->_documentXML);
}
값에 utf8_encode 가 적용되는 막으면 한글이 깨지지 않게 된다.