一位客户要求我为他正在运行的 web 应用程序构建一个模块,该模块可以加载 docx 文件并根据文档中的标题提取数据。我知道 docx 只是一个 zip 文件,我需要的大部分内容都可以在 word/document.xml 中找到,尽管我不期待解析列表/样式/图像/表格以及其他需要翻译的内容OOXML 到 HTML。
有这种格式的 PHP 库吗?不过,我确实需要某种灵活性:只是一个 OOXML 到 HTML 转换器并不能解决它,我需要将文档分成几部分。
如果是纯docx,可以试试phpdocx ……不知道是读还是只写。PHPWord还没有读,只能写(虽然我正在研究它)。
如果您只需要属性信息,那么您可以在 zip 中的 /docProps/core.xml 文件中找到所有信息(可能在 /docProps/app.xml 中,具体取决于您需要的属性),因此您可以绕过大多数包含文本、样式、图像等的文件。为了验证文件名,[Content_Types].xml 将核心和应用程序属性文件的文件名保存为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+ xml 和 application/vnd.openxmlformats-officedocument.extended-properties+xml
编辑: 如果您需要标题,那么您将需要解析文档,而不仅仅是属性。这将意味着识别标题样式,并为具有这些样式的实体解析文本。
OpenTBS可以使用模板技术读取和修改 PHP 中的 DOCX(和其他 OpenXML 文件)文档。无需临时文件,无需命令行,全部在 PHP 中。
但如果您只需要读取 DOCX 文件的一部分,则可以使用TbsZip类。它可以读取 zip 存档(与任何 OpenXML 文件一样,DOCX 是一个主要包含 XML 文件的 zip 存档)。
在 DOCX 文件中,页眉和页脚子文件通常是“/word/header1.xml”和“/word/footer1.xml”。它们仅在定义了页眉/页脚时才存在。奇数页也可能有一对可选的 XML 子文件(通常是“/word/header2.xml”和“/word/footer2.xml”)。第一页还有一对可选的子文件(通常是“/word/header3.xml”和“/word/footer3.xml”)。
Codeplex 有许多可以处理 MS Office 文档的库:
除了PHPExcel,我不知道那些项目有多成熟。如果没有什么可以帮助您,您仍然可以使用DOM。
您也可以使用这个库https://poi.apache.org/ 并通过 php java bridge http://php-java-bridge.sourceforge.net/pjb/连接它们 - 安装一个 tomcat 服务器 - 将 java bridge 放在webapps 文件夹并添加 poi 库 - 然后您可以使用此库来提取标题样式。API 有据可查,您有很多选择。执行此操作的 PHP 库会更好,但如果它适用于您或其他人,您可以尝试这种方法