¿Cómo ajustar automáticamente la tabla y alinear la tabla al centro, de acuerdo con Word Document Size Apache-POI?

Cómo hacer que esta tabla se ajuste automáticamente al ancho de página del documento, cuando el tamaño de la columna aumenta, usando apache-poi y alineando esa tabla al centro.

Este código genera un documento de Word que extrae datos de Java a un archivo de Word ubicado en la unidad c. He establecido manualmente el ancho pero ahora funciona bien. Sería valioso para mí si se proporciona la orientación adecuada

public Word2Doc() throws Exception {

    System.out.println("This is Word To Document Class");

    File file = null; 
           FileOutputStream fos = null; 
           XWPFDocument document = null; 
           XWPFParagraph para = null; 
           XWPFRun run = null; 
           try { 
               // Create the first paragraph and set it's text. 
               document = new XWPFDocument(); 
               para = document.createParagraph(); 

               para.setAlignment(ParagraphAlignment.CENTER); 

               para.setSpacingAfter(100); 

               para.setSpacingAfterLines(10);
               run = para.createRun(); 
               for(int i=1; i<=5; i++)
               run.setText("Test Name \009\009\009 Value \t\t\t\t Normal Ranges\013\013"); 
               run.addBreak();    // similar to new line
               run.addBreak();

               XWPFTable table = document.createTable(4, 3);

               table.setRowBandSize(1);
               table.setWidth(1);
               table.setColBandSize(1);
               table.setCellMargins(1, 1, 100, 30);

               table.setStyleID("finest");


               table.getRow(1).getCell(1).setText("EXAMPLE OF TABLE");
               table.getRow(2).getCell(1).setText("fine");
               XWPFParagraph p1 = table.getRow(0).getCell(0).getParagraphs().get(0);
               p1.setAlignment(ParagraphAlignment.CENTER);
                       XWPFRun r1 = p1.createRun();
                       r1.setBold(true);
                       r1.setText("Test Name");
                       r1.setItalic(true);
                       r1.setFontFamily("Courier");
                       r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
                       r1.setTextPosition(100);

              //Locating the cell values
                        table.getRow(0).getCell(1).setText("Value"); 
                        table.getRow(0).getCell(2).setText("Normal Ranges"); 

                       table.getRow(2).getCell(2).setText("numeric values");

                        table.setWidth(120);

               file = new File("c:\\nwhpe.docx"); 
               if(file.exists())
                   file.delete();


               FileOutputStream out = new FileOutputStream(file);
               document.write(out);
               out.close();
           } 

       } 
public static void main(String ar[]) throws Exception{
    new Word2Doc();
}

}

Respuesta 1

configurar la tabla para que se ajuste automáticamente, básicamente solo se extiende el ancho a un tamaño específico. ejemplo

CTTbl table        = poiTable.getCTTbl();
CTTblPr pr         = table.getTblPr();
CTTblWidth  tblW = pr.getTblW();
tblW.setW(BigInteger.valueOf(5000));
tblW.setType(STTblWidth.PCT);
pr.setTblW(tblW);
table.setTblPr(pr);

en cuanto a alinear la mesa al centro

CTJc jc = pr.addNewJc();        
jc.setVal(STJc.RIGHT);
pr.setJc(jc);
Respuesta: 2

Para establecer el ancho de una tabla:

  XWPFTable table = doc.createTable(nRows, nCols);
  table.getCTTbl().addNewTblPr().addNewTblW().setW(BigInteger.valueOf(10000));

Para establecer el ancho de columna:

cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));

Si los datos aumentan en la celda, afecta el ancho de la columna, es decir, el ancho de la columna también aumentará, por lo que para evitar este tipo de problemas, necesitamos verificar la longitud del valor de la cadena en la celda y debemos agregar \ n (nueva línea) en la cadena haciendo esto Podemos establecer el ancho de la columna.

En mi proyecto, he luchado mucho para establecer el ancho de la columna y he resuelto este problema controlando los datos en la celda.

Respuesta: 3

Puede establecer el ancho de una tabla en porcentaje del tamaño real de la página. Primero, obtenga el ancho de la página:

CTSectPr sectPr = document.getDocument().getBody().getSectPr();
CTPageSz pageSize = sectPr.getPgSz();
double pageWidth = pageSize.getW().doubleValue();

Segundo paso, obtenga los márgenes de la página y calcule el tamaño efectivo de la página:

CTPageMar pageMargin = sectPr.getPgMar();
double pageMarginLeft = pageMargin.getLeft().doubleValue();
double pageMarginRight = pageMargin.getRight().doubleValue();
double effectivePageWidth = pageWidth - pageMarginLeft - pageMarginRight;

Ahora, supongamos que desea que la tabla tenga un ancho del 60% del tamaño efectivo de página. Luego calcula el tamaño de su mesa. (Si desea que la tabla se ajuste al tamaño real de la página, simplemente use 1.0):

double widthInPercent = 0.6;
int size = (int) (effectivePageWidth * widthInPercent);

Finalmente, configure este tamaño en su mesa:

CTTblWidth width = table.getCTTbl().addNewTblPr().addNewTblW();
width.setType(STTblWidth.DXA);
width.setW(new BigInteger(size + ""));

¡Espero que esto ayude!

Mejor, Holger

Respuesta: 4

Mi código se da a continuación. public static void main (String [] args) {// Lógica de aplicación de código TODO aquí Archivo pcounter_log = nuevo archivo ("c: \ development \ temp \ test.log"); intente {Tailer tailer = ...

Cuando uso ArrayList en Java, hay algunas cosas que no entiendo. Aquí está mi código de inicialización: ArrayList <Integer> list = new ArrayList <Integer> (); list.add (0); list.add ...

Estoy tratando de incluir un botón de donación de PayPal en mi aplicación (al iniciarlo desde un botón de la barra de acción), funciona como debería, pero ... solo muestra PayPalActivity como una ventana emergente muy pequeña, mientras que debería ...

En Java / Processing, quiero probar si una curva bezier se superpone a un círculo, para poder desplazar una de ellas. ¿Hay una manera simple de hacer esto?