Categorías
Otros

Descarga de DOCX4J

Además de las tablas de programación del artículo anterior, la tabla de lista implementada en tabla también es muy común o útil. También dije en el artículo anterior. Sólo me doy cuenta del análisis del análisis basado en la plantilla JXEl. El ejemplo del artículo es implementar datos de tabla estática y datos de lista de bucle dinámicos, así como el ajuste de estilo basado en la tabla de plantilla, la captura de pantalla de la plantilla de referencia es la siguiente:

El código se implementa como:

package cn.chendd.docx4j.examples;

 

import java.io.File;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.docx4j.Docx4J;

import org.docx4j.TraversalUtil;

import org.docx4j.XmlUtils;

import org.docx4j.finders.ClassFinder;

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

import org.docx4j.wml.Tbl;

import org.docx4j.wml.Tr;

 

public class TableTemplateTest {

 

public static void main(String[] args) throws Exception {

     

      String templatePath = System.getProperty("user.dir") + "/template/template form_template.docx";

             String outPath = System.getProperty("user.dir") + "/template/out/template form.docx";

      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(templatePath));

      HashMap<String, String> mappings = new HashMap<String, String>();

             //Construct table data of non-cyclic grid

             mappings.put("name", " ");

             mappings.put("sex", "Male");

             mappings.put("skill", "Spreading rumors: There are many things that three people become tigers");

             //Construct the data of the circular list

      ClassFinder find = new ClassFinder(Tbl.class);

      new TraversalUtil(wordMLPackage.getMainDocumentPart().getContent(), find);

      Tbl table = (Tbl) find.results.get(1);

             Tr dynamicTr = (Tr) table.getContent().get(1);//The second line is agreed as a template

             String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr);//Get the xml data of the template row

      List<Map<String , Object>> dataList = getDataList();

      for (Map<String, Object> dataMap : dataList) {

                   Tr newTr = (Tr) XmlUtils.unmarshallFromTemplate(dynamicTrXml, dataMap);//fill template row data

         table.getContent().add(newTr);

      }

             //Delete the placeholder row of the template row

      table.getContent().remove(1);

             wordMLPackage.getMainDocumentPart().variableReplace(mappings);//Set global variable replacement

      Docx4J.save(wordMLPackage, new File(outPath));

   }

 

       //Construct cyclic data

   private static List<Map<String , Object>> getDataList() {

      List<Map<String , Object>> dataList = new ArrayList<Map<String , Object>>();

      Map<String , Object> m1 = new HashMap<String , Object>();

             m1.put("item.number", "1");m1.put("item.name", " ");

             m1.put("item.sex", " ");m1.put("item.skill", "Come on, Qinglong Yanyuedao");

      dataList.add(m1);

      Map<String , Object> m2 = new HashMap<String , Object>();

             m2.put("item.number", "2");m2.put("item.name", " ");

             m2.put("item.sex", " ");m2.put("item.skill", "What the hell, the square piece in the hand draws the card, the placeholder sees the line-wrapping effect, the placeholder is occupied Bit to see the style effect of line break");

      dataList.add(m2);

      Map<String , Object> m3 = new HashMap<String , Object>();

             m3.put("item.number", "3");m3.put("item.name", " ");

             m3.put("item.sex", " ");m3.put("item.skill", "Long Ying in hand, wipe wipe");

      dataList.add(m3);

     

      return dataList;

   }

  

}

Generar archivos:

  Programación de gráficos e imágenes (3)-Curva especial

blob.png

.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *