精华内容
下载资源
问答
  • Word字数批量统计器(WordCount)可以用来批量统计指定文件夹下所有word文档字数,可以将结果保存为文本文档或Excel表格,精确统计选择目录中每个Word文档的字数,需要的朋友快来下载使用吧。 WordCount软件介绍 ...
  • Interop统计WORD字数

    千次阅读 2014-02-28 20:51:15
    如果想统计中文字符,则必须使用 WdStatistic 示例代码如下: public static void WordCount(string filePath) { Microsoft.Office.Interop.Word.Application wordApp = null; Microsoft.Office.
    如果想统计中文字符,则必须使用
    

    WdStatistic


    示例代码如下:

     public static void WordCount(string filePath)
            {
                Microsoft.Office.Interop.Word.Application wordApp = null;
                Microsoft.Office.Interop.Word.Document doc = null;
    
    
                int wordCount = 0;
                object missing = Type.Missing;
                object saveChanges = false;
                object includeFootnotesAndEndnotes = false;
                Microsoft.Office.Interop.Word.WdStatistic stats = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticWords;
                 Microsoft.Office.Interop.Word.WdStatistic statsAsia = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticFarEastCharacters;
                try
                {
                    wordApp = new Microsoft.Office.Interop.Word.Application();
                    doc = wordApp.Documents.Open(filePath);
                    //doc.Content.Text = text;
                    wordCount = doc.ComputeStatistics(stats, ref includeFootnotesAndEndnotes);
                   int asiaWordsCount = doc.ComputeStatistics(statsAsia, ref includeFootnotesAndEndnotes);
                    wordApp.Quit(ref saveChanges, ref missing, ref missing);
                }
                catch (Exception) { }
                finally
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
                    doc = null;
                }
    
    
                
    
            }


    展开全文
  • // TODO caihao 2016-11-06 字数统计 工具类 /** * 统计字数,参照MS office word 2007规则 * @param context 文本内容 * @return 字数 */ public int getMSWordsCount(String context){ int words_count = 0;...

    // TODO caihao 2016-11-06 字数统计 工具类
    /**
    * 统计字数,参照MS office word 2007规则
    * @param context 文本内容
    * @return 字数
    */
    public int getMSWordsCount(String context){
    int words_count = 0;
    //中文单词
    String cn_words = context.replaceAll("[^(\\u4e00-\\u9fa5,。《》?;’‘:“”【】、)(……¥!·)]", "");
    int cn_words_count = cn_words.length();
    //非中文单词
    String non_cn_words = context.replaceAll("[^(a-zA-Z0-9`\\-=\';.,/~!@#$%^&*()_+|}{\":><?\\[\\])]", " ");
    int non_cn_words_count = 0;
    String[] ss = non_cn_words.split(" ");
    for(String s:ss){
    if(s.trim().length()!=0) non_cn_words_count++;
    }
    //中文和非中文单词合计
    words_count = cn_words_count + non_cn_words_count;
    return words_count;
    }

     

    public static void main(String[] args) {

    String context=
     "萧楠松了口气,乖乖的点了点头,紧抓着他宽厚的手,闭上了眼睛。 半响后,她睁开双眸,苦着脸,“我睡不着了。” 苏景衍没答话,她酝酿了一下,再次说道,“你陪我聊会儿天吧。” “……” “我们是怎么在一起的?”对于这个,萧楠的兴致似乎显得高涨。 “你都忘了,再提有什么用?”他目光灼灼的对上她的双眸,萧楠清晰的捕捉到他那一闪而过的落墨,是因为她吗? 她无辜的咬了咬唇瓣,“苏景衍,如果我真的爱你,我会想起来的。” 因为,这个世界上最可悲的,莫过于忘了自己最深爱的那个人。 苏景衍沉默了半响,到底是什么都没说,又拍了拍她的后背,“很晚了,睡吧。” 萧楠确实是累了,外面的雷声似乎小声了许多,又抑或是身旁有他在,让她安心了下来,不一会儿就呼呼睡了起来。 萧楠醒来的时候,楚慕乔已经不再房间里了,外面也放晴了天,和昨晚吓人的模样截然相反。 在家里呆了几天,天天抱着电脑在网上搜索消息什么的,萧楠也大抵跟上了现在的网络科技还有二十一世纪人的思维。 这几天,她把能联系上的人全都联系了一遍,都纷纷艳羡不已的说,多亏了她当年的死缠烂打,才追得上苏景衍这个上等的老公。 且对于她失忆的事,丝毫不知。 “咔嚓!” 玄关传来了开门声,萧楠探长了脖子的看去,以为是苏景衍回来了,“回来了?” “呵,你以为以为是景衍回来了吗?” 大门,走进来一个陌生的妇人,身着着一袭紫色旗袍,白色的披肩盖住了她的肩膀,打扮精致的脸上丝毫看不出岁月的痕迹,一头长发被盘起。 身后还跟着一个年轻的女人,萧楠不认识两人,“你们是谁?为什么有我家的钥匙?” “放肆!” 妇人面露凶相,对于她的询问极为不满,“我是景衍的妈妈,为什么不能在这里?” 萧楠被她的一声低喝吓了一跳,退后了几步,一不小心脚碰上了沙发的边缘,倒在了沙发上。 吴君梅冷哼了一声,也跟着坐下,“看来真的如景衍说的一样,失忆了。” “你们……”萧楠咽了口口水,“你们有什么事吗?现在他不在家,要找他的话……” “不,我就是来找你的。” “找我?”萧楠又往旁边躲了躲,一副怕极了吴君梅的模样。 她的小举动落到吴君梅的眼里,让她一阵心烦意乱,“畏畏缩缩的,能撑得了什么场面。” 萧楠眸色一暗,抿唇不语。 “今天来,我就只有一件事。”吴君梅优雅的看了看自己描绘的精致的指甲,一笑,“给你一百万,跟我儿子离婚,反正你什么都不记得了,给了你钱赶紧拿着钱放过我儿子。对于你这种出身卑微的女人,死缠烂打的要跟着我儿子,能不知道你什么心思吗?” “我……”萧楠张了张嘴,正想说些什么反驳,吴君梅再次打断了她的话。 “你没什么可说的!”吴君梅干脆利落的掏出一张支票,上面已经填上了数字了,“之前,是看在你已经和景衍结婚的份上,现在,你也什么都不记得了,自然也不需要继续在我们苏家白吃白住了吧。” 吴君梅的冷嘲热讽一声一声的传到她的耳中,让她气的肝脏都搅和在一起揪着疼了。 “这位女士!” 她突地站了起来,纤细的手捻起那一张支票,看了一眼,随即撕了个粉碎,碎片撒了一地,“你说你是苏景衍的母亲,我尊重你,但是,也请你尊重我,我是失忆了,但我不是智障!” “你……”吴君梅没料到萧楠会忽然反驳她,气的瞪大了双眼,细长的手指直指着她,抖得花枝乱颤,看来确实气的不轻。 “我我我的,我什么啊?”萧楠直接朝她翻了一个白眼,打掉了指在她鼻尖的手,“首先这是我家,就算你是长辈,也请不要一上来就说三道四的,我和苏景衍在一起到底怎么样也不需要你的指手画脚,还有……” “妈,你别说了,你做这些事要是让哥哥知道了会不开心的。”一直沉默着的一个女孩子出声打断了她的话,拉住了吴君梅的手劝说道。 “咔嚓!” 玄关处传来开门声,吸引去了所有人的侧目,只见苏景衍拿着公文包正在玄关处换鞋,抬头,就见萧楠一脸的盛怒,吴君梅亦是如此。 “萧楠,怎么了?”他皱着眉。 萧楠冷哼了一声,直接转身上了楼,重重的把门摔上,发出‘砰’的一声巨响,震得偌大的屋子许久都还回旋着。 “你做了什么?”苏景衍随手把外套搭在沙发的边缘,脸色阴沉的厉害,语气如常,却让人背脊发凉。 吴君梅被他骇人的目光给吓得全身一震,“做什么?我是你的妈妈,你这是什么态度,还有,我这也是为你好,你还怪我?” “景衍哥哥,你也别生气,这件事是妈妈做的过火了,但是……” 苏景衍看了一眼楼上的方向,方才萧楠憋屈的模样像是刻在了他的心里一样。 冰冷的视线扫去,让她立刻闭了嘴。 “姚晴,你不需要插手这件事,我只要知道,她对她又做了什么?” 被唤为姚晴的女子额头冒着汗,看了看他,又看了看吴君梅,这才支支吾吾的坦白,“妈妈拿……拿了一百万让……萧楠跟你离婚。” 说到最后,姚晴的声音越来越小,直到最后几乎完全听不见任何声音。 苏景衍嘴角勾起一抹嘲讽的笑,“我的事,什么时候需要你来插手了?” “我可是你母亲!”吴君梅气的跺脚,厉声道。 “吴女士还是请回,还有,关于今天的事,要是再有下次,可别怪我不留情面了!” 他直接无视了她话里的‘母亲’二字,直接下了逐客令,话里带着深意,让人胆寒。"
    ;

    TEST() test = new TEST();

    int words_count = test.getMSWordsCount(context); 

    System.out.println("字数统计="+words_count );

    }

    转载于:https://www.cnblogs.com/caer/p/6036408.html

    展开全文
  • // 得到全部内容的字数 wordNum += content.toString().trim().length(); resourcesWord.setContent(content.toString()); resourcesWord.setParagNum(paragNum); resourcesWord.setSentenceNum...

    将Doc或者Docx文档处理成html的代码逻辑

    下面是maven的配置代码:

    <!-- 文档处理所需的jar的依赖 -->
    		<dependency>
    			<groupId>commons-io</groupId>
    			<artifactId>commons-io</artifactId>
    			<version>2.4</version>
    		</dependency>
    		
    		
    		<dependency>
    		    <groupId>org.apache.poi</groupId>
    		    <artifactId>poi-examples</artifactId>
    		    <version>3.9</version>
    		</dependency>
    		
    		<dependency>
    		    <groupId>org.apache.poi</groupId>
    		    <artifactId>poi-scratchpad</artifactId>
    		    <version>3.9</version>
    		</dependency>
    		
    		<dependency>
    		    <groupId>fr.opensagres.xdocreport</groupId>
    		    <artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId>
    		    <version>1.0.4</version>
    		</dependency>
    		<dependency>
    		    <groupId>fr.opensagres.xdocreport</groupId>
    		    <artifactId>org.apache.poi.xwpf.converter.core</artifactId>
    		    <version>1.0.4</version>
    		</dependency>
    		
    		<dependency>
    		    <groupId>org.apache.poi</groupId>
    		    <artifactId>poi-ooxml</artifactId>
    		    <version>3.9</version>
    		</dependency>
    		<dependency>
    		    <groupId>org.apache.poi</groupId>
    		    <artifactId>poi</artifactId>
    		    <version>3.9</version>
    		</dependency>
    		<dependency>
    		    <groupId>org.apache.poi</groupId>
    		    <artifactId>poi-ooxml-schemas</artifactId>
    		    <version>3.9</version>
    		</dependency>
    		<dependency>
    		    <groupId>org.apache.xmlbeans</groupId>
    		    <artifactId>xmlbeans</artifactId>
    		    <version>2.3.0</version>
    		</dependency>
    		<dependency>
    		    <groupId>org.apache.poi</groupId>
    		    <artifactId>ooxml-schemas</artifactId>
    		    <version>1.1</version>
    		</dependency>
    		<!-- 文档处理所需的jar的依赖 -->


    将word处理成html的代码:

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    
    
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.io.output.ByteArrayOutputStream;
    import org.apache.commons.lang.StringUtils;
    import org.apache.log4j.Logger;
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.converter.PicturesManager;
    import org.apache.poi.hwpf.converter.WordToHtmlConverter;
    import org.apache.poi.hwpf.extractor.WordExtractor;
    import org.apache.poi.hwpf.usermodel.Picture;
    import org.apache.poi.hwpf.usermodel.PictureType;
    import org.apache.poi.xwpf.converter.core.BasicURIResolver;
    import org.apache.poi.xwpf.converter.core.FileImageExtractor;
    import org.apache.poi.xwpf.converter.core.FileURIResolver;
    import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
    import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    import org.apache.poi.xwpf.usermodel.XWPFTable;
    import org.apache.poi.xwpf.usermodel.XWPFTableCell;
    import org.apache.poi.xwpf.usermodel.XWPFTableRow;
    import org.w3c.dom.Document;
    import com.sun.org.apache.xalan.internal.xsltc.compiler.Template;
    
    
    import cn.com.hbny.docdetection.entity.ResourcesWord;
    import cn.com.hbny.docdetection.server.ExtendedServerConfig;
    import cn.com.hbny.docdetection.utils.Pinyin4jUtils.PinyinType;
    
    
    /**
     * @brief ReadWordUtils.java 文档处理对应的工具类
     * @attention
     * @author toto
     * @date 2017年3月3日
     * @note begin modify by 涂作权  2017年3月3日  原始创建
     */
    public final class ReadWordUtils {
    	private static Logger logger = Logger.getLogger(ReadWordUtils.class);
    	protected static final String CHARSET_UTF8 = "UTF-8";
    	private static String  tempImagePath = "";
    
    
    	/**
    	 * 读取docx
    	 * @throws Exception
    	 */
    	public static ResourcesWord readDocx(String path) throws Exception {
    		int paragNum = 0; // 段落的个数
    		int sentenceNum = 0; // 句子个数
    		int wordNum = 0; // 字体个数
    		StringBuffer content = new StringBuffer();
    		ResourcesWord resourcesWord = new ResourcesWord();
    		InputStream is = new FileInputStream(path);
    		XWPFDocument doc = new XWPFDocument(is);
    		List<XWPFParagraph> paras = doc.getParagraphs();
    		for (XWPFParagraph para : paras) {
    			// 当前段落的属性
    			if (!StringUtils.isEmpty(para.getText())) {
    				paragNum++;
    				sentenceNum += para.getText().replace("\r\n", "").trim().split("。").length;
    				content.append(para.getText());
    			}
    		}
    		// 获取文档中所有的表格
    		List<XWPFTable> tables = doc.getTables();
    		List<XWPFTableRow> rows;
    		List<XWPFTableCell> cells;
    		for (XWPFTable table : tables) {
    			// 表格属性
    			// 获取表格对应的行
    			rows = table.getRows();
    			for (XWPFTableRow row : rows) {
    				// 获取行对应的单元格
    				cells = row.getTableCells();
    				for (XWPFTableCell cell : cells) {
    					content.append(cell.getText());
    				}
    			}
    
    
    			/*
    			 * MongoDBUtils mongoDb = new MongoDBUtils("javadb"); DBObject dbs =
    			 * new BasicDBObject(); dbs.put("name", "创新性"); //分类
    			 * dbs.put("major", "医疗"); //专业 dbs.put("content",
    			 * content.toString().trim()); dbs.put("paragNum", paragNum);
    			 * dbs.put("sentenceNum", sentenceNum); dbs.put("wordNum", wordNum);
    			 * mongoDb.insert(dbs, "javadb");
    			 */
    		}
    	
    		// 得到全部内容的字数
    		wordNum += content.toString().trim().length();
    		resourcesWord.setContent(content.toString());
    		resourcesWord.setParagNum(paragNum);
    		resourcesWord.setSentenceNum(sentenceNum);
    		resourcesWord.setWordNum(wordNum);
    		close(is);
    		return resourcesWord;
    	}
    
    
    	/**
    	 * 读取doc文件的内容
    	 * 
    	 * @throws IOException
    	 */
    	public static ResourcesWord readDoc(String path) throws IOException {
    		int paragNum = 0; // 段落的个数
    		int sentenceNum = 0; // 句子个数
    		int wordNum = 0; // 字体个数
    		ResourcesWord resourcesWord = new ResourcesWord();
    		StringBuffer content = new StringBuffer();
    		try {
    			File f = new File(path);
    			FileInputStream is = new FileInputStream(f);
    			WordExtractor ex = new WordExtractor(is);// is是WORD文件的InputStream
    			String[] paragraph = ex.getParagraphText();
    			for (int i = 0; i < paragraph.length; i++) {
    
    
    				paragNum++;
    				System.out.println("Paragraph " + (i + 1) + " : " + paragraph[i]);
    				sentenceNum += paragraph[i].replace("\r\n", "").trim().split("。").length;
    				wordNum += paragraph[i].trim().length();
    				content.append(paragraph[i].trim());
    			}
    			System.out.println("段落:" + paragNum);
    			System.out.println("句子:" + sentenceNum);
    			System.out.println("字体:" + wordNum);
    
    
    			resourcesWord.setContent(content.toString());
    			resourcesWord.setParagNum(paragNum);
    			resourcesWord.setSentenceNum(sentenceNum);
    			resourcesWord.setWordNum(wordNum);
    			/*
    			 * MongoDBUtils mongoDb = new MongoDBUtils("javadb"); DBObject dbs =
    			 * new BasicDBObject(); dbs.put("name", "创新性"); //分类
    			 * dbs.put("major", "医疗"); //专业 dbs.put("content",
    			 * content.toString()); dbs.put("paragNum", paragNum);
    			 * dbs.put("sentenceNum", sentenceNum); dbs.put("wordNum", wordNum);
    			 * mongoDb.insert(dbs, "javadb");
    			 */
    			is.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return resourcesWord;
    	}
    
    
    	/**
    	 * \brief doc转换成html,并返回输出的相对路径
    	 * @param filePath                  :要转换的doc文档
    	 * @param outPutFilePath                :文档输出的位置
    	 * @attention
    	 * @author toto
    	 * @throws IOException 
    	 * @throws FileNotFoundException 
    	 * @throws ParserConfigurationException 
    	 * @date 2017年2月27日 
    	 * @note  begin modify by 涂作权  2017年2月27日   原始创建
    	 */
    	public static String doc2Html(
    			String filePath,
    			final String outPutFilePath)
    			throws TransformerException, IOException, ParserConfigurationException {
    		
            HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(filePath));
            WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
            		DocumentBuilderFactory
            		.newInstance()
            		.newDocumentBuilder()
            		.newDocument());
            
            wordToHtmlConverter.setPicturesManager(new PicturesManager() {  
                public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches, float heightInches) {
                	//File file = new File(outPutFilePath);
                    //String name = file.getName();
                    tempImagePath = outPutFilePath.substring(0,outPutFilePath.indexOf(".html")) + File.separator;
                    
                    File imageFolder = new File(tempImagePath);
                    if (!imageFolder.exists()) {
    					try {
    						FileUtils.forceMkdir(imageFolder);
    					} catch (IOException e) {
    						e.printStackTrace();
    					}
    				}
                    String newTempImagePath = imageFolder.getPath().replace(imageFolder.getParentFile().getPath() + File.separator, "");
                	return newTempImagePath + File.separator + suggestedName;
                }
            });
            wordToHtmlConverter.processDocument(wordDocument);
            // 保存图片
            List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
            if (pics != null) {
                for (int i = 0; i < pics.size(); i++) {
                    Picture pic = (Picture) pics.get(i);
                    try {
                    	File picOutFolder = new File(tempImagePath + File.separator);
                    	if (!picOutFolder.exists()) {
    						picOutFolder.mkdirs();
    					}
                        pic.writeImageContent(new FileOutputStream(tempImagePath + File.separator + pic.suggestFullFileName()));
                    } catch (FileNotFoundException e) {  
                        e.printStackTrace();
                    }
                }  
            }  
            Document htmlDocument = wordToHtmlConverter.getDocument();  
            ByteArrayOutputStream out = new ByteArrayOutputStream();  
            DOMSource domSource = new DOMSource(htmlDocument);  
            StreamResult streamResult = new StreamResult(out);  
      
            TransformerFactory tf = TransformerFactory.newInstance();  
            Transformer serializer = tf.newTransformer();  
            serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");  
            serializer.setOutputProperty(OutputKeys.INDENT, "yes");  
            serializer.setOutputProperty(OutputKeys.METHOD, "html");  
            serializer.transform(domSource, streamResult);  
            out.close();  
            writeFile(new String(out.toByteArray()), outPutFilePath);
            return gainRelativePathByOutputPath(outPutFilePath);
        }
    	
    	/**  
         * 将docx格式的word转换为html格式的文档
         *   
         * @param filePath 原始的docx文件路径存储位置
         * @param outPutFile html输出文件路径  
    	 * @return 
         * @throws TransformerException
         * @throws IOException
         * @throws ParserConfigurationException
         */
        public static String docx2Html(String filePath,
    			final String outPutFilePath) 
    		throws TransformerException, IOException, ParserConfigurationException {
        	//String fileOutName = outPutFile;
            XWPFDocument wordDocument = new XWPFDocument(new FileInputStream(filePath));
            XHTMLOptions options = XHTMLOptions.create().indent(4);
            
            // 导出图片
            Map<String, String> imageInfoMap = gainTempImagePath(outPutFilePath);
            File imageFolder = new File(imageInfoMap.get("imageStoredPath"));
            options.setExtractor(new FileImageExtractor(imageFolder));
            // URI resolver
            //这种方式获得word中的图片地址是绝对地址
            //options.URIResolver(new FileURIResolver(imageFolder));
            //设置生成的html中的img src中的地址是相对路径
            options.URIResolver(new BasicURIResolver(imageInfoMap.get("imageFolder")));
            
            File outFile = new File(outPutFilePath);
            outFile.getParentFile().mkdirs();
            OutputStream out = new FileOutputStream(outFile);
            XHTMLConverter.getInstance().convert(wordDocument, out, options);
            
            return gainRelativePathByOutputPath(outPutFilePath);
            //System.out.println("Generate " + fileOutName + " with " + (System.currentTimeMillis() - startTime) + " ms.");
        }
        
        /**
    	 * \brief 将内容写到path路径下面
    	 * @param content            :文档内容
    	 * @param path               :最终的文件存储路径
    	 * @attention 方法的使用注意事项 
    	 * @author toto
    	 * @date 2017年2月27日 
    	 * @note  begin modify by 涂作权 2017年2月27日   修改输出的文件名称
    	 */
    	public static void writeFile(String docContent, String path) {  
            FileOutputStream outDocFos = null;
            try {
            	//判断文件是否为空的
                if (StringUtils.isNotBlank(path)) {
                	File file = new File(path);
                	if (!file.exists()) {
    					FileUtils.forceMkdir(file.getParentFile());
    				}
                	
    				outDocFos = new FileOutputStream(path);
    				IOUtils.write(docContent, outDocFos,CHARSET_UTF8);
    			}
            } catch (FileNotFoundException fnfe) {  
                fnfe.printStackTrace();  
            } catch (IOException ioe) {  
                ioe.printStackTrace();  
            } finally {  
                try {  
                    if (outDocFos != null)  
                    	outDocFos.close();  
                } catch (IOException ie) {  
                }
            }  
        }
    	
    	/**
    	 * 关闭输入流
    	 * 
    	 * @param is
    	 */
    	private static void close(InputStream is) {
    		if (is != null) {
    			try {
    				is.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	
    	/**
    	 * \brief 通过文档输出路径获得图片存储路径
    	 * @param outPutFile             :文档输出路径
    	 * @return
    	 * @attention 方法的使用注意事项 
    	 * @author toto
    	 * @date 2017年2月28日 
    	 * @note  begin modify by 修改人 修改时间   修改内容摘要说明
    	 */
    	private static Map<String, String> gainTempImagePath(String outPutFilePath) {
    		Map<String,String> imageInfoMap = new HashMap<String,String>();
    		try {
    			//File file = new File(outPutFilePath);
    	        tempImagePath = outPutFilePath.substring(0,outPutFilePath.indexOf(".html")) + File.separator;
    	        
    	        File imageFolder = new File(tempImagePath);
    	        if (!imageFolder.exists()) {
    				try {
    					FileUtils.forceMkdir(imageFolder);
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    	        
    	        //System.out.println(imageFolder.getPath().replace(imageFolder.getParentFile().getPath() + File.separator, ""));
    	        //return imageFolder.getPath().replace(imageFolder.getParentFile().getPath() + File.separator, "");
    		
    	        imageInfoMap.put("imageStoredPath", imageFolder.getPath());
    	        imageInfoMap.put("imageFolder", imageFolder.getPath().replace(imageFolder.getParentFile().getPath(), "").replace(File.separator, ""));
    	        
    	        return imageInfoMap;
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
            return null;
    	}
    	
    	private static String gainRelativePathByOutputPath(String outPutFilePath) {
    		//用于预览的存储路径
    		String docsPreviewPath = ExtendedServerConfig.getInstance().getStringProp("DOCS_PREVIEW_PREFIX");
    		return  outPutFilePath.split(docsPreviewPath)[1];
    	}
    	
    	/**
    	 * \brief   
    	 * @param orgStr            :表示要替换的就得字符串
    	 * @param regEx             :表示的是正则表达式
    	 * @param targetStr         :表示要替换的字符串
    	 * @return
    	 * @attention 方法的使用注意事项 
    	 * @author toto
    	 * @date 2017年3月4日 
    	 * @note  begin modify by 涂作权  原始创建  2017年3月4日
    	 */
    	public static String replaceStr(String orgStr,String regEx,String targetStr){
    	    if (null !=orgStr && !"".equals(orgStr.trim())) {
    	        //String regEx="[\\s~·`!!@#¥$%^……&*(())\\-——\\-_=+【\\[\\]】{{}}\\|、\\\\;;::‘'“”\",,《<。.》>、/??]";
    	        Pattern p = Pattern.compile(regEx);
    	        Matcher m = p.matcher(orgStr);
    	        return m.replaceAll(targetStr);
    	    }
    	    return null;
    	}
    	
    	public static void main(String[] args) throws Exception {
    //		String uploadFile = ExtendedServerConfig.getInstance().getStringProperty("UPLOAD_PATH");
    //		String docsTempPath = ExtendedServerConfig.getInstance().getStringProperty("DOCS_TEMP_PATH");
    //		String docsOutputPath = ExtendedServerConfig.getInstance().getStringProp("DOCS_OUTPUT_PATH");
    //		System.out.println("uploadFile = " + uploadFile + "  " + docsTempPath + "  " + docsOutputPath);
    //		
    		// Testtest.readWord("E://111.doc");
    		// Testtest.readDoc();
    		// System.out.println(content);
    //		ResourcesWord readDocx = ReadWordUtils.readDoc(uploadFile + "/大学生创新创业项目申报书.doc");
    //		logger.info(readDocx.getContent());
    //		logger.info(readDocx.getParagNum());
    //		
    //		new ReadWordUtils().doc2Html(uploadFile + "/大学生创新创业项目申报书.doc" , docsOutputPath + "/大学生创新创业项目申报书.html");
    		//new ReadWordUtils().docx2Html(uploadFile + "/大学生创新创业项目申报书副本.docx" , docsOutputPath + "/大学生创新创业项目申报书副本.html");
    	
    	    String newStr = replaceStr("afdas//\\as   dfasd     a//asd\\\\\\asd\\/", "[\\\\]","/");
    	    newStr = replaceStr(newStr, "(/){1,}", "/");
    	    newStr = replaceStr(newStr, "[ ]", "");
    	    
    	    System.out.println(newStr);
    	}
    }
    


    下面是调用案例:

    import java.io.File;
    
    import org.apache.log4j.Logger;
    import org.springframework.stereotype.Service;
    
    import cn.com.hbny.docdetection.mongodb.beans.DocInfo;
    import cn.com.hbny.docdetection.server.ExtendedServerConfig;
    import cn.com.hbny.docdetection.service.base.impl.BaseServiceImpl;
    import cn.com.hbny.docdetection.service.docInfoHandler.DocInfoHandlerService;
    import cn.com.hbny.docdetection.utils.Pinyin4jUtils;
    import cn.com.hbny.docdetection.utils.ReadWordUtils;
    import cn.com.hbny.docdetection.utils.UUIDGenerator;
    import cn.com.hbny.docdetection.utils.Pinyin4jUtils.PinyinType;
    
    /**
     * @brief DocInfoHandlerServiceImpl.java 文档检测对应的文档
     * @attention
     * @author toto
     * @date 2017年3月2日
     * @note begin modify by 涂作权   2017年3月2日  原始创建
     */
    @Service(value = "docInfoHandlerService")
    public class DocInfoHandlerServiceImpl extends BaseServiceImpl implements DocInfoHandlerService {
    	private static Logger logger = Logger.getLogger(DocInfoHandlerServiceImpl.class);
    
    	/**
    	 * 文档处理对应的service
    	 * @param docLibrayId       :文档库对应的id
    	 * @param originalDocPath   :原始文档所在的位置
    	 * @param uploadPath        :文档上传路径
    	 * @param outPutFolderPath  :文档最终的输出文件夹
    	 * @param docsPreviewPrefix :文档预览的前缀
    	 */
    	public DocInfo handlerSingleDocInfo(
    			String docLibrayId,
    			String originalDocPath,
    			String uploadPath,
    			String outPutFolderPath,
    			String docsPreviewPrefix) {
    		try {
    			DocInfo docInfo = new DocInfo();
    			docInfo.setId(UUIDGenerator.generate());
    			docInfo.setDocLibrayId(docLibrayId);
    			
    			//处理传递过来的文件路径
    			File file = new File(originalDocPath);
    			//判断文件是否哦存在,如果不存在直接返回,如果存在继续下面的操作
    			if (file.exists()) {
    				//获取到文档的名称
    				String fileName = file.getName();
    				docInfo.setOriginalFileName(fileName.substring(0,fileName.toLowerCase().indexOf(".doc")));
    				
    				//截取上传文件的后面那一串路径
    				String fileRelativePath = originalDocPath.substring(uploadPath.length());
    			    docInfo.setOriginalDocPath(fileRelativePath);
    				
    				//判断文件后缀
    				if (fileName.endsWith(".doc")) {
    					//1、处理word文档,并将word文档存储在相应的位置上,将word存储成html
    					String outPutFilePath = Pinyin4jUtils.toPinYin(
    							outPutFolderPath + fileRelativePath.replace(".doc", ".html"),
    							PinyinType.LOWERCASE);
    					
    					outPutFilePath = ReadWordUtils.replaceStr(outPutFilePath, "[\\\\]","/");
    					outPutFilePath = ReadWordUtils.replaceStr(outPutFilePath, "(/){1,}", "/");
    					outPutFilePath = ReadWordUtils.replaceStr(outPutFilePath, "[ ]", "");
    					
    					//下面是经过处理后的文件存储位置
                        String filePathAfterHandled = ReadWordUtils.doc2Html(originalDocPath,outPutFilePath);
                        docInfo.setHtmlDocPath(filePathAfterHandled);
    				}  else {
    					//1、处理word文档,并将word文档存储在相应的位置上,将word存储成html
    					//1、处理word文档,并将word文档存储在相应的位置上,将word存储成html
    					String outPutFilePath = Pinyin4jUtils.toPinYin(
    							outPutFolderPath + fileRelativePath.replace(".docx", ".html"),
    							PinyinType.LOWERCASE);
    					
    					outPutFilePath = ReadWordUtils.replaceStr(outPutFilePath, "[\\\\]","/");
    					outPutFilePath = ReadWordUtils.replaceStr(outPutFilePath, "(/){1,}", "/");
    					outPutFilePath = ReadWordUtils.replaceStr(outPutFilePath, "[ ]", "");
    					
    					//下面是经过处理后的文件存储位置
                        String filePathAfterHandled = ReadWordUtils.docx2Html(originalDocPath, outPutFilePath);
                        docInfo.setHtmlDocPath(filePathAfterHandled);
    				}
    				
    				return null;
    			} else {
    				return null;
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    	public static void main(String[] args) {
    		String uploadPath = ExtendedServerConfig.getInstance().getStringProperty("UPLOAD_PATH");
    		String outPutFolderPath = ExtendedServerConfig.getInstance().getStringProperty("DOCS_OUTPUT_PATH");
    		String docsPreviewPrefix = ExtendedServerConfig.getInstance().getStringProperty("DOCS_PREVIEW_PREFIX");
    //		new DocInfoHandlerServiceImpl().handlerSingleDocInfo(
    //				UUIDGenerator.generate(), 
    //				uploadPath + "/双创项目申报书20170301/国家大学生创新训练计划项目申请书华师大.doc",
    //				uploadPath,
    //				outPutFolderPath);
    		
    //		new DocInfoHandlerServiceImpl().handlerSingleDocInfo(
    //				UUIDGenerator.generate(), 
    //				uploadPath + "/双创项目申报书20170301/国家级大学生创新创业训练计划  立项申请书   上海电力学院.doc",
    //				uploadPath,
    //				outPutFolderPath,
    //				docsPreviewPrefix);
    		
    		new DocInfoHandlerServiceImpl().handlerSingleDocInfo(
    				UUIDGenerator.generate(), 
    				uploadPath + "/双创项目申报书20170301/专题产品需求规格说明书.docx",
    				uploadPath,
    				outPutFolderPath,
    				docsPreviewPrefix);
    	}
    }

    下面是所以用到的参数配置:

    #上传的文件的存储位置的配置,统一的最后面不要加斜杠
    UPLOAD_PATH=D:/installed/apache-tomcat-7.0.47/webapps/upload
    ##处理后的文档输出位置,统一的最后面不要加斜杠
    DOCS_OUTPUT_PATH=D:/installed/apache-tomcat-7.0.47/webapps/docs-output-path
    ##文档预览路径,注意最后面不要加斜杠
    DOCS_PREVIEW_PREFIX=/docs-output-path
    ##处理文档是,生成的一些图片的临时存储路径,最后面不要加斜杠
    DOCS_TEMP_PATH=D:/installed/apache-tomcat-7.0.47/webapps/temp


    展开全文
  • 因为业务需求,需要一个字数统计的功能,其实这个功能也不难,但是因为这边涉及到中文,英文,日文和韩文的混合文本,所以不能用一般的统计方法,在网上搜索了一些,然后综合了一下自己写了个支持混合统计的工具类 ...
    因为业务需求,需要一个字数统计的功能,其实这个功能也不难,但是因为这边涉及到中文,英文,
    日文和韩文的混合文本,所以不能用一般的统计方法,在网上搜索了一些,
    然后综合了一下自己写了个支持混合统计的工具类
    直接上代码
    
    	/**
         * 字数统计
         * @param sContent 正文内容
         * @return
         */
        public static Integer wordCount(String sContent){
            int byteCount = 0;
            //中文字符的处理
            String cn_words = sContent.replaceAll("[^(\\u4e00-\\u9fa5\\x3130-\\x318F\\u0800-\\u4e00,。《》?;’‘:“”【】、)(……¥!·)]", "");
            int cn_word_count = cn_words.length();
            //英文字符的处理
            String en_words = sContent.replaceAll("[^(a-zA-Z0-9`\\-=\\';.,/~!@#$%^&*()_+|}{\\\":><?\\[\\]\" \")]", "");
            int en_words_count = 0;
            String[] en = en_words.split(" ");
            for (String s : en){
                if (s.trim().length() != 0){
                    en_words_count++;
                }
            }
            //韩文字符处理
            String kr_words = sContent.replaceAll("[(\\u4e00-\\u9fa5\\u0800-\\u4e00a-zA-Z0-9!\" \",。《》?;’‘:“”【】、)(……¥!·)]", "");
            int kr_word_count = kr_words.length();
            //合计处理
            byteCount = cn_word_count + en_words_count + kr_word_count;
            return byteCount;
        }
    

    其实一般来讲,统计字数只需要中文和英文区分一下就可以了,但是因为业务需求,所以加入了日文和韩文的混合统计,其中韩文的字符编码范围是/x3130-/x318F,本来是可以一起在中文字符处理的正则里面过滤的,但是不知道为什么没有生效,只能重新统计一次将中英日文排除掉
    最后的运行结果也达到了混合统计的效果,和word里面的统计相似(虽然代码有一点low)
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • LaTeX 没有像 Word ...为此我用C写了一个统计中文字数的小工具,名为 cwc ,即 chinese word counter。这个程序只有 count_files() 函数使用了 Windows API,稍作修改就能移植到 Linux/Unix 下。#include #include
  • 1 问题以前也遇到过这样的问题,总是采用笨方法...可是我错了,一些不用拷贝到word中的做法,一旦用于统计中文字数,其统计结果立即就变得不准确了。2 不转word统计字数方法—abracadabraCompteur 2.5 (对中文无效)...
  • // 得到全部内容的字数 wordNum += content.toString().trim().length(); resourcesWord.setContent(content.toString()); resourcesWord.setParagNum(paragNum); resourcesWord.setSentenceNum...
  • 这时候我们往往会想到word的应用,在工具栏中查找字数统计的功能。但是令人遗憾的是,往往我们找不到这项急需的功能。那么pdf中的文字字数应该如何统计呢?下面就和大家分享一下我自己的一点经验,希望能给需要的...
  • pdf文档统计字数的问题

    万次阅读 2015-10-06 10:09:21
    1 问题以前也遇到过这样的问题,总是采用笨方法,...可是我错了,一些不用拷贝到word中的做法,一旦用于统计中文字数,其统计结果立即就变得不准确了。2 不转word统计字数方法—abracadabraCompteur 2.5 (对中文无效)首
  • 因为功能需求,需要实现对于文章字数统计的一个方法编写.此处就不多说.直接进行代码讲解. ...我们先来看看,word中对于字数统计的实现方式. 中文:中文不管连续还是分开,都是以一个字为一个计算单位.这个...
  • 统计字数的工具的界面如下,“中文字符和朝鲜语单词”是最接近汉字数量的。文档中有没有朝鲜语单词,作为编辑者肯定是知道的。但文档里肯定有标点符号啊,所以即使知道没有朝鲜语,此项数据仍然包含有标点符号的数量...
  • 还是老师让写的小程序,好像是用来处理文字识别之后产生的 txt 文件。怎么用:传入一个目录,还你一个result.txt。具体看代码吧,写的很直白。...= u'\u9FA5':return Trueelse:return Falsedef count_word(f...
  • Batchdoc具体功能有:批量统计WORD文档的页数与字数统计段落数行数、将指定的文档插入到WORD中指定位置,批量内容替换,批量将指定字符串替换为另一个字符串。支持各版本WORD文档,如DOC/DOCX,还可以对文本文档、...
  • Java分布式中文分词组件 - word分词 word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

word统计中文字数