Java palabra poi operación y algunos análisis de código fuente (notas)

Java poi palabra operación

  Hace dos días para hacer el proyecto escribieron un poco contenido de Java PDI relacionada con la palabra funcionamiento hoy en día para hacer un pequeño resumen, potente poi.

doc java leer el documento

  doc versión del documento es el documento oficina de la palabra 97-03, después de 2007 formato docx es los viejos formatos de archivo binario de apoyo versión poi tales como doc, xls, ppt y otros tipos de archivos, ya que el juego poi3.5, PDI apoyar la nueva versión del archivo OOXML formatos como docx, xlsx, pptx y otros documentos. Así que uso una versión más antigua poi, 3.17 versión.
  Echemos un vistazo al código para leer e imprimir el contenido del documento doc, es muy simple.

public void readAndPrintDoc() throws IOException  {
		WordExtractor wordExtractor = new WordExtractor(new FileInputStream(new File("doc文件地址")));
        String text = wordExtractor.getText();
        System.out.println(text);
}

  Es muy simple, clase WordExtractor donde solía operar el documento, hay otra manera, hablar un rato, vamos a entender lo que la clase WordExtractor.
método principal WordExtractor
  La cifra es el principal método de WordExtractor, no se moleste en escribir en la idea en la pantalla, verá.
  El primer método de cuatro construcción es un método, se pueden ver diferentes parámetros, sustancialmente la totalidad de los parámetros de tipo más inferior HWPFDocument asignación doc, otro método de operación de un documento doc anteriormente mencionado es operado por HWPFDocument clase y eso es algo, ahora doc propiedad ha sido asignado por el constructor del valor de acabado, cogí unas cuantas maneras de ver que registró.
  principal () ignora método, de hecho, para encontrar un documento de Word por el pase de matriz en, y luego todo el contenido de la salida de documentos. Código no impresiona, muy simple, llamada de la siguiente manera.

String[] strings = {文档地址};//这是一个数组,源码里通过这个数组的第一位定义到文件地址,所以只填一个就行
WordExtractor.main(strings);

  método getParagraphText (), todos los párrafos de texto adquiridos, devuelve una matriz de cadenas.

    public String[] getParagraphText() {
        String[] ret;

        // Extract using the model code
        try {
            Range r = doc.getRange();

            ret = getParagraphText( r );
        } catch ( Exception e ) {
            // Something's up with turning the text pieces into paragraphs
            // Fall back to ripping out the text pieces
            ret = new String[1];
            ret[0] = getTextFromPieces();
        }

        return ret;
    }

    protected static String[] getParagraphText( Range r ) {
        String[] ret;
        ret = new String[r.numParagraphs()];
        for ( int i = 0; i < ret.length; i++ ) {
            Paragraph p = r.getParagraph( i );
            ret[i] = p.text();

            // Fix the line ending
            if ( ret[i].endsWith( "\r" )) {
                ret[i] = ret[i] + "\n";
            }
        }
        return ret;
    }

  Otro método anteriormente mencionado aquí y algunas relaciones, el principio es el mismo, han de ser adquirida por HWPFDocument Rango clase de objeto de clase, que es el núcleo de HWPFDocument llegar a toda la cadena de texto del párrafo a través de él, y luego se convirtió en operamos.
  WordExtractor párrafos clases de adquisición de la operación

		WordExtractor wordExtractor = new WordExtractor(new FileInputStream(new File("doc文件地址")));
		String[] paragraphText = wordExtractor.getParagraphText();
        System.out.println("文章标题:" + paragraphText[0]);
        System.out.println("文章段落数:" + paragraphText.length);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < paragraphText.length; i++) {
            sb.append(paragraphText[i]);
        }
        System.out.println(sb);
		wordExtractor.close();

  operación HWPFDocument

		HWPFDocument document = new HWPFDocument(new FileInputStream(new File("src\\main\\resources\\templates\\sldkfj.doc")));
        Range range = document.getRange();
        System.out.println("文章段落数:" + range.numParagraphs());
        System.out.println("文章标题:" + range.getParagraph(0).text());
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < range.numParagraphs(); i++) {
            sb.append(range.getParagraph(i));
        }
		System.out.println(sb);

  método getText es relativamente tinta, recuerda que es un método para obtener el texto completo en la línea. HWPFDocument método es más complicado, sino también la función más potente, es de hecho WordExtractor tenía un paquete sencillo, lo que permite a los usuarios obtener el contenido del documento es más simple y conveniente.
  Uso HWPFDocument realizar tareas básicas.

		HWPFDocument document = new HWPFDocument(new FileInputStream(new File(文件地址)));
        Range range = document.getRange();
        //书签操作
        Bookmarks bookmarks = document.getBookmarks();
        System.out.println("书签数量:" + bookmarks.getBookmarksCount());
        for (int i = 0; i < bookmarks.getBookmarksCount(); i++) {
            Bookmark bookmark = bookmarks.getBookmark(i);
            System.out.println("书签" + i + "名:" + bookmark.getName());
            System.out.println("开始位置:" + bookmark.getStart());
            System.out.println("结束位置:" + bookmark.getEnd());
        }
        //表格操作
        TableIterator tableIterator = new TableIterator(range);
        Table table;
        TableRow tableRow;
        TableCell tableCell;
        while (tableIterator.hasNext()) {
            table = tableIterator.next();
            int rowNum = table.numRows();
            for (int j = 0; j < rowNum; j++) {
                tableRow = table.getRow(j);
                int cellNum = tableRow.numCells();
                for (int k = 0; k < cellNum; k++) {
                    tableCell = tableRow.getCell(k);
                    //输出单元格的文本
                    System.out.println(tableCell.text().trim());
                }
            }
        }

  Hacer un pequeño ejemplo de ello, escribir una pequeña mesa
Generar una plantilla
reemplazar resultados

		File file = new File(文件路径);
        HWPFDocument doc = new HWPFDocument(new FileInputStream(file));
        Range range = doc.getRange();
        range.replaceText("生成", "个人信息");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        range.replaceText("shijian",simpleDateFormat.format(new Date()));
        range.replaceText("Name", "nb爽");
        range.replaceText("Age", "123");
        range.replaceText("Gender","爷们");
        doc.write(file);
        doc.close();

  Me gustaría encontrar más doc método de escritura, y por desgracia, encontrar POI para escribir todavía relativamente joven, no se puede escribir la palabra documento más complejo, sino también una forma de generar documentos compleja palabra, la palabra se guarda a XML, a continuación, traducido en la plantilla FreeMarker, generada por documento FreeMarker Doc, también se puede ir a lograr a través de Jacob, pero yo no estudiar, y otros estudios antes de comenzar a hacer un blog.

Java operaciones docx

  simple de archivos docx es el siguiente

		//打印内容及一些信息
        XWPFDocument docx = new XWPFDocument(new FileInputStream("src\\main\\resources\\templates\\sldkfj.docx"));
        XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
        System.out.println(extractor.getText());
        POIXMLProperties.CoreProperties coreProperties = extractor.getCoreProperties();
        System.out.println("分类:" + coreProperties.getCategory());
        System.out.println("创建者:" + coreProperties.getCreator());
        System.out.println("创建时间:" + coreProperties.getCreated());
        System.out.println("标题:" + coreProperties.getTitle());
		docx.close();

  La operación anterior se realiza por XWPFWordExtractor, por el siguiente XWPFDocument operación simple. Imprimir párrafo, tabla de contenidos, los encabezados y pies de página.

		XWPFDocument docx = new XWPFDocument(new FileInputStream(文件地址));
        //段落打印
        List<XWPFParagraph> paragraphs = docx.getParagraphs();
        for (XWPFParagraph paragraph : paragraphs) {
            System.out.println(paragraph.getText());
        }
        //获取表格
        List<XWPFTable> tables = docx.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) {
                    System.out.println(cell.getText());
                }
            }
        }
        //页脚
        List<XWPFFooter> footerList = docx.getFooterList();
        for (XWPFFooter xwpfFooter : footerList) {
            System.out.println(xwpfFooter.getText());
        }

        //页眉
        List<XWPFHeader> headerList = docx.getHeaderList();
        for (XWPFHeader xwpfHeader : headerList) {
            System.out.println(xwpfHeader.getText());
        }
        docx.close();

  operación de escritura puede ser mejor que el número de archivos doc, que no es necesario volver a crear por completo el valor de reposición doc documento, un nuevo XWPFDocument directa en la línea.

        XWPFDocument document = new XWPFDocument();
        XWPFParagraph paragraph = document.createParagraph();
        // 具有相同属性的一个区域
        XWPFRun run = paragraph.createRun();
        //设置粗体
        run.setBold(true);
        //设置内容
        run.setText("hahahahaha");
        run = paragraph.createRun();
        //设置红色
        run.setColor("FF0000");
        run.setText("red color");
        //写一个表格 3*3
        XWPFTable table = document.createTable(3, 3);
        //新增一行
        table.createRow();
        List<XWPFTableRow> rows = table.getRows();
        //表格属性
        CTTblPr ctTblPr = table.getCTTbl().addNewTblPr();
        //表格宽度
        CTTblWidth ctTblWidth = ctTblPr.addNewTblW();
        ctTblWidth.setW(BigInteger.valueOf(10000));
        List<XWPFTableCell> cells;
        XWPFTableCell cell;
        int i = 0;
        for (XWPFTableRow row : rows) {
            //添加一单元格
            row.addNewTableCell();
            //行高
            row.setHeight(500);
            cells = row.getTableCells();
            for (XWPFTableCell tableCell : cells) {
                tableCell.setColor("FF0000");
                //单元格属性
                CTTcPr ctTcPr = tableCell.getCTTc().addNewTcPr();
                ctTcPr.addNewVAlign().setVal(STVerticalJc.CENTER);
                CTTblWidth ctTblWidth1 = ctTcPr.addNewTcW();
                ctTblWidth1.setW(BigInteger.valueOf(1000));
                tableCell.setText("第" + ++i);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\writeDocx.docx");
        document.write(fileOutputStream);
        document.close();
        fileOutputStream.close();

  Pequeños ejemplos y similares doc
plantilla
resultado
  cantidad, dos tiros en el alfabeto de ignorarlo, de hecho, mejor usar la redacción está ${}haciendo un marcador de posición, más claridad, pero sólo planean un inútil cómodo de usar.

resumen

  Elocuente también escribió muchas palabras, hay una mejor escritos, pero no lo usamos, o la necesidad de tener una gran cantidad de mejoras hasta que la actualización posterior de la misma, que así sea.

Publicado 26 artículos originales · ganado elogios 2 · Vistas 2343

Supongo que te gusta

Origin blog.csdn.net/qq_42909545/article/details/102565102
Recomendado
Clasificación