
elephant-php 是 Endless Creativity 开发的 PHP 库,核心功能是将 .docx 文档转换为纯 PHP 语义化 HTML 或 Markdown,无需任何外部依赖(LibreOffice、Pandoc、PHPWord 等二进制工具)。
它是 mammoth.js(一个 JS 库)的 PHP 移植版,保留了其核心哲学:提取文档结构而非复制 Word 的视觉格式。使用标准的 PHP 扩展(dom、libxml、mbstring、xmlreader、zip)即可完成转换,适合 RAG、LLM、文档处理、搜索索引等场景。
p[style-name='Heading 1'] => h1:fresh、b => strong、table.Grid => table.fancy 等规则,支持 :fresh、 :separator('text') 和字符串反斜杠转义(\n、\r 等)。composer require endless-creativity/elephant-php
PHP 要求:8.2+。
use EndlessCreativity\ElephantPhp\Converter;
$result = (new Converter())->convertToHtml('/path/to/file.docx');
echo $result->value; // 语义化 HTML
foreach ($result->messages as $msg) {
fwrite(STDERR, "[{$msg->type->value}] {$msg->message}\n");
}
$result = (new Converter())->convertToMarkdown('/path/to/file.docx');
file_put_contents('article.md', $result->value);
$converter = new Converter(styleMap: [
"p[style-name='Aside'] => aside.callout",
"p[style-name='Quote'] => blockquote > p:fresh",
"r[style-name='Code'] => code",
"comment-reference => sup", // 打开注释支持
]);
$handler = new class implements \EndlessCreativity\ElephantPhp\Image\ImageHandler {
public function attributes(...): array { /* ... */ }
};
$converter = new Converter(imageHandler: $handler);
use EndlessCreativity\ElephantPhp\Document\Transforms;
$converter = new Converter(
transformDocument: Transforms::run(fn($r) => $r->withBold(true))
);
$bytes = Converter::embedStyleMap('/input.docx', 'p[style-name="Aside"] => p.aside');