用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 文件的一半文本的对象。
我已经尝试了几种解决方案来将 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 文件的一半文本的对象。