使用PHPWord将word文档解析为字符串

时间:2018-05-31 16:46:22

标签: php phpword

我已经尝试了几种解决方案来将单词文档解析为PHP中的字符串,但是它们有时会遇到某些单词文档的问题。所以我现在正在尝试PHPWord尝试将word文档解析为字符串。

我在PHPWord中查看此示例文件,该文件读取Word文档并输出到另一个Word文档:

include_once 'Sample_Header.php';

// Read contents
$name = basename(__FILE__, '.php');
$source = "resources/{$name}.doc";
echo date('H:i:s'), " Reading contents from `{$source}`", EOL;
$phpWord = \PhpOffice\PhpWord\IOFactory::load($source, 'MsDoc');

// (Re)write contents
$writers = array('Word2007' => 'docx', 'ODText' => 'odt', 'RTF' => 'rtf');
foreach ($writers as $writer => $extension) {
    echo date('H:i:s'), " Write to {$writer} format", EOL;
    $xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, $writer);
    $xmlWriter->save("{$name}.{$extension}");
    rename("{$name}.{$extension}", "results/{$name}.{$extension}");
}

include_once 'Sample_Footer.php';

但是,我不想输出另一个完整的Word文档,我只想将内容解析为PHP中的字符串。如何修改它以将内容输出到字符串?

1 个答案:

答案 0 :(得分:2)

您必须使用收到的物品:

$phpWord = \PhpOffice\PhpWord\IOFactory::load($source, 'MsDoc');

它是数组和对象的多维对象,必须找到[elements]属性,在其中必须找到[text]属性。此[text]属性包含从您的Word文件中提取的文本。

请记住,默认情况下,这两个属性是受保护的,因此您必须在PHPWord库文件中更改其状态-对于[elements]是AbstractContainer.php,对于[text]是Text.php。将这两个属性的状态更改为public后,就可以从$phpWord对象中提取它们。

我现在可以从.doc文件中提取文本,但是我注意到的是,PHPWord只会从任何.doc文件中提取文本的60%,有时只是将提取的最后一个单词切成两半。因此,如果您的文件包含4,000个单词,则PHPWord会以某种方式仅获取其中2,000个单词。

实际上,关于PHPWord为什么不想获取所有文本,我真是茫然。没有任何通知,没有例外,只是一个对象,没有.doc文件中的大部分文本。