PHP | 様々な形式のファイルからテキストデータを取得する方法

PHPでWord、Excel、PowerPoint、TXT、CSV、PDFといった多様なファイル形式からテキストデータを抽出する方法について解説します。

サーバー環境情報

  • サーバー: エックスサーバー(スタンダードプラン)
  • PHPバージョン: 7.4.33
  • Composerバージョン: 2.7.8

この環境に基づいて、各ファイル形式からテキストデータを抽出するために必要なライブラリのインストールとコード例を示します。

対応するファイル形式と使用するライブラリ

以下のライブラリを使用して、各形式のファイルからテキストを抽出します。

  • Wordファイル: PHPWord
  • Excelファイル: PhpSpreadsheet
  • PowerPointファイル: PHPPresentation
  • TXTファイル: PHP標準関数
  • CSVファイル: PHP標準関数
  • PDFファイル: PdfParser

PHPライブラリのインストール方法

composerを使用して簡単にライブラリをインストールできます。PHP 7.4.33環境において、各ライブラリを以下のコマンドでインストールします。

# PHPWordのインストール
composer require phpoffice/phpword

# PhpSpreadsheetのインストール
composer require phpoffice/phpspreadsheet

# PHPPresentationのインストール
composer require phpoffice/phppresentation

# PdfParserのインストール
composer require smalot/pdfparser

各ファイル形式からテキストを取得する方法

1. Wordファイル (.docx, .doc)

.docx形式のWordファイルからテキストを抽出するためにPHPWordを使用します。.doc形式は古いバイナリ形式のため、直接サポートされていませんので、antiwordなどの外部ツールを利用するなど.docx形式へ変換が必要です。

.docxファイルの例

require_once 'vendor/autoload.php';

use PhpOffice\PhpWord\IOFactory;

$phpWord = IOFactory::load('sample.docx');
$text = '';
foreach ($phpWord->getSections() as $section) {
    foreach ($section->getElements() as $element) {
        if (method_exists($element, 'getText')) {
            $text .= $element->getText() . "\n";
        }
    }
}
echo $text;

.docファイルの場合

.doc形式のファイルにはantiwordcatdocなどの外部ツールを利用するなど、.docx形式へ変換する必要があります。

2. Excelファイル (.xlsx, .xls)

Excelファイルからテキストを抽出するには、PhpSpreadsheetを使用します。PHP 7.4.33でインストールされるバージョンは1.29.0です。

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

$spreadsheet = IOFactory::load('sample.xlsx');
$sheet = $spreadsheet->getActiveSheet();
$text = '';
foreach ($sheet->getRowIterator() as $row) {
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    foreach ($cellIterator as $cell) {
        $text .= $cell->getValue() . "\t";
    }
    $text .= "\n";
}
echo $text;

3. PowerPointファイル (.pptx, .ppt)

.pptx形式のファイルからテキストを取得するには、PHPPresentationを使います。PHP 7.4.33では、PHPPresentation 1.0.0を使用します。

require_once 'vendor/autoload.php';

use PhpOffice\PhpPresentation\IOFactory;

$pptReader = IOFactory::createReader('PowerPoint2007');
$ppt = $pptReader->load('sample.pptx');
$text = '';
foreach ($ppt->getAllSlides() as $slide) {
    foreach ($slide->getShapeCollection() as $shape) {
        if (method_exists($shape, 'getText')) {
            $text .= $shape->getText() . "\n";
        }
    }
}
echo $text;

.ppt形式のファイルはサポートされていないため、PowerPointLibreOfficeなどを使って.pptxに変換してから処理します。

4. TXTファイル

TXTファイルはPHPの標準関数file_get_contentsを使って簡単に読み取れます。

$text = file_get_contents('sample.txt');
echo $text;

5. CSVファイル

CSVファイルからデータを取得するには、fgetcsvを使用します。

$csvFile = fopen('sample.csv', 'r');
while (($line = fgetcsv($csvFile)) !== FALSE) {
    echo implode("\t", $line) . "\n";
}
fclose($csvFile);

6. PDFファイル

PDFファイルからテキストを取得するには、PdfParserライブラリを使用します。PHP 7.4.33環境では、PdfParser 2.11.0が利用可能です。

require 'vendor/autoload.php';

use Smalot\PdfParser\Parser;

$parser = new Parser();
$pdf = $parser->parseFile('sample.pdf');
$text = $pdf->getText();
echo $text;

まとめ

この記事では、PHP 7.4.33環境下のエックスサーバーで様々なファイル形式からテキストを抽出する方法を紹介しました。各ライブラリをインストールし、Word、Excel、PowerPoint、TXT、CSV、PDFファイルを処理する方法を実装しています。

コメント

タイトルとURLをコピーしました