我尝试过几种解决方案,在PHP中将word文档解析为字符串,但是它们有时在某些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中的一个字符串。如何将其修改为将内容输出到字符串?
发布于 2018-06-22 13:25:57
您必须使用收到的对象:
$phpWord = \PhpOffice\PhpWord\IOFactory::load($source, 'MsDoc');它是数组和对象的多维对象,您必须定位[elements]属性,其中您必须定位‘text property. Thistext’属性包含从Word文件中提取的文本。
请记住,在默认情况下,这两个属性是受保护的,因此您必须在PHPWord库文件中更改它们的状态--对于[elements]是AbstractContainer.php,对于[text]是Text.php。一旦将这两个属性的状态更改为public,就可以从$phpWord对象中提取它们。
现在我可以从.doc文件中提取文本,但我注意到的是,PHPWord只会从任何.doc文件中提取大约60%的文本,有时只是将它提取的最后一个单词减少一半。所以,如果您的文件有4,000个单词,那么PHPWord只得到大约2,000个单词。
实际上,我不明白为什么PHPWord不想得到所有的文本。没有注意,没有异常,只有一个对象没有.doc文件中一半的文本。
https://stackoverflow.com/questions/50629144
复制相似问题