All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.alantea.docwork.DocxFile Maven / Gradle / Ivy

The newest version!
package net.alantea.docwork;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import net.alantea.docwork.DocWorkParagraph.Alignment;
import net.alantea.utils.exception.LntException;

public class DocxFile extends DocWorkFile
{
   private File targetFile;
   private XWPFDocument xdoc;
   
   public DocxFile(String path)
   {
      this(new File(path));
   }
   

   public DocxFile(File inputfile)
   {
      try
      {
         if (inputfile.exists())
         {
            xdoc = new XWPFDocument(OPCPackage.open(inputfile));
         }
         else
         {
            xdoc = new XWPFDocument();
         }
         targetFile = inputfile;
      }
      catch (InvalidFormatException | IOException e)
      {
         new LntException("Error creating DOCX file information class : " + inputfile.getAbsolutePath(), e);
      }
   }

   @Override
   public void save()
   {
      try
      {
         if (targetFile.exists())
         {
            targetFile.delete();
         }
         xdoc.write(new FileOutputStream(targetFile));
      }
      catch (IOException e)
      {
         new LntException("Error saving DOCX file : " + targetFile.getAbsolutePath(), e);
      }
   }

   @Override
   public void close()
   {
      try
      {
         xdoc.getPackage().close();
      }
      catch (IOException e)
      {
         new LntException("Error closing DOCX file : " + targetFile.getAbsolutePath(), e);
      }
   }

   @Override
   public void appendParagraph(String text)
   {
      XWPFParagraph paragraph = xdoc.createParagraph();
      XWPFRun run = paragraph.createRun();
      run.setText(text);
   }

   @Override
   public void appendParagraph(DocWorkParagraph para)
   {
      XWPFParagraph paragraph = xdoc.createParagraph();
      paragraph.setPageBreak(para.isPageBreak());
      for (DocWorkSpan span : para.getContent())
      {
         XWPFRun run = paragraph.createRun();
         run.setText(span.getContent());
         run.setBold(span.isBold());
         run.setItalic(span.isItalic());
      }
      Alignment align = para.getAlign();
      switch(align)
      {
         case RIGHT :
            paragraph.setAlignment(ParagraphAlignment.RIGHT);
            break;
         case CENTER :
            paragraph.setAlignment(ParagraphAlignment.CENTER);
            break;
         case JUSTIFIED :
            paragraph.setAlignment(ParagraphAlignment.BOTH);
            break;
         default :
            paragraph.setAlignment(ParagraphAlignment.LEFT);
            break;
      }
   }
   
   @Override
   public int calculateSize()
   {
      int size = 0;
      for (XWPFParagraph paragraph : xdoc.getParagraphs())
      {
         for (XWPFRun run : paragraph.getRuns())
         {
            String text = run.getText(0);
            size += text.length();
         }
      }
      return size;
   }


   @Override
   public List getParagraphs()
   {
      List ret = new LinkedList<>();

      for (XWPFParagraph paragraph : xdoc.getParagraphs())
      {
         DocWorkParagraph para = new DocWorkParagraph();
         para.setPageBreak(paragraph.isPageBreak());
         for (XWPFRun run : paragraph.getRuns())
         {
            DocWorkSpan span = new DocWorkSpan(run.getText(0), run.isBold(), run.isItalic());
            para.add(span);
         }
         
         ParagraphAlignment align = paragraph.getAlignment();
         switch(align)
         {
            case RIGHT :
               para.setAlign(Alignment.RIGHT);
               break;
            case CENTER :
               para.setAlign(Alignment.CENTER);
               break;
            case BOTH :
               para.setAlign(Alignment.JUSTIFIED);
               break;
            default :
               para.setAlign(Alignment.LEFT);
               break;
         }
         ret.add(para);
      }
      return ret;
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy