2015-02-10 2 views
2

ADDITION: Я обнаружил, что самый близкий метод подсчета строк - с помощью команды linux «antiword» для файлов DOC, antiword вернет текстовую версию DOC; в то время как для DOCX используется вызов, который будет извлекать контент из DOCX и передавать данные с помощью той же текстовой функции, что и antiword.count символов в DOC и DOCX с PHP LINUX

Проблема возникает, когда у вас есть таблицы в файле, antiword добавляет много белых пробелов.

===

У меня есть сценарий, который работает вне количество символов в 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

Я не уверен, о том, что другая информация, которую я должен поставить, спасибо за ваши ответы, прежде чем руки.

p.s.

Я попытался преобразовать документ и DOCX в TXT, но в итоге на «Header» и «Footer» районах не был сохранен в текстовом документе

Кроме того, ближайшее решение, которое я нашел: https://github.com/nagilum/DOCx

Библиотека распаковывает весь файл docx, и у вас есть заголовок, содержание и нижний колонтитул в виде обычного текста, и я могу попытаться подсчитать количество слов из их. Однако libreoffice, по-видимому, плохо конвертирует файлы в docx, а файл doc с 1 страницей может иметь 2 страницы в docx после преобразования.

ответ

0

Любой файл * .docx - архив zip. Он состоит app.xml файл, где вы можете найти узел:

<Characters>8657</Characters>

и извлечь значение с помощью регулярного выражения

+0

эй, спасибо за Ваш ответ. В моей ситуации это может быть другим для других, теги «Персонажи» или «СимволыWithSpaces» содержат только область «Содержимое» файла и exlucde «header» и «footer». С «заголовком» у меня должно быть 700 символов, но без него, что я вижу в «CharactersWithSpaces», равно 500. – user3402600

Смежные вопросы