Cet article présente principalement l'analyse de mots php et l'obtention des images dans le document. Il a maintenant une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
1. Comprendre les bases de XML
xml est un balisage extensible Le langage est un outil important pour la transmission de données sur Internet. XML peut réaliser des plates-formes inter-Internet sans être limité par les langages de programmation et les systèmes d'exploitation. On peut dire qu'il s'agit d'un support de données avec le plus haut niveau de transmission sur Internet. XML est la technologie actuelle de traitement des informations structurées sur les documents, qui permet de faciliter l'émission structurée entre les serveurs, permettant aux développeurs de contrôler plus facilement le stockage et la transmission des données XML est un langage de balisage utilisé pour marquer les documents électroniques pour les rendre structurels. Il peut être utilisé pour marquer des données et définir des types de données. Il s'agit d'un langage source qui permet aux utilisateurs de définir leur propre langage de balisage. Il s’agit d’un sous-ensemble du langage standard à usage général et convient bien à la transmission sur le Web.2. Deux méthodes de stockage différentes de word
Deux formats de stockage de documents word : doc et docxdoc : Traditionnellement appelé word, il utilise le binaire pour stocker les donnéesdocx : c'est word2007, utilise xml pour stocker les donnéesAlors le suffixe est évidemment au format docx, pourquoi est-il au format xml ? Sélectionnez un test.docx, changez le nom du suffixe en .zip, puis décompressez-le pour obtenir la structure de répertoires suivante : Donc, le docx que vous je pense que le document est en fait un fichier compressé ~3. Comprendre l'analyse XML DOM et PHP DOM
DOM prend en charge le HTML et le XML. documents Un ensemble standard d'objets et une interface standard pour accéder et manipuler ces documents. XML DOM est un ensemble d'objets qui définit une norme pour les documents. En utilisant l'extension PHP DOM, vous pouvez implémenter une série d'opérations sur l'arborescence DOM par PHP. Lire un document XML en utilisant PHP DOM : test.xml:<?xml version="1.0" encoding="utf-8"?><teststore><test> <name>php dom test</name> <author>test-one</author></test><test> <title>php dom test 2</title> <author>test-two</author></test></teststore>
<?php $doc = new DOMDocument(); $doc->load("test.xml"); //获取标签对象 $book=$doc->getElementsByTagName("test"); //输出第一个中的值 echo $book->item(0)->nodeValue; echo "<br>----------------<br>"; $title=$doc->getElementsByTagName("name"); echo $title->item(0)->nodeValue; echo "<br>----------------<br>"; //遍历所有book标签中的内容 foreach ($book as $note) { echo $note->nodeValue; echo "<br>"; }
4. Le format de définition de XML dans Word
Comment les données dans Word sont-elles définies ? ? Nous n'introduirons que deux fichiers/dossiers : Un fichier est word/document.xml, qui définit le contenu de l'ensemble du document Word. Un autre dossier est word/media. Ce dossier stocke le contenu multimédia du document. En d'autres termes, toutes les images, audio et vidéo du document sont stockés dans ce dossier. Définition de la structure globale dans document.ml :<w:document mc:ignorable="w14 w15 wp14" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpscustomdata="http://www.wps.cn/officeDocument/2013/wpsCustomData"> <w:body> <w:p> <w:ppr> <w:pstyle w:val="2"> </w:pstyle> <w:keepnext w:val="0"> </w:keepnext> <w:keeplines w:val="0"> </w:keeplines> <w:widowcontrol> </w:widowcontrol> <w:suppresslinenumbers w:val="0"> </w:suppresslinenumbers> <w:pbdr> <w:top w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:top> <w:left w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:left> <w:bottom w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:bottom> <w:right w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:right> </w:pbdr>
<w:p> <w:ppr> <w:pstyle w:val="2"> </w:pstyle> <w:keepnext w:val="0"> </w:keepnext> <w:keeplines w:val="0"> </w:keeplines> <w:widowcontrol> </w:widowcontrol> <w:suppresslinenumbers w:val="0"> </w:suppresslinenumbers> <w:pbdr> <w:top w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:top> <w:left w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:left> <w:bottom w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:bottom> <w:right w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:right> </w:pbdr> <w:shd w:fill="FAFAFA" w:val="clear"> </w:shd> <w:spacing w:after="150" w:afterautospacing="0" w:before="150" w:beforeautospacing="0" w:line="378" w:linerule="atLeast"> </w:spacing> <w:ind w:firstline="0" w:left="0" w:right="0"> </w:ind> <w:rpr> <w:rfonts w:ascii="Verdana" w:cs="Verdana" w:hansi="Verdana" w:hint="default"> </w:rfonts> <w:i w:val="0"> </w:i> <w:caps w:val="0"> </w:caps> <w:color w:val="404040"> </w:color> <w:spacing w:val="0"> </w:spacing> <w:sz w:val="21"> </w:sz> <w:szcs w:val="21"> </w:szcs> </w:rpr> </w:ppr> <w:r> <w:rpr> <w:rfonts w:ascii="Verdana" w:cs="Verdana" w:hansi="Verdana" w:hint="default"> </w:rfonts> <w:i w:val="0"> </w:i> <w:caps w:val="0"> </w:caps> <w:color w:val="404040"> </w:color> <w:spacing w:val="0"> </w:spacing> <w:sz w:val="21"> </w:sz> <w:szcs w:val="21"> </w:szcs> <w:bdr w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:bdr> <w:shd w:fill="FAFAFA" w:val="clear"> </w:shd> </w:rpr> <w:t> 作者: Test </w:t> </w:r> </w:p>
<w:r> <w:rpr> <w:rfonts w:ascii="Verdana" w:cs="Verdana" w:hansi="Verdana" w:hint="default"> </w:rfonts> <w:i w:val="0"> </w:i> <w:caps w:val="0"> </w:caps> <w:color w:val="404040"> </w:color> <w:spacing w:val="0"> </w:spacing> <w:sz w:val="21"> </w:sz> <w:szcs w:val="21"> </w:szcs> <w:bdr w:color="auto" w:space="0" w:sz="0" w:val="none"> </w:bdr> <w:shd w:fill="FAFAFA" w:val="clear"> </w:shd> </w:rpr> <w:drawing> <wp:inline distb="0" distl="114300" distr="114300" distt="0"> <wp:extent cx="5543550" cy="5543550"> </wp:extent> <wp:effectextent b="0" l="0" r="0" t="0"> </wp:effectextent> <wp:docpr descr="IMG_256" id="1" name="Picture 1"> </wp:docpr> <wp:cnvgraphicframepr> <a:graphicframelocks nochangeaspect="1" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"> </a:graphicframelocks> </wp:cnvgraphicframepr> <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"> <a:graphicdata uri="http://schemas.openxmlformats.org/drawingml/2006/picture"> <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"> <pic:nvpicpr> <pic:cnvpr descr="IMG_256" id="1" name="Picture 1"> </pic:cnvpr> <pic:cnvpicpr> <a:piclocks nochangeaspect="1"> </a:piclocks> </pic:cnvpicpr> </pic:nvpicpr> <pic:blipfill> <a:blip r:embed="rId4"> </a:blip> <a:stretch> <a:fillrect> </a:fillrect> </a:stretch> </pic:blipfill> <pic:sppr> <a:xfrm> <a:off x="0" y="0"> </a:off> <a:ext cx="5543550" cy="5543550"> </a:ext> </a:xfrm> <a:prstgeom prst="rect"> <a:avlst> </a:avlst> </a:prstgeom> <a:nofill> </a:nofill> <a:ln w="9525"> <a:nofill> </a:nofill> </a:ln> </pic:sppr> </pic:pic> </a:graphicdata> </a:graphic> </wp:inline> </w:drawing> </w:r>
<w:document> 定义整个文档的开始 <w:body> document的子节点,文档的主体内容 <w:p> body的子节点,一个段落,就是word文档中的段落 <w:r> p元素的子节点,一个Run定义了段落中具有相同格式的一段内容 <w:t> Run元素节点的子节点,就是文档的内容 <w:drawing> run元素的子节点,定义了一张图片 <w:inline> drawing子节点,具体应用没有研究 <a:graphic> 定义了图片内容 <pic:blipfill> graphic文档的子节点,定义了图片内容的索引.
: Obtenez le nœud XML du document docx via l'interface DOMDocument intégrée de PHP, parcourez le nœud XML pour trouver le élément de nœud qui enregistre l'image et traverse le nœud de l'image vers le bas. Obtenez la valeur de l'index r:embed. Étant donné que le document docx est dans un format de package compressé, le document docx est parcouru via l'interface intégrée PHP ZipArchive (traversant essentiellement le package compressé .zip), l'image correspondante est trouvée via l'index, converti en données binaires, puis épissé. La balise img affiche les données d'image au format base64.
Convertir en XML :private $rels_xml; private $doc_xml; private function readZipPart($filename) { $zip = new ZipArchive(); $_xml = 'word/document.xml'; $_xml_rels = 'word/_rels/document.xml.rels'; if (true === $zip->open($filename)) { if (($index = $zip->locateName($_xml)) !== false) { $xml = $zip->getFromIndex($index); } $zip->close(); } else die('non zip file'); if (true === $zip->open($filename)) { if (($index = $zip->locateName($_xml_rels)) !== false) { $xml_rels = $zip->getFromIndex($index); } $zip->close(); } else die('non zip file'); $this->doc_xml = new DOMDocument(); $this->doc_xml->encoding = mb_detect_encoding($xml); $this->doc_xml->preserveWhiteSpace = false; $this->doc_xml->formatOutput = true; $this->doc_xml->loadXML($xml); $this->doc_xml->saveXML(); $this->rels_xml = new DOMDocument(); $this->rels_xml->encoding = mb_detect_encoding($xml); $this->rels_xml->preserveWhiteSpace = false; $this->rels_xml->formatOutput = true; $this->rels_xml->loadXML($xml_rels); $this->rels_xml->saveXML(); }
if($paragraph->name === 'w:drawing') { (strstr($ts,'…封…') != false || strstr($ts,'…线…') != false) ? $t .= '' : $t .= $this->analysisDrawing($paragraph); }
private function analysisDrawing(&$drawingXml) { while($drawingXml->read()) { if ($drawingXml->nodeType == XMLREADER::ELEMENT && $drawingXml->name === 'a:blip') { $rId = $drawingXml->getAttribute('r:embed'); $rIdIndex = substr($rId,3); return $this->checkImageFormating($rIdIndex); } } }
private function checkImageFormating($rIdIndex) { $imgname = 'word/media/image'.($rIdIndex-8); $zipfileName = __DIR__.DIRECTORY_SEPARATOR.'b'.DIRECTORY_SEPARATOR.'test.docx'; $zip=zip_open($zipfileName); while($zip_entry = zip_read($zip)) {//读依次读取包中的文件 $file_name=zip_entry_name($zip_entry);//获取zip中的文件名 if(strstr($file_name,$imgname) != '' ) { $a = ($rIdIndex-8 < 10) ? mb_substr($file_name,mb_strlen($imgname,"utf-8"),1, 'utf-8') : ''; if($rIdIndex-8 < 10 && $a != '.') continue; if ($enter_zp = zip_entry_open($zip, $zip_entry, "r")) { //读取包中文件 $ext = pathinfo(zip_entry_name ($zip_entry),PATHINFO_EXTENSION);//获取图片文件扩展名 $content = zip_entry_read($zip_entry,zip_entry_filesize($zip_entry));//读取文件二进制数据 return sprintf('<img src="data:image/%s;base64,%s">', $ext, base64_encode($content));//利用base64_encode函数转换读取到的二进制数据并输入输出到页面中 } zip_entry_close($zip_entry); //关闭zip中打开的项目 } } zip_close($zip);//关闭zip文件 }
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!