You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@poi.apache.org by "ORANSKY, JEFF" <jo...@att.com> on 2012/03/14 16:58:04 UTC

Still having cell border creation issues POI 3.7 hslf

I still have a problem creating specific cell borders.  In this code if I just have the line that does the cell.setBorderTop then it creates the top border ok, when I add cell.setBorderBottom, no borders are created.  Any help would be appreciated.


import java.awt.Color;
import java.awt.Dimension;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.poi.hslf.model.Line;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.Table;
import org.apache.poi.hslf.model.TableCell;
import org.apache.poi.hslf.model.TextBox;
import org.apache.poi.hslf.model.TextShape;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;

public class borderTest {

        public borderTest(SlideShow ppt) {

                ppt.setPageSize(new Dimension(720,450));
                ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
                Slide theSlide = ppt.createSlide();
                ArrayList<String> topDataElement = new ArrayList<String>();

                topDataElement.add("100");
                topDataElement.add("200");
                topDataElement.add("300");
                topDataElement.add("400");
                topDataElement.add("500");
                topDataElement.add("600");
                topDataElement.add("700");
                topDataElement.add("800");

                data.add(topDataElement);

                for (int i = 0;i < 10; i++) {
                        ArrayList<String> thisRow = new ArrayList<String>();
                        thisRow.add("100");
                        thisRow.add("200");
                        thisRow.add("300");
                        thisRow.add("400");
                        thisRow.add("500");
                        thisRow.add("600");
                        thisRow.add("700");
                        thisRow.add("800");
                        data.add(thisRow);
                }

        formatTable(data, topDataElement, theSlide);

        }

        public static void main(String[] args) {
                SlideShow ppt = new SlideShow();

                borderTest theSlide = new borderTest(ppt);

                writeOutput(ppt, "c:\\download\\test.ppt");
                System.out.println("Finished");
        }


        private void formatTable(ArrayList<ArrayList<String>> data, ArrayList<String>topDataElement,
                        Slide theSlide) {

            // topDataElement.size() is the number of columns
            // data.size is the number of rows

            Table table = new Table(data.size(), topDataElement.size());
            int rowHeight = 50;
            int lastRow = data.size() - 1;
            int columnWidth = 70;
            int lastColumn = topDataElement.size() - 1;
            int pctChgColumn = lastColumn - 3;
            int serviceNameColumn = 0;
            boolean changeColor = false;
//          Line borderLine = new Line();
//          borderLine.setLineColor(Color.BLACK);
//          borderLine.setLineStyle(Line.LINE_SIMPLE);
//          borderLine.setLineWidth(Line.DEFAULT_LINE_WIDTH);

            Iterator<ArrayList<String>> itr = data.iterator();
            int tableRow = 0;
            while (itr.hasNext()) {
                ArrayList<String> dataElement = itr.next();
                table.setRowHeight(tableRow, rowHeight);
                for (int tableColumn = 0; tableColumn < dataElement.size(); tableColumn++) {
                        changeColor = false;

                        table.setColumnWidth(tableColumn, columnWidth);
                        Line borderLine = table.createBorder();

                                TableCell cell = table.getCell(tableRow, tableColumn);
                                cell.setText(dataElement.get(tableColumn));
//                              cell.setText(utilities.splitLongString(dataElement.get(tableColumn), 33));

                                RichTextRun rt = cell.getTextRun().getRichTextRuns()[0];
                                float margin = 1.0f;
                                cell.setMarginBottom(margin);
                                cell.setMarginLeft(margin);
                                cell.setMarginRight(margin);
                                cell.setMarginTop(margin);

                                if (tableColumn == lastColumn) {
                                        if (tableRow == 1) {
                                                cell.setBorderTop(borderLine);
                                                cell.setBorderBottom(borderLine);
                                        }
//                                      if (tableRow == lastRow) {
//                                              cell.setBorderBottom(borderLine);
//                                      }
//                                      if (tableRow > 0) {
//                                              cell.setBorderLeft(borderLine);
//                                              cell.setBorderRight(borderLine);
//                                      }
                                }

//                              cell.setWordWrap(TextShape.WrapByPoints);



                                cell.setHorizontalAlignment(TextBox.AlignCenter);

                                if (tableRow < 2)
                            {
                                 rt.setBold(true);
                            }
                                else
                                {
                                        rt.setBold(false);
                                }
                                rt.setFontName("Verdana");
                            rt.setFontSize(9);
                            rt.setFontColor(Color.BLACK);

//                          if (tableColumn == serviceNameColumn) {
//                              table.setColumnWidth(tableColumn, (columnWidth * 2) + 10);
//                              cell.setHorizontalAlignment(TextBox.AlignLeft);
//                          } else
//                          {
//                                  if (tableColumn == monthlyVolumeColumn) {
//                                      table.setColumnWidth(tableColumn, columnWidth + 20);
//                                  }
//                                  else
//                                  {
//                                      table.setColumnWidth(tableColumn, columnWidth - 15);
//                                  }
//                          }


                                if (tableRow == 1) {
                                        rt.setFontSize(7);
                                        rt.setFontColor(Color.BLUE);
                                        rt.setBold(true);
                                }
                            if (tableRow == 0) {
                                rt.setFontColor(Color.white);
                                }


                            cell.setVerticalAlignment(TextBox.AnchorTop);
//                          lastColumn = tableColumn;
                } // End of for (int j = 0; j < dataElement.length; j++)
                 table.setColumnWidth(lastColumn, columnWidth + 20);
                 tableRow++;
            } // End of while (itr.hasNext())

            theSlide.addShape(table);
            // Set starting coordinates of the table
            table.moveTo(30, 70);
        } // End of formatTable method

    public static void writeOutput(SlideShow ppt, String fileName) {
        FileOutputStream out = null;

            try {
                out = new FileOutputStream(fileName);

                } catch (FileNotFoundException e) {
                        e.printStackTrace();
                }

            try {
                        ppt.write(out);
                        out.close();
                } catch (IOException e) {
                        e.printStackTrace();
                        System.exit(1);
                }
    }  // End of writeOutput method



}

Jeff Oransky
Technical Architect, ACSI
Office: (925)901-7379
Cell: (925) 548-2786
jo8461@att.com




---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org