TIL

PHPWord - 여러 문서 파일(docx)을 하나의 문서(docx)로 병합하기

개발따라김양 2024. 12. 6. 14:21

1. 문제 상황

  • 여러 문서 파일을 하나의 문서 파일로 병합해야 했습니다.

 

2. 문제 해결

  • PHPWord 라이브러리를 사용했습니다.
  • 코드
<?php 

require_once '/vendor/autoload.php'; // 라이브러리 경로

use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\IOFactory;



// PhpWord 인스턴스 생성
$phpWord = new PhpWord();

// 파일 경로 배열 생성
$fileArray = [] // 파일 경로 배열

// 각 파일을 PhpWord로 로드하고 병합
foreach ($fileArray as $file) {
    if (!file_exists($file)) {
        echo "파일을 찾을 수 없습니다: $file\n";
        continue;
    }

    try {
        $source = IOFactory::load($file);
        if (!$source) {
            echo "파일 로드 실패: $file\n";
            continue;
        }
        $sections = $source->getSections();

        // 섹션별로 문서에 추가
        foreach ($sections as $section) {
            $newSection = $phpWord->addSection();
            foreach ($section->getElements() as $element) {
                $newSection->addElement(clone $element);
            }
        }
    } catch (Exception $e) {
        echo "문서 처리 중 오류 발생: " . $e->getMessage() . "\n";
    }
}

// 병합된 문서를 저장
$outputFile = __DIR__ . '/abstract_All.docx';

try {
    $objWriter = IOFactory::createWriter($phpWord, 'Word2007');
    $objWriter->save($outputFile);
    echo "문서 병합 성공: $outputFile\n";
} catch (Exception $e) {
    echo "문서 저장 중 오류 발생: " . $e->getMessage() . "\n";
}