環境
- PHP7系
- Mac OS High Sierra
- PHPWord 0.14.0(最新版)
PHPWordのインストールコマンドは以下を使用しました。
composer require phpoffice/phpword:dev-develop composer update
やりたいこと
docxをPHP上で編集し、吐き出したい。
レイアウトは極力崩したくない。
やったこと
ひとまず、下記コードを実行したところ、様々な条件下で出力形式が代わってしまう。
該当コード
php
1<?php 2 3// 必要モジュールの読み込み 4require_once 'vendor/autoload.php'; 5 6// 読み込むファイルのパス 7$source = __DIR__ . '/base.docx'; 8 9// DOCXファイルの読み込み 10$phpWord = \PhpOffice\PhpWord\IOFactory::load($source, 'Word2007'); # Word2007 11 12// 出力 13$phpWord->save('test_out.docx');
Case 1
正常出力される。
自作した、そこまで編集履歴のないdocxであれば、きれいに出力される。
Case 2
ややレイアウトが崩れる。
例えば、ネットに落ちているこのdocファイルを、Wordの最新版でDocxに変換し上記コードを実行したところ、
ややレイアウトが崩れて出力される。
Case 3
ぐっちゃぐちゃ。
見るに堪えない。
こんなのとか。
あと、以下のwarningが出力される。
……なんででしょう……orz
Warning: DOMElement::getAttribute() expects parameter 1 to be string, array given in /Users/USER_NAME/project/server/vendor/phpoffice /common/src/Common/XMLReader.php on line 140 PHP Warning: DOMElement::getAttribute() expects parameter 1 to be string, array given in /Users/USER_NAME/project/server/vendor/phpo ffice/common/src/Common/XMLReader.php on line 140
以上のところまで検証いたしました。
やはり、PHPで処理するには限界があるのでしょうか?
一応、編集したい対象のdocxは図などはなく基本文章のdocxファイルのみとなっております。
もし、この原因をご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。
進展その1
PhpOffice\PhpWord\Element\ListItemRun
オブジェクトがあると、思いっきりデザインが崩れるようです。。。
進展その2
Case 3のグッチャグチャになるやつ、元のdocxファイルにtabがあると必ず起こるっぽいですね。
あなたの回答
tips
プレビュー