用PHPWord解析word文档为字符串

Parse a word document with PHPWord to a string

我已经尝试了几种解决方案来将 word 文档解析为 PHP 中的字符串,但是它们有时会遇到某些 word 文档的问题。所以我现在正在尝试 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中的一个字符串。这个要怎么修改才能把内容输出成字符串?

您必须使用您收到的对象:

$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 文件的一半文本的对象。