package org.exoplatform.ecm.connector.platform;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import org.apache.pdfbox.PDFToImage;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hslf.usermodel.HSLFTextBox;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.sl.usermodel.Slide;
import org.apache.poi.sl.usermodel.SlideShow;
public class DocumentRenderer {
public boolean createDocument(String content, String fileName, String fileExtension) {
try {
if(fileExtension.equalsIgnoreCase("xls"))
return createExcelDocument(content, fileName);
else if(fileExtension.equalsIgnoreCase("ppt"))
return createPowerPointDocument(content, fileName);
else if(fileExtension.equalsIgnoreCase("pdf"))
return createPDFDocument(content, fileName);
else if(fileExtension.equalsIgnoreCase("jpg") || fileExtension.equalsIgnoreCase("jpeg") ||
fileExtension.equalsIgnoreCase("png"))
return createImageDocument(content, fileName);
else return false;
} catch(Exception ex) {
return false;
}
}
// Create Excel (.xls) document
@SuppressWarnings("deprecation")
public boolean createExcelDocument(String content, String fileName) {
try {
HSSFWorkbook hwb=new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet");
String[] strs = this.splitByNumber(content, 500);
for(int i = 0;i<strs.length;i++) {
HSSFRow rowhead = sheet.createRow((short)i);
rowhead.createCell((short) 0).setCellValue(strs[i]);
}
FileOutputStream fileOut = new FileOutputStream(fileName);
hwb.write(fileOut);
fileOut.close();
return true;
} catch(Exception ex) {
return false;
}
}
// Create powerpoint (.ppt) document
public boolean createPowerPointDocument(String content, String fileName) {
try {
//create a new empty slide show
SlideShow ppt = new HSLFSlideShow();
Slide s1 = ppt.createSlide();
HSLFTextBox txt = new HSLFTextBox();
txt.setText(content);
s1.addShape(txt);
//save changes in a file
FileOutputStream out = new FileOutputStream(fileName);
ppt.write(out);
out.close();
return true;
} catch(Exception ex) {
return false;
}
}
// Create PDF (.pdf) document
public boolean createPDFDocument(String content, String fileName) {
try {
OutputStream file = new FileOutputStream(new File(fileName));
Document document = new Document();
PdfWriter.getInstance(document, file);
document.open();
document.add(new Paragraph(content));
document.add(new Paragraph(new Date().toString()));
document.close();
file.close();
return true;
} catch(Exception ex) {
return false;
}
}
// Create image (.png, .jpg, .jpeg)
public boolean createImageDocument(String content, String fileName) {
try {
String fileExtension = fileName.substring(fileName.indexOf('.') + 1);
OutputStream file = new FileOutputStream(new File("temp.pdf"));
Document document = new Document();
PdfWriter.getInstance(document, file);
document.open();
document.add(new Paragraph(content));
document.add(new Paragraph(new Date().toString()));
document.close();
file.close();
//config option 1:convert all document to image
String [] args_1 = new String[5];
args_1[0] = "-outputPrefix";
args_1[1] = fileName.substring(0, fileName.indexOf("."));
args_1[2] = "-imageType";
args_1[3] = fileExtension;
args_1[4] = "temp.pdf";
PDFToImage.main(args_1);
new File("temp.pdf").delete();
return true;
} catch(Exception ex) {
new File("temp.pdf").delete();
return false;
}
}
public void read(InputStream is, OutputStream os) throws Exception {
int bufferLength = 1024;
int readLength = 0;
while (readLength > -1) {
byte[] chunk = new byte[bufferLength];
readLength = is.read(chunk);
if (readLength > 0) {
os.write(chunk, 0, readLength);
}
}
os.flush();
os.close();
}
private String[] splitByNumber(String s, int size) {
if(s == null || size <= 0)
return null;
int chunks = s.length() / size + ((s.length() % size > 0) ? 1 : 0);
String[] arr = new String[chunks];
for(int i = 0, j = 0, l = s.length(); i < l; i += size, j++)
arr[j] = s.substring(i, Math.min(l, i + size));
return arr;
}
}