2015-02-10 40 views
2

ADDITION: 我發現計數行最接近的方法是通過使用Linux命令「antiword」的DOC文件,antiword將返回文本版本的DOC;而對於DOCX則使用將從DOCX中檢索內容並通過與反義詞相同的文本功能推送數據的調用。計數DOC和DOCX中的字符與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文件我基本上轉換文件中使用LibreOffice的命令行DOCX,比我跑上面的腳本。

問題是,我無法找出在「HEADER」和「FOOTER」區域內有多少個單詞文件。這如何實現?

我的服務器上運行: PHP 5.3 的LibreOffice 的CentOS 6.5

我不知道我上需要提供什麼其他信息, 謝謝你的手在你的答案。

p.s.

我曾嘗試轉換DOC和DOCX到TXT,但結果是「頭」和「頁腳」區域沒有被保存下來的txt文檔

而且內,我已經找到了最接近的解決方案是: https://github.com/nagilum/DOCx

圖書館拆分整個docx文件,你有純文本標題,內容和頁腳,我可以嘗試從他們的鍛鍊字數。但是,libreoffice有時會將文件嚴重轉換爲docx,並且在轉換之後,具有1頁的doc文件可能在docx中有2個頁面。

回答

0

任何* .docx文件 - zip存檔。它由app.xml文件,在這裏你可以找到節點:

<Characters>8657</Characters>

和正則表達式中提取值

+0

哎,感謝您的回覆。在我的情況下,其他人可能會有所不同,「Characters」或「CharactersWithSpaces」標記僅包含文件的「內容」區域,並且包含「標題」和「頁腳」。用「標題」我應該有700個字符,但沒有它,這是我在「CharactersWithSpaces」中看到的是500。 – user3402600 2015-02-10 21:41:31