使用 PHP 讀取 DOCX 文件

建立專案

建立專案。

1
2
mkdir php-docx-reader
cd php-docx-reader

安裝套件

安裝套件。

1
composer require phpoffice/phpword:1.1

修改 composer.json 檔。

1
2
3
4
5
6
7
8
9
10
{
"autoload": {
"psr-4": {
"App\\": "app/"
}
},
"require": {
"phpoffice/phpword": "^1.2"
}
}

實作

建立 app/DocParser.php 檔。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php

namespace App;

use PhpOffice\PhpWord\IOFactory;

class DocParser
{
private $parser;

private $text = '';

public function __construct($filename)
{
$this->parser = IOFactory::load($filename);
}

public function getText()
{
$sections = $this->parser->getSections();

foreach ($sections as $section) {
$elements = $section->getElements();
$this->parseElements($elements);
}

return $this->text;
}

private function parseElements($elements)
{
foreach ($elements as $element) {
$this->parseElement($element);
}
}

private function parseElement($element)
{
if (method_exists($element, 'getElements')) {
$childElements = $element->getElements();
$this->parseElements($childElements);
}

if (method_exists($element, 'getText')) {
$this->text .= $element->getText();
}
}
}

使用

新增 index.php 檔。

1
2
3
4
5
6
7
8
9
10
<?php

require __DIR__.'/vendor/autoload.php';

use App\DocParser;

$parser = new DocParser('./example.docx');
$text = $parser->getText();

print_r($text);

執行。

1
php index.php

程式碼