前提・実現したいこと
現在PHPを使ってwordのファイルの中身を解析したいと検討しているものです。
具体的にはwordファイルのテキストと画像を取得(画像に関しては、画像名とかまではいらない)したいと考えて色々調べてると、下記のサイトがヒットしてこちら参考にさせてもらいながら進めています。
今更ながらphpでword(docx)を読み込んでplain textを得る
こちらのサイトを見ながら、コードを実行するとテキストの情報は取得できて画像の要素の数とかまでも取得することができたのですが、テキストと画像両方を取得するやり方がどうしたらいいのか困っている状態です。
やりたいこととしましては、bodyというdomの中で、ループさせながら、
・getElementsByTagName("pic")があったら「これは画像です!」と出力する。
・テキストだったらgetElementsByTagName("p")で「テキストの中身まで出力」という具合にしたいです。
発生している問題・エラーメッセージ
現在のコードを実行すると、エラーなどはでていませんが、画像は画像でテキストはテキストで取得しています。別々でループをしていてそれぞれを最後までforeachをしてるのでだと思うでのですが、一つずつ取得する方法とかはあるのでしょうか?
PHP
1<?php 2$NL = "\n"; 3$contents = ""; 4$file_path = "a.docx"; 5$zip = new \ZipArchive(); 6 7 8if ($zip->open($file_path) === true) 9{ 10 $xml = $zip->getFromName("word/document.xml"); 11 if ($xml) 12 { 13 $dom = new \DOMDocument(); 14 $dom->loadXML($xml); 15 $paragraphs = $dom->getElementsByTagName("body"); 16 foreach ($paragraphs as $p) 17 { 18 if($p->getElementsByTagName("pic")) 19 { 20 $img_cnt = $p->getElementsByTagName("pic"); 21 foreach ($img_cnt as $imgs) 22 { 23 echo '<p>これは画像です!</p><br>'; 24 } 25 } 26 if($p->getElementsByTagName("p")) 27 { 28 $texts = $p->getElementsByTagName("t"); 29 foreach ($texts as $t) 30 { 31 $contents .= $t->nodeValue; 32 } 33 $contents .= $NL.'<br>'; 34 } 35 } 36 } 37 echo $contents; 38} 39 40return $contents; 41?> 42<!DOCTYPE html> 43<html lang="en"> 44<head> 45 <meta charset="UTF-8"> 46 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 47 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 48 <title>Document</title> 49</head> 50<body> 51 52</body> 53</html>
あなたの回答
tips
プレビュー