【问题标题】:Parse a word document with PHPWord to a string使用 PHPWord 将 word 文档解析为字符串
【发布时间】:2018-05-31 16:46:21
【问题描述】:

我已经尝试了几种解决方案来在 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 中的字符串。如何修改这个以将内容输出到字符串?

【问题讨论】:

    标签: php phpword


    【解决方案1】:

    你必须使用你收到的物品:

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

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多