2015-02-10 52 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