
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