Сложение:
Я обнаружил, что самый близкий метод подсчета строк — с помощью команды linux «antiword» для файлов DOC, antiword возвращает текстовую версию DOC; в то время как для DOCX используется вызов, который извлекает контент из DOCX и проталкивает данные через ту же текстовую функцию, что и антислово.
Проблема возникает сейчас, когда у вас есть таблицы в файле, антислово добавляет много пробелов.
===
У меня есть скрипт, который определяет количество символов в файлах DOCX:
$zip = new ZipArchive;$striped_content = '';
$content = '';
if(!$filename || !file_exists($filename)) return false;
$zip = zip_open($filename);
if (!$zip || is_numeric($zip)) return false;
while ($zip_entry = zip_read($zip)) {
if (zip_entry_open($zip, $zip_entry) == FALSE) continue;
if (zip_entry_name($zip_entry) != "word/document.xml") continue;
$content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
zip_entry_close($zip_entry);
}// end while
zip_close($zip_entry);
$content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
$content = str_replace('</w:r></w:p>', "\r\n", $content);
$striped_content = trim(strip_tags($content));
Если у меня есть файл doc, я в основном конвертирую файл в docx, используя командную строку LibreOffice, а затем запускаю скрипт выше.
Проблема в том, что я не могу узнать, сколько слов в файле есть в области «HEADER» и «FOOTER». Как это можно сделать?
Мой сервер работает:
PHP 5.3
LibreOffice
CentOS 6.5
Я не уверен, какую другую информацию мне нужно предоставить,
Спасибо за ваши ответы перед рукой.
постскриптум
Я попытался преобразовать doc и docx в txt, но в результате области «HEADER» и «FOOTER» не были сохранены в документе txt
Также самое близкое решение, которое я нашел:
https://github.com/nagilum/DOCx
Библиотека разбивает весь файл DOCX, и у вас есть заголовок, содержимое и нижний колонтитул в виде обычного текста, и я могу попробовать рассчитать количество слов из их. Однако libreoffice, похоже, иногда плохо конвертирует файлы в docx, и файл docx с 1 страницей может иметь 2 страницы в docx после преобразования.
Любой файл * .docx — zip-архив. Он состоит app.xml
файл, где вы можете найти узел:
<Characters>8657</Characters>
и извлечь значение с помощью регулярного выражения
Других решений пока нет …