精华内容
下载资源
问答
  • 就是操作人员上传Word文档,我需要根据传入的Word文档的内容,提取出大部分关键有用的信息,生成新的Word。 比如说,上传的Word中有段话:收款人李XX已经签收XXXXX包裹。。。那么现在我要提取出的信息就需要...
  • 使用office自带的Microsoft.Office.Interop.Wordword提取出所有的图片信息。
  • 最近做了个功能,需要将word文档转化成html的格式,并提取出标题生成导航。考虑到功能的复杂程度,将需要降低为对“标题1”这种格式进行提取。 docx为后缀的文档(word2007)支持XML的文件格式,本质上是个zip...

    最近做了一个功能,需要将word文档转化成html的格式,并提取出标题生成导航。考虑到功能的复杂程度,将需要降低为对“标题1”这种格式进行提取。

    docx为后缀的文档(word2007)支持XML的文件格式,本质上是一个zip压缩包,解压出来就可以看到所有信息,可能正因为如果,使用XHTMLConverter便可以得到对应的html文档,且标题元素的class属性被标注为"X"+n(n为标题层级)。

    但doc文档但相对麻烦,doc文档一般使用poi读取,用的比较多的html转换方式是使用poi中的WordToHtmlConverter进行转换,这个转换器并不会对标题进行特殊处理,将其当做普通有样式的一个段落(Paragraph)进行处理,因此会和其他普通段落混合在一起。对此有两种处理方法:

    方案一:重写processParagraph方法,在注释的判断处加上对标题的判断,对标题进行特殊处理,但由于WordToHtmlConverter的成员变量均声明为private,因此我采用了另一种方案。

     

    protected void processParagraph(HWPFDocumentCore hwpfDocument, Element parentElement, int currentTableLevel, Paragraph paragraph, String bulletText) {
        Element pElement = this.htmlDocumentFacade.createParagraph();
        parentElement.appendChild(pElement);
        StringBuilder style = new StringBuilder();
        WordToHtmlUtils.addParagraphProperties(paragraph, style);
        int charRuns = paragraph.numCharacterRuns();
        if(charRuns != 0) {
            CharacterRun characterRun = paragraph.getCharacterRun(0);
            String pFontName;
            int pFontSize;
            if(characterRun != null) {
                Triplet triplet = this.getCharacterRunTriplet(characterRun);
                pFontSize = characterRun.getFontSize() / 2;
                pFontName = triplet.fontName;
                WordToHtmlUtils.addFontFamily(pFontName, style);
                WordToHtmlUtils.addFontSize(pFontSize, style);
            } else {
                pFontSize = -1;
                pFontName = "";
            }
    
            this.blocksProperies.push(new WordToHtmlConverter.BlockProperies(pFontName, pFontSize));
    
            try {
                if(WordToHtmlUtils.isNotEmpty(bulletText)) {
                    if(bulletText.endsWith("\t")) {
                        float defaultTab = 720.0F;
                        float firstLinePosition = (float)(paragraph.getIndentFromLeft() + paragraph.getFirstLineIndent() + 20);
                        float nextStop = (float)(Math.ceil((double)(firstLinePosition / 720.0F)) * 720.0D);
                        float spanMinWidth = nextStop - firstLinePosition;
                        Element span = this.htmlDocumentFacade.getDocument().createElement("span");
                        this.htmlDocumentFacade.addStyleClass(span, "s", "display: inline-block; text-indent: 0; min-width: " + spanMinWidth / 1440.0F + "in;");
                        pElement.appendChild(span);
                        Text textNode = this.htmlDocumentFacade.createText(bulletText.substring(0, bulletText.length() - 1) + '\u200b' + ' ');
                        span.appendChild(textNode);
                    } else {
                        Text textNode = this.htmlDocumentFacade.createText(bulletText.substring(0, bulletText.length() - 1));
                        pElement.appendChild(textNode);
                    }
                }
    
                this.processCharacters(hwpfDocument, currentTableLevel, paragraph, pElement);
            } finally {
                this.blocksProperies.pop();
            }
    
         // 此处需要修改 if(style.length() > 0) { this.htmlDocumentFacade.addStyleClass(pElement, "p", style.toString()); } WordToHtmlUtils.compactSpans(pElement); } }

      方案二:在word文档中进行埋点,然后在处理过后的html文档中根据itTitleMap进行再处理

    private Map<String,String> setTitleElements(HWPFDocument wordObject ){
        // 获取样式表
        StyleSheet styleSheet = wordObject.getStyleSheet();
        int styleTotal = wordObject.getStyleSheet().numStyles();
        // 使用map映射存储标题信息
        Map<String,String> idTitleMap = Maps.newHashMap();
        Range range = wordObject.getRange();
        for (int i = 0; i < range.numParagraphs(); i++) {
            // 获取样式信息
            Paragraph paragraph = range.getParagraph(i);
            int styleIndex = paragraph.getStyleIndex();
            if (styleTotal > styleIndex) {
                StyleDescription styleDescription = styleSheet.getStyleDescription(styleIndex);
                String descriptionName = styleDescription.getName();
                if ( descriptionName != null  &&  descriptionName.contains(FIRST_LEVEL_TITLE_DESCRIPTION)) {
                    String uuid = UUIDHelper.getUuid();
                    String text = paragraph.text().replaceAll( "[\r\n]", "" );
                    paragraph.replaceText( uuid, false );
                    idTitleMap.put( uuid, text );
                }
            }
        }
    
        return idTitleMap;
    }
    

      

    转载于:https://www.cnblogs.com/channingwong/p/9698924.html

    展开全文
  • 胜多负少某些官方word文档,内容复制粘贴建新文件,格式会乱;删除目标页码外的前后文,格式一样会乱。使用插件可以快速删除不需要的内容,提取出目标页码。 特别说明,操作前,请将文件备份 步骤:下载安装慧...

    某些官方word文档,内容复制粘贴建新文件,格式会乱;删除目标页码外的前后文,格式一样会乱。使用插件可以快速删除不需要的内容,提取出目标页码,并保证格式正常。

    特别说明,操作前,请将文件备份

    步骤一:下载安装慧办公插件,http://www.hbg666.com/index.php?id=11

    步骤二:打开word,在功能选项卡处查看慧办公插件

    步骤三:创建一个空文件夹,将要处理的文件复制粘贴到目录中

     

     

     

     

    步骤四,确定要提取的页码范围,假设需要提取的页码范围为39-55。

    步骤五,使用慧办公删除目标文件1-39页的内容 

    输入前段页码范围,并选择文件夹

    步骤六,重新计算要删除的页码范围【假设需要提取的页码范围为39-55,原始文件55页对应到新文件的页码范围是55-39=16】,使用插件删除16页后面的内容

    最终的文件大小

     

    展开全文
  • 用Aspose.Words 从Word文档提取表格数据 对于某些项目,开发人员需要从Word文档提取数据并导出到数据库。最大的挑战是必须支持现有Word文档。 相同格式且带多个数据块的Word文档有成千上万。该文档格式并...

    用Aspose.Words 从Word文档中提取表格数据

    对于某些项目,开发人员需要从Word文档中提取数据并导出到数据库。最大的挑战是必须支持现有Word文档。

    相同格式且带多个数据块的Word文档有成千上万。该文档格式并不是设计来被另一个系统所读取的。这意味着,没有书签、合并字段、从标准指令识别实际数据的方式等。还好,所有输入字段都在表格内,但这些表格也是不同的格式,一些是单行/单元格,另一些则变化多端。

    我们可以用Aspose.Words来创建和操作Word文档。

    以C#创建一个类似的表格模型从而稍后当读取文档的时候我们可以用上它。

    如下所示,你可以看到创建的名为WordDocumentTable的类,带有三个属性:TableID,RowIDColumnID,如之前所说的,我们没有支持TableID/RowIDs,这些属性仅仅暗示着Word文档的位置。开始索引假定为0。

    <span style="font-family:Microsoft YaHei;font-size:14px;">public class WordDocumentTable
    { 
        public WordDocumentTable(int PiTableID) 
        {  
            MiTableID = PiTableID; 
        }
    
        public WordDocumentTable(int PiTableID, int PiColumnID) 
        {  
            MiTableID = PiTableID;  
            MiColumnID = PiColumnID; 
        }
    
        public WordDocumentTable(int PiTableID, int PiColumnID, int PiRowID) 
        {  
            MiTableID = PiTableID;  
            MiColumnID = PiColumnID;  
            MiRowID = PiRowID; 
        }
    
        private int MiTableID = 0;
    
        public int TableID 
        {  
            get { return MiTableID; }  
            set { MiTableID = value; } 
        }        
    
        private int MiRowID = 0;    
        public int RowID 
        {  
            get { return MiRowID; }  
            set { MiRowID = value; } 
        }
    
        private int MiColumnID = 0;    
        public int ColumnID 
        {  
            get { return MiColumnID; }  
            set { MiColumnID = value; } 
        }
    }</span>
    现在来到提取环节。如下所示,你将看到我想要从文档中读取的表格单元格的集。
    <span style="font-family:Microsoft YaHei;font-size:14px;">private List<WordDocumentTable> WordDocumentTables
    {  
        get  
        {    
            List<WordDocumentTable> wordDocTable = new List<WordDocumentTable>();      
            //Reads the data from the first Table of the document.    
            wordDocTable.Add(new WordDocumentTable(0));      
            //Reads the data from the second table and its second column. 
            //This table has only one row.    
            wordDocTable.Add(new WordDocumentTable(1, 1));      
            //Reads the data from third table, second row and second cell.    
            wordDocTable.Add(new WordDocumentTable(2, 1, 1));  
            return wordDocTable;  
        }
    }</span>
    下面是从基于表格、行和单元格的Aspose.Words文档提取数据。
    <span style="font-family:Microsoft YaHei;font-size:14px;">public void ExtractTableData(byte[] PobjData)
    {          
        using (MemoryStream LobjStream = new MemoryStream(PobjData)) 
        {  
            Document LobjAsposeDocument = new Document(LobjStream);     
            foreach(WordDocumentTable wordDocTable in WordDocumentTables)  
            {   
                Aspose.Words.Tables.Table table = (Aspose.Words.Tables.Table)
                LobjAsposeDocument.GetChild
                (NodeType.Table, wordDocTable.TableID, true);   
                string cellData = table.Range.Text;
    
                if (wordDocTable.ColumnID > 0)   
                {    
                    if (wordDocTable.RowID == 0)    
                    {     
                        NodeCollection LobjCells = 
                        table.GetChildNodes(NodeType.Cell, true);     
                        cellData = LobjCells[wordDocTable.ColumnID].ToTxt();
                    }    
                    else    
                    {     
                        NodeCollection LobjRows = 
                        table.GetChildNodes(NodeType.Row, true);     
                        cellData = ((Row)(LobjRows[wordDocTable.RowID])).
                        Cells[wordDocTable.ColumnID].ToTxt();    
                    }   
                }
    
                Console.WriteLine(String.Format("Data in Table {0}, 
                        Row {1}, Column {2} : {3}",           
                                        wordDocTable.TableID,          
                                        wordDocTable.RowID,          
                                        wordDocTable.ColumnID,          
                                        cellData);              
            } 
        }
    }</span>
    需要引入的命名空间:
    <span style="font-family:Microsoft YaHei;font-size:14px;">using Aspose.Words;
    using Aspose.Words.Tables;</span>
    Aspose.Words.dll 14.0破解版下载地址:
    >> http://download.csdn.net/detail/xiaosongaspnet/7702461


    展开全文
  • 采用POI和ANTLR提取WORD文档数据

    千次阅读 2006-04-17 10:06:00
    1. POI提取WORD文档内容POI是Apache开源项目之,用Java实现跨平台MS Word/Excel文档解析。 也就是说可以在非Windows平台提取MS Word/... Word文档内容如下:(该文档有2,每记录个组件内容),Java类中Import

    1. POI提取WORD文档内容

    POI是Apache开源项目之一,用Java实现跨平台MS Word/Excel文档解析。 也就是说可以在非Windows平台提取MS Word/Excel文档内容。 本文采用POI的一个扩展Jar包tm-extractors_0.4.jar提取Word文档内容。 Word文档内容如下:(该文档有2页,每页记录一个组件内容),

    Java类中Import import org.textmining.text.extraction.WordExtractor;然后在方法中:

      protected String getText() throws Exception {
                    WordExtractor extractor=null;
                    String text=null;
                    extractor = new WordExtractor();
                    text=extractor.extractText(in);   // in为 FileInputStream(new File("Word文档地址"));
                    return text;
     }

     运行结果如下:

    Colimas Component Specification

    1. Component: Apache Jakarta POI Java API To Access Microsoft Format Files
     
    1.1 Basic Information
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

    Alias                               : POI
    Author                            :
    http://jakarta.apache.org/poi/index.html
    Version                           : 0.0.1
    Language                        : Java
    Platform                          : Windows, Linux, Unix
    Status                              : Confirmed
    Is public?                         : Y
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    1.2 Developers
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

    Apache developer1
    Apache developer2
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

    1.3 License
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    Apache License 2.0
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

    1.4 Function Description
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    http://jakarta.apache.org/poi/index.html
    The POI project consists of APIs for manipulating various file formats based upon Microsoft's OLE 2 Compound Document format using pure Java. In short, you can read and write MS Excel files using Java. Soon, you'll be able to read and write Word files using Java. POI is your Java Excel solution as well as your Java Word solution. However, we have a complete API for porting other OLE 2 Compound Document formats and welcome others to participate.
    OLE 2 Compound Document Format based files include most Microsoft Office files such as XLS and DOC as well as MFC serialization API based file formats.
    As a general policy we try to collaborate as much as possible with other projects to provide this functionality. Examples include: Cocoon for which there are serializers for HSSF; Open Office.org with whom we collaborate in documenting the XLS format; and Lucene for which we'll soon have file format interpretors. When practical, we donate components directly to those projects for POI-enabling them.
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    1.5 Extends Info
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    1. Component: ANother Tool for Language Recognition
     
    1.1 Basic Information
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    Alias                               : ANTLR
    Author                            : http://www.antlr.org/
    Version                           : 2.7.6
    Language                        : Java
    Platform                          : Windows, Linux
    Status                              : Confirmed
    Is public?                         : Y
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    1.2 Developers
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    Terence Parr
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

    1.3 License
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    ANTLR 3 License
     [The BSD License]Copyright (c) 2005, Terence Parr All rights reserved. http://www.antlr.org/license.html
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    1.4 Function Description
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    What is ANTLR?
    ANTLR, ANother Tool for Language Recognition, (formerly PCCTS) is a language tool that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions containing Java, C#, C++, or Python actions. ANTLR provides excellent support for tree construction, tree walking, and translation. There are currently about 5,000 ANTLR source downloads a month.
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
    1.5 Extends Info
    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


    ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

    由于Blog不知支持日文字符所以花符号变成乱麻,但不要紧,只需要知道该字符的HEX码为0x81,0xA6。

    花符号作为分隔符区别文字,也可以使用其他分隔符,但要保证文档文字内不会出现该字符。

    2 Antlr编程
     所需要提取的数据有:

    Alias, Author,Version,Language,Platform,Status, Is public?‘:’右侧的文字和

    Developers, License,Function Description 花符号内的文字。

    Antlr的词法分析如下:

    // ColimasComponentWordLexer
    //   
    class ColimasComponentWordLexer extends Lexer;
    options {
     exportVocab=ColimasComponentWord;     // call the vocabulary "Java"
     testLiterals=true;                    // test for literals
     k=3;                   // 2 characters of lookahead
     charVocabulary='/u0003'..'/uFFFF';
     codeGenBitsetTestThreshold=20;
    }
    {
     List records=new ArrayList();
     Component component=null; //保存需要得到的数据
     
     public List getRecords(){
      return this.records;
     }
    }
    DIGIT  : '0'..'9';
    // character literals
    PARA   : ('/u0081''/u00A6')+ EMPTY;  //花符号分割符的HEX码加上空格和换行符
    CHAR_LITERAL
     : (~('/n'|'/r'|'//'|'/u0081'|'/u00A6'))| '/u000C'|'/u0003'|'/u0004'   //文档使用的文字符
     ;
    protected
    VALUE  : (CHAR_LITERAL)+ ;  //数据
    EMPTY  : ( (('.')?((('/t')+)?(('/r')?'/n'))+)| ((' ')+) )?;  //空格或换行
    TITLE  : ("C"|"c")"olimas "("C"|"c")"omponent "("S"|"s")"pecification" EMPTY  //文档第一行
      ;
    NAME   : ( DIGIT "." EMPTY)?("C"|"c")"omponent:" EMPTY v:VALUE EMPTY //组件名称
     {
      if(component==null)
        component=new Component();
      component.setName(v.getText());  //将组件名称保存到Component对象里。
     }
     ;
    BASIC  : (DIGIT ".1" EMPTY)?("B"|"b")"asic "("I"|"i")"nformation" EMPTY
       ;
    COLON  : ':';
    ALIAS : //组件别名
      (("A"|"a")"lias") EMPTY COLON  EMPTY v:VALUE EMPTY
      {
       if(component==null)
        component=new Component();
       component.setAlias(v.getText());
      }
      ;
    AUTHOR :  ("Author"|"author") EMPTY COLON  EMPTY v:VALUE EMPTY  //组件出处
     {
      if(component==null)
        component=new Component();
      component.setAuthor(v.getText());
     }
     ;
    VERSION:  ("Version"|"version") EMPTY COLON  EMPTY v:VALUE EMPTY //组件版本
     {
      if(component==null)
        component=new Component();
      component.setVersion(v.getText());
     }
     ;
    LANGUAGE: (("L"|"l")"anguage") EMPTY COLON  EMPTY v:VALUE EMPTY  //组件使用语言
     {
      if(component==null)
        component=new Component();
      component.setLanguage(v.getText());
     }
     ;
    PLATFORM: (("P"|"p")"latform") EMPTY COLON  EMPTY v:VALUE EMPTY  //组件运行平台
     {
      if(component==null)
        component=new Component();
      component.setPlatform(v.getText());
     }
     ;
    STATUS  : (("S"|"s")"tatus") EMPTY COLON  EMPTY v:VALUE EMPTY //组件状态
     {
      if(component==null)
        component=new Component();
      component.setStatus(v.getText());
     }
     ;
    PUBLIC  : (("I"|"i")"s public?") EMPTY COLON  EMPTY v:VALUE EMPTY  //是否发布
     {
      if(component==null)
        component=new Component();
      component.setIspublic(v.getText());
     }
     ;
    SECTION : (VALUE EMPTY)+;
    USERIDS : (DIGIT ".2" EMPTY)?("D"|"d")"evelopers" EMPTY PARA  //开发者
        v:SECTION
        PARA
     {
      if(component==null)
        component=new Component();
      component.setDevelopers(v.getText());
     }
     ;
    LICENSE : (DIGIT ".3" EMPTY)?("L"|"l")"icense" EMPTY PARA (v:VALUE EMPTY)* PARA  //许可证
     {
      if(component==null)
        component=new Component();
      component.setLicense(v.getText());
     }
     ;
    FUNCTION: (DIGIT ".4" EMPTY)?("F"|"f")"unction "("D"|"d")"escription" EMPTY PARA v:SECTION PARA  //功能
     {
      if(component==null)
        component=new Component();
      component.setFunction(v.getText());
      records.add(component);
      component=null;
     }
     ;
    EXTEND  : (DIGIT ".5" EMPTY)?("E"|"e")"xtends "("I"|"i")"nfo" EMPTY PARA (VALUE EMPTY)* PARA ;//其他

    antlr语法分析:

    //----------------------------------------------------------------------------
    // The Colimas component specification word scanner
    //----------------------------------------------------------------------------
    header{
     package org.colimas.doc.parser;
     import java.util.List;
     import java.util.ArrayList;
    }
    class ColimasComponentWordParser extends Parser;
    options {
     k = 2;                                   // two token lookahead
     exportVocab=ColimasComponentWord;   // Call its vocabulary "Java"
     codeGenMakeSwitchThreshold = 2;          // Some optimizations
     codeGenBitsetTestThreshold = 3;
     defaultErrorHandler = false;              // Don't generate parser error handlers
    }

    document :  //全文
     TITLE document   
     | component document  
     | footer 
     ; 
    component : //组件信息
     NAME basic USERIDS LICENSE FUNCTION (EXTEND)? (footer)? ;
    basic     :
     BASIC PARA ALIAS AUTHOR VERSION LANGUAGE
     PLATFORM STATUS PUBLIC PARA
        ;
    footer    : //其他
     CHAR_LITERAL (EMPTY)?
     | EMPTY
     ;

    使用Antlr编译后生成java类, ColimasComponentWordLexer,ColimasComponentWordParser,ColimasComponentWordTokenTypes

    保存组件内容的类内容如下:

    public class Component {
     
     private String alias=null;
     
     private String name=null;
     
     private String version=null;
     
     private String author=null;
     
     private String language=null;
     
     private String platform=null;
     
     private String ispublic=null;
     
     private List developers=new ArrayList();
     
     private List function=new ArrayList();
     
     private List license=new ArrayList();

     private String status=null;
     
     /**
      *<p>get status</p>
      * @return Returns the status.
      */
     public String getStatus() {
      return status;
     }

     /**
      * <p>set status</p>
      * @param status The status to set.
      */
     public void setStatus(String status) {
      this.status = status;
     }

     /**
      *<p>get alias</p>
      * @return Returns the alias.
      */
     public String getAlias() {
      return alias;
     }

     /**
      * <p>set alias</p>
      * @param alias The alias to set.
      */
     public void setAlias(String alias) {
      this.alias = alias;
     }

     /**
      *<p>get author</p>
      * @return Returns the author.
      */
     public String getAuthor() {
      return author;
     }

     /**
      * <p>set author</p>
      * @param author The author to set.
      */
     public void setAuthor(String author) {
      this.author = author;
     }

     /**
      *<p>get developers</p>
      * @return Returns the developers.
      */
     public List getDevelopers() {
      return this.developers;
     }

     /**
      * <p>set developers</p>
      * @param developers The developers to set.
      */
     public void setDevelopers(String developers) {
      this.developers.add(developers);
     }

     /**
      *<p>get function</p>
      * @return Returns the function.
      */
     public String getFunction() {
      String functions="";
      for(int i=0;i<function.size();i++){
       String tmp=(String)function.get(i);
       functions+=tmp+"/n";
      }
      return functions;
     }

     /**
      * <p>set function</p>
      * @param function The function to set.
      */
     public void setFunction(String function) {
      this.function.add(function);
     }

     /**
      *<p>get ispublic</p>
      * @return Returns the ispublic.
      */
     public String getIspublic() {
      return ispublic;
     }

     /**
      * <p>set ispublic</p>
      * @param ispublic The ispublic to set.
      */
     public void setIspublic(String ispublic) {
      this.ispublic = ispublic;
     }

     /**
      *<p>get language</p>
      * @return Returns the language.
      */
     public String getLanguage() {
      return language;
     }

     /**
      * <p>set language</p>
      * @param language The language to set.
      */
     public void setLanguage(String language) {
      this.language = language;
     }

     /**
      *<p>get license</p>
      * @return Returns the license.
      */
     public String getLicense() {
      String licenses="";
      for(int i=0;i<function.size();i++){
       String tmp=(String)this.license.get(i);
       licenses+=tmp+"/n";
      }
      return licenses;
     }

     /**
      * <p>set license</p>
      * @param license The license to set.
      */
     public void setLicense(String license) {
      this.license.add(license);
     }

     /**
      *<p>get name</p>
      * @return Returns the name.
      */
     public String getName() {
      return name;
     }

     /**
      * <p>set name</p>
      * @param name The name to set.
      */
     public void setName(String name) {
      this.name = name;
     }

     /**
      *<p>get platform</p>
      * @return Returns the platform.
      */
     public String getPlatform() {
      return platform;
     }

     /**
      * <p>set platform</p>
      * @param platform The platform to set.
      */
     public void setPlatform(String platform) {
      this.platform = platform;
     }

     /**
      *<p>get version</p>
      * @return Returns the version.
      */
     public String getVersion() {
      return version;
     }

     /**
      * <p>set version</p>
      * @param version The version to set.
      */
     public void setVersion(String version) {
      this.version = version;
     }

     public String toString(){
      String result=null;
      List deve=this.getDevelopers();
      String deves="";
      for(int i=0;i<deve.size();i++){
       String tmp=(String)deve.get(i);
       deves+=tmp;
      }

      result="alias:"+this.getAlias()+
        ";name:"+this.getName()+
        ";author:"+this.getAuthor()+
        ";version:"+this.getVersion()+
        ";language:"+this.getLanguage()+
        ";platform:"+this.getPlatform()+
        ";status:"+this.getStatus()+
        ";ispublic:"+this.getIspublic()+
        ";developers:"+deves+
        ";function:"+this.getFunction()+
        ";license:"+this.getLicense();
      return result;
     }


     

    3 输出结果

    /*
     *  Colimas is copyright (C) 2005-2006 Zhao Lei.
     *  This program is free software; you can redistribute it and/or modify
     *  it under the terms of the GNU General Public License as published by
     *  the Free Software Foundation; either version 2 of the License, or
     *  any later version.
     *
     *  This program is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *  GNU General Public License for more details.
     */
    package org.colimas.doc.parser;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    /*
     *  Colimas is copyright (C) 2005-2006 Zhao Lei.
     *  This program is free software; you can redistribute it and/or modify
     *  it under the terms of the GNU General Public License as published by
     *  the Free Software Foundation; either version 2 of the License, or
     *  any later version.
     *
     *  This program is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *  GNU General Public License for more details.
     */
    import java.util.List;

    import antlr.RecognitionException;
    import antlr.TokenStreamException;

    /**
     * <h3>ColimasComponentWordLexerTest.java</h3>
     *
     * <P>
     * Function:<BR />
     * test
     * </P>
     * @author zhao lei
     * @version 1.0
     * <br>
     * Modification History:
     * <PRE>
     * SEQ DATE       ORDER DEVELOPER      DESCRIPTION
     * --- ---------- ----- -------------- -----------------------------
     * 001 2006/04/15          tyrone        INIT
     * </PRE>
     */
    public class ColimasComponentWordLexerTest {

     /**
      * <p> </p>
      * @param args
      */
     public static void main(String[] args) {
      try {
       FileInputStream in=new FileInputStream(new File(args[0])); // 传入文档文件(该文件为解析Word文档后的平文文件)
       ColimasComponentWordLexer lexer=
        new ColimasComponentWordLexer(in); //调用词法分析器;
       ColimasComponentWordParser parser = new ColimasComponentWordParser(lexer); //调用语法分析器
       try {
        parser.document(); //全文档分析
        List records=lexer.getRecords(); //输出结果
        for(int i=0;i<records.size();i++){
         Component component=(Component)records.get(i);
         System.out.println(component.toString());
        }
       } catch (RecognitionException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
       } catch (TokenStreamException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
       }
      } catch (FileNotFoundException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }

     }
    }

    结果如下:

    alias:POI;name:Apache Jakarta POI Java API To Access Microsoft Format Files;author:http://jakarta.apache.org/poi/index.html;version:0.0.1;language:Java;platform:Windows, Linux, Unix;status:Confirmed;ispublic:Y;developers:Apache developer1
    Apache developer2
    ;function:http://jakarta.apache.org/poi/index.html
    The POI project consists of APIs for manipulating various file formats based upon Microsoft's OLE 2 Compound Document format using pure Java. In short, you can read and write MS Excel files using Java. Soon, you'll be able to read and write Word files using Java. POI is your Java Excel solution as well as your Java Word solution. However, we have a complete API for porting other OLE 2 Compound Document formats and welcome others to participate.
    OLE 2 Compound Document Format based files include most Microsoft Office files such as XLS and DOC as well as MFC serialization API based file formats.
    As a general policy we try to collaborate as much as possible with other projects to provide this functionality. Examples include: Cocoon for which there are serializers for HSSF; Open Office.org with whom we collaborate in documenting the XLS format; and Lucene for which we'll soon have file format interpretors. When practical, we donate components directly to those projects for POI-enabling them.

    ;license:Apache License 2.0

    alias:ANTLR;name:ANother Tool for Language Recognition;author:http://www.antlr.org/;version:2.7.6;language:Java;platform:Windows, Linux;status:Confirmed;ispublic:Y;developers:Terence Parr
    ;function:What is ANTLR?
    ANTLR, ANother Tool for Language Recognition, (formerly PCCTS) is a language tool that provides a framework for constructing recognizers, compilers, and translators from grammatical descriptions containing Java, C#, C++, or Python actions. ANTLR provides excellent support for tree construction, tree walking, and translation. There are currently about 5,000 ANTLR source downloads a month.

    ;license: [The BSD License]Copyright (c) 2005, Terence Parr All rights reserved. http://www.antlr.org/license.html

     

    展开全文
  • 批量word提取有效数据后整合到个excel中

    万次阅读 多人点赞 2019-05-20 16:48:04
    word批量转excel的工具链接:https://download.csdn.net/download/momoainuonuo/11189685 百度网盘地址(在csdn上传的资料被默认修改为5个积分,没办法只能用百度网盘...提取码:5xuj 以这两个文档为例子: word...
  • 实现功能:从word文档提取图片及表格,并用html代码替换,将处理后的word 文档存放到个html文档中  /*  * 实现步骤:1、源word另存为html。可以得到图片和html文件。  * 2、从html文件提取出table,...
  • Python处理Windows记事本utf8编码文件要注意的坑 Python创建分栏排版的Word文档 Python提取Word文档中所有脚注文本 Python批量提取docx格式Word文档中所有批注 Python批量提取docx格式Word文档中所有文本框内的文本 ...
  • 使用Python把Word文档转换为图片式不可修改的PDF文件 使用Python合并多张JPG图片为个PDF文件 使用Python合并任意多个PDF文件 Python提取docx文档中嵌入式图片和浮动图片的又种方法 Python提取docx文档中所有...
  • python解析word文档首、尾

    千次阅读 2018-11-14 15:35:21
    1.docx 不能解析.doc文档,只能解析.docx文档 2.如何将doc转换为docx ...如何取得第一页和最后一页 1.如何使doc文档,将其转换为docx文档  def dosaveas(self,path):  word = wc.Dispatch('word.applic...
  • ()Word文档中图片提取怎么提取Word文档里面的图片?对于2013版之前的word要方法要复杂一些,2013版的word就非常简单。(二)在Word中画横线很多朋友使用Word软件制作试卷等素材时都需要用到横线等图案,但是却...
  • WORD提取图片

    2010-02-21 11:27:17
    操作如下:将带有图片的word文档“另存为”,在跳出对话框的“保存类型”里选择“网页”,命名好“文件名”后按“保存”。然后你就可以在与文件名同名的文件夹里找到你想要的图片了。  经测试使用,发现还生成大...
  • 最近接了个项目,其中个需求将word转html,并将word中的目录结构树提取出来放到html的左侧并生成相应的树目录。经研究要实现该需求可以分为两步: 1.将word转为html 2.提取word中目录结构树并生成html中的树...
  • Python3.6实现图片文字识别和PDF转WORD图片文字提取- - 需求来源 - -- - 代码实现 - -PDF转WORD- - 需求来源 - -- - 代码实现 - -窗口实现- - 使用PyQt5创建 - -- - 使用tkinter 创建 - -最终实现- - 实现说明 - -- ...
  • 在以前做过的个C#项目中,当时有个需求就是按页提取word文档的内容,后来这个需求用不到了,但是从中间摸索出来了一些方法。现在作出的这个程序,对于.doc、.docx、格式word文件,基本都上能够读取,也碰到过特殊...
  • 董付国老师Python在线课程资源使用方法 =============== 功能描述: 提取docx格式Word文档中所有批注。 测试文档: 参考代码: 运行结果: 温馨提示 关注本公众号“Python小屋”,通过菜单“最新资源”==>“历史文章...
  • Java 从word提取文字信息(开发笔记)

    千次阅读 2018-08-23 16:19:46
    System.out.println("此文件不是word文件!"); } } catch (Exception e) { e.printStackTrace(); } return buffer; } public static void main(String[] args) { // String content = tp....
  • 半为花间酒)若公众号内转载请联系公众号:早起Python本例可以学到的知识点: python-pptx和python-docx交互操作word和ppt文件今天将会学习个实用办公小技巧:将文字从ppt中提取出来并写入word一、需求描述:有...
  • 问题如题,在Android中如何将 个内容 保存成word文档
  • 使用VBA代码,自定义页面数拆分大Word文件为多个小文档并指定名称保存 alt+F11打开开发选项-->选择【插入】-->【模块】-->弹出代码编辑窗口,插入下面代码,按照需要修改页数和要重命名的每个文档按顺序的...
  • 今天试着用ptyhon做了个抓取网页内容,并生成word文档的功能,功能很简单,做一下记录以备以后用到。 生成word用到了第三方组件python-docx,所以先进行第三方组件的安装。由于windows下安装的python默认不带...
  • 董付国老师Python在线课程资源使用方法 =============== 功能描述: 批量提取指定Word文档(docx格式)中所有文本框中的文本。 测试文件: 参考代码: 执行结果: 温馨提示 关注本公众号“Python小屋”,通过菜单...
  • 导入Word文档

    2019-05-28 08:48:14
    导入word文档是把word文档保存到临时的文件夹里,也就是Session里,是以个word格式保存,再把word文档转化为HTML文件的格式,转换为HTML文件,再通过正则表达式,把想要的筛选出来,删除不必...
  • 点上方“菜鸟学Python”,选择“星标” 第491篇原创干货,第时间送达 最近有许多小伙伴想要一些自动化办公的福利小程序,今天就满足大家的需求。日常的办公过程中,总少不了批量提取wor...
  • pdf转换成word转换器免费版是款专业的pdf转换成word软件,完美支持pdf文件转换成word文档,转换后可再次编辑,支持图文混合排版,支持表格转换,支持批量转换,操作简单。pdf转换成word转换器免费不限页数可以很好...
  • 1: 对项目添加引用,Microsoft ...在程序中添加 using Word = Microsoft.Office.Interop.Word;  3: 程序中添加 Word.Application app = new Microsoft.Office.Interop.Word.Application(); //可以打开word程序
  • 提取网页内容存储为word的方法

    万次阅读 2017-03-02 16:52:04
    应用需求word是我们平常办公最常用的文字处理软件之了,但是我们第手阅读的材料却并不通常是用word来写...今天老师让我办件事,是登录进个问卷调查网页,将所有问卷内容提取出来,整理成word文件发给她。我在登进
  • 获取文件的拓宽名(后缀名),并且判断该文件的拓展名是否为(doc)或者(docx)类型,不是则说明该文件不是文档或者Word文档。 为文件命名,最好用随机字符串或者时间来命名,避免文件名重复出现的情况。 判断保存文件的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,439
精华内容 10,975
关键字:

word文档提取其中一页