ワイズリマインダー

DocxMergeで改行されない時の対処法

phpで複数のdocxを結合する時、
DocxMergeでうまく結合出来ない事があった。
症状としてはA,B,Cと言うファイルが3ページのdocxを期待していたが、
1ページにABCが重なっていた。

なので、ソースをいじってみました。

docx-merge/src/DocxMerge.php

[-]public function merge( $docxFilesArray, $outDocxFilePath) {
[+]public function merge( $docxFilesArray, $outDocxFilePath, $addPageBreak = false) {

for( $i=1; $i<count( $docxFilesArray ); $i++ ) {
[-]  $docx->addFile( $docxFilesArray[$i], "part".$i.".docx", "rId10".$i);
[+]  $docx->addFile( $docxFilesArray[$i], "part".$i.".docx", "rId10".$i, $addPageBreak );
}

docx-merge/src/DocxMerge/Docx.php

[-]public function addFile( $filePath, $zipName, $refID ) {
[+]public function addFile( $filePath, $zipName, $refID, $addPageBreak = false ) {

[-]$this->addAltChunk( $refID );
[+]$this->addAltChunk( $refID, $addPageBreak );

[-]private function addAltChunk( $refID ) {
[+]private function addAltChunk( $refID, $addPageBreak ) {

[-]$xmlItem = '<w:altChunk r:id="'.$refID.'"/>';
[+]$pagebreak = $addPageBreak ? '<w:p><w:r><w:br w:type="page" /></w:r></w:p>' : '';
[+]$xmlItem = $pagebreak.'<w:altChunk r:id="'.$refID.'"/>';

呼び出し方法は

$DM = new DocxMerge();
$DM->merge([ FILES ], SAVE_FILE, true);

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください