You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@poi.apache.org by xmcs05 <zh...@gmail.com> on 2011/02/10 12:25:18 UTC
Trouble with merging ppt files
I had merge two powerpoint files with the code below, generally, it works
ok.But, any textbox(POI take it as AutoShape) with text list in it,it will
omit list info(After Copied, Square or ◆ before every line missed)
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ppt;
import org.apache.poi.hslf.usermodel.*;
import org.apache.poi.hslf.*;
import org.apache.poi.hslf.model.*;
import org.apache.poi.hssf.usermodel.HSSFSimpleShape;
import java.io.*;
import java.util.regex.*;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.Dimension;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2010</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class PPTmerge {
private static final String[] USAGE_MESSAGE = {
"Usage: java PPTMerge.jar <pptfile1> [pptfile2] [pptfile3] ...",
""};
public PPTmerge() {
}
private static String GetResultFileName(String file[]){
String ret="";
try{
File file1 = new File(file[0]);
String[] Array1 = Pattern.compile("_").split(file1.getName());
switch (file.length){
case 0 :
break;
case 1 :
if (file1.getParent()!=null){
ret=file1.getParent() + "/";
}else{
ret="";
}
for (int j=0; j < Array1.length-1; j++){
if (j>0){
ret += "_";
}
ret += Array1[j];
}
if (ret.toUpperCase().lastIndexOf(".PPT") == -1){
ret += ".PPT";
}
break;
default :
File file2 = new File(file[1]);
String[] Array2 =
Pattern.compile("_").split(file2.getName());
for (int i=0; i < Array1.length; i++){
if (Array1[i].compareTo(Array2[i])!=0){
if (i==0){
ret=file[0];
}else{
if (file1.getParent()!=null){
ret=file1.getParent() + "/";
}else{
ret="";
}
for (int j=0; j < i; j++){
if (j>0){
ret += "_";
}
ret += Array1[j];
}
if (ret.toUpperCase().lastIndexOf(".PPT") ==
-1){
ret += ".PPT";
}
}
}
}
}
}catch (Exception e){
System.err.println("Error! Get merged ppt name ! ");
e.printStackTrace();
}
return ret;
}
public static String concatenateFiles( String file[] ) {
String filename = "";
try {
filename = GetResultFileName(file);
if (filename.length()==0){
//Error! Get merged ppt name
filename = file[0];
}
SlideShow write_SlideShow = new SlideShow( new HSLFSlideShow(
file[0] ) );
// Get page size
Dimension write_pgsize = write_SlideShow.getPageSize();
for (int i = 1; i < file.length; i++) {
SlideShow read_SlideShow = new SlideShow( new HSLFSlideShow(
file[i] ) );
// Add Font
for (int k=0; k < read_SlideShow.getNumberOfFonts(); k++){
PPFont rf=read_SlideShow.getFont(k);
int j=0;
for (j=0; j < write_SlideShow.getNumberOfFonts(); j++){
if (rf.equals(write_SlideShow.getFont(j))){
break;
}
}
if (j>=write_SlideShow.getNumberOfFonts()){
write_SlideShow.addFont(rf);
}
}
// Get page size
Dimension read_pgsize = read_SlideShow.getPageSize();
Slide read_slides[] = read_SlideShow.getSlides();
// Get Slide number
int slnum=0;
for ( Slide sld : read_slides ) {
Slide write_slide = write_SlideShow.createSlide();
Shape shapes[] = sld.getShapes();
for ( Shape shape : shapes ) {
try {
if (shape instanceof Picture) {
Picture pict = (Picture) shape;
PictureData pictData =
pict.getPictureData();
int idx =
write_SlideShow.addPicture(pictData.
getData(), pictData.getType());
Picture p = new Picture(idx);
Rectangle write_rt = shape.getAnchor();
write_rt.x = write_rt.x * write_pgsize.width
/
read_pgsize.width;
write_rt.width = write_rt.width *
write_pgsize.width /
read_pgsize.width;
write_rt.y = write_rt.y *
write_pgsize.height /
read_pgsize.height;
write_rt.height = write_rt.height *
write_pgsize.height /
read_pgsize.height;
p.setAnchor(write_rt);
write_slide.addShape(p);
} else if (shape instanceof TextBox) {
TextBox read_tb = (TextBox) shape;
TextBox write_tb = new TextBox();
Rectangle write_rt = shape.getAnchor();
write_rt.x = write_rt.x * write_pgsize.width
/
read_pgsize.width;
write_rt.width = write_rt.width *
write_pgsize.width /
read_pgsize.width;
write_rt.y = write_rt.y *
write_pgsize.height /
read_pgsize.height;
write_rt.height = write_rt.height *
write_pgsize.height /
read_pgsize.height;
write_tb.setAnchor(write_rt);
write_tb.setText(read_tb.getText());
if (read_tb.getHyperlink() != null) {
int link_id =
write_SlideShow.addHyperlink(
read_tb.getHyperlink());
write_tb.setHyperlink(link_id,
read_tb.getHyperlink().getStartIndex(),
read_tb.getHyperlink().getEndIndex());
}
write_tb.setFillColor(read_tb.getFillColor());
write_tb.setHorizontalAlignment(read_tb.
getHorizontalAlignment());
write_tb.setVerticalAlignment(read_tb.
getVerticalAlignment());
write_tb.setWordWrap(read_tb.getWordWrap());
write_tb.setMarginLeft(read_tb.getMarginLeft());
write_tb.setMarginTop(read_tb.getMarginTop());
write_tb.setMarginRight(read_tb.getMarginRight());
write_tb.setMarginBottom(read_tb.getMarginBottom());
RichTextRun read_rtx = read_tb.getTextRun().
getRichTextRuns()[0];
RichTextRun write_rtx =
write_tb.getTextRun().
getRichTextRuns()[0];
write_rtx.setBold(read_rtx.isBold());
write_rtx.setItalic(read_rtx.isItalic());
write_rtx.setShadowed(read_rtx.isShadowed());
write_rtx.setUnderlined(read_rtx.isUnderlined());
write_rtx.setFontName(read_rtx.getFontName());
write_rtx.setFontSize(read_rtx.getFontSize());
write_rtx.setFontColor(read_rtx.getFontColor());
write_slide.addShape(write_tb);
} else if (shape instanceof Line) {
Line read_line = (Line) shape;
Line write_line = new Line();
// Позиционирование
Rectangle write_rt = shape.getAnchor();
write_rt.x = write_rt.x * write_pgsize.width
/
read_pgsize.width;
write_rt.width = write_rt.width *
write_pgsize.width /
read_pgsize.width;
write_rt.y = write_rt.y *
write_pgsize.height /
read_pgsize.height;
write_rt.height = write_rt.height *
write_pgsize.height /
read_pgsize.height;
write_line.setAnchor(write_rt);
write_line.setFillColor(read_line.getFillColor());
write_line.setLineColor(read_line.getLineColor());
write_line.setLineDashing(read_line.getLineDashing());
write_line.setLineStyle(read_line.getLineStyle());
write_line.setLineWidth(read_line.getLineWidth());
write_line.setRotation(read_line.getRotation());
// Hyperlink
if (read_line.getHyperlink() != null) {
Hyperlink
read_hl=read_line.getHyperlink();
Hyperlink write_hl = new Hyperlink();
write_hl.setTitle(read_hl.getTitle());
write_hl.setAddress(read_hl.getAddress());
write_hl.setType(read_hl.getType());
write_SlideShow.addHyperlink(write_hl);
write_line.setHyperlink(write_hl);
}
write_slide.addShape(write_line);
} else if (shape instanceof Table) {
Table read_table = (Table) shape;
Table write_table = new Table(read_table.
getNumberOfRows(),
read_table.getNumberOfColumns());
// Position
Rectangle write_rt = shape.getAnchor();
write_rt.x = write_rt.x * write_pgsize.width
/
read_pgsize.width;
write_rt.width = write_rt.width *
write_pgsize.width /
read_pgsize.width;
write_rt.y = write_rt.y *
write_pgsize.height /
read_pgsize.height;
write_rt.height = write_rt.height *
write_pgsize.height /
read_pgsize.height;
write_table.setAnchor(write_rt);
for (int row = 0; row <
read_table.getNumberOfRows();
row++) {
for (int col = 0;
col <
read_table.getNumberOfColumns();
col++) {
TableCell read_cell =
read_table.getCell(
row, col);
if (read_cell != null) {
TableCell write_cell =
write_table.
getCell(row, col);
// Cell
if (read_cell.getText() != null)
{
write_cell.setText(read_cell.
getText());
}
// Hyperlink
if (read_cell.getHyperlink() !=
null) {
int link_id =
write_SlideShow.addHyperlink(
read_cell.getHyperlink());
write_cell.setHyperlink(link_id,
read_cell.getHyperlink().getStartIndex(),
read_cell.getHyperlink().getEndIndex());
}
// Font
RichTextRun read_rtx =
read_cell.
getTextRun().getRichTextRuns()[
0];
RichTextRun write_rtx =
write_cell.
getTextRun().getRichTextRuns()[
0];
write_rtx.setBold(read_rtx.isBold());
write_rtx.setItalic(read_rtx.isItalic());
write_rtx.setShadowed(read_rtx.
isShadowed());
write_rtx.setUnderlined(read_rtx.
isUnderlined());
write_rtx.setFontName(read_rtx.
getFontName());
write_rtx.setFontSize(read_rtx.
getFontSize());
write_rtx.setFontColor(read_rtx.
getFontColor());
// Size
write_rt =
read_cell.getAnchor();
write_rt.x = write_rt.x *
write_pgsize.width /
read_pgsize.width;
write_rt.width = write_rt.width
*
write_pgsize.width /
read_pgsize.width;
write_rt.y = write_rt.y *
write_pgsize.height /
read_pgsize.height;
write_rt.height =
write_rt.height *
write_pgsize.height /
read_pgsize.height;
write_cell.setAnchor(write_rt);
// Border
// Left
Line borderLeft = write_table.
createBorder();
if (read_cell.getBorderLeft() !=
null) {
borderLeft.setLineColor(read_cell.
getBorderLeft().
getLineColor());
borderLeft.setLineStyle(read_cell.
getBorderLeft().
getLineStyle());
borderLeft.setLineWidth(read_cell.
getBorderLeft().
getLineWidth());
borderLeft.setLineDashing(read_cell.
getBorderLeft().
getLineDashing());
} else {
borderLeft.setLineColor(Color.BLACK);
borderLeft.setLineStyle(
HSSFSimpleShape.
LINESTYLE_SOLID);
}
write_cell.setBorderLeft(borderLeft);
// Top
Line borderTop = write_table.
createBorder();
if (read_cell.getBorderTop() !=
null) {
borderTop.setLineColor(read_cell.
getBorderTop().getLineColor());
borderTop.setLineStyle(read_cell.
getBorderTop().getLineStyle());
borderTop.setLineWidth(read_cell.
getBorderTop().getLineWidth());
borderTop.setLineDashing(read_cell.
getBorderTop().
getLineDashing());
} else {
borderTop.setLineColor(Color.BLACK);
borderTop.setLineStyle(
HSSFSimpleShape.
LINESTYLE_SOLID);
}
write_cell.setBorderTop(borderTop);
// Right
Line borderRight = write_table.
createBorder();
if (read_cell.getBorderRight()
!= null) {
borderRight.setLineColor(read_cell.
getBorderRight().
getLineColor());
borderRight.setLineStyle(read_cell.
getBorderRight().
getLineStyle());
borderRight.setLineWidth(read_cell.
getBorderRight().
getLineWidth());
borderRight.setLineDashing(
read_cell.
getBorderRight().
getLineDashing());
} else {
borderRight.setLineColor(Color.
BLACK);
borderRight.setLineStyle(
HSSFSimpleShape.
LINESTYLE_SOLID);
}
write_cell.setBorderRight(borderRight);
// Bottom
Line borderBottom = write_table.
createBorder();
if (read_cell.getBorderBottom()
!= null) {
borderBottom.setLineColor(read_cell.
getBorderBottom().
getLineColor());
borderBottom.setLineStyle(read_cell.
getBorderBottom().
getLineStyle());
borderBottom.setLineWidth(read_cell.
getBorderBottom().
getLineWidth());
borderBottom.setLineDashing(
read_cell.
getBorderBottom().
getLineDashing());
} else {
borderBottom.setLineColor(Color.
BLACK);
borderBottom.setLineStyle(
HSSFSimpleShape.
LINESTYLE_SOLID);
}
write_cell.setBorderBottom(borderBottom);
// Fill
write_cell.setFillColor(read_cell.
getFillColor());
// Text orientation
write_cell.setHorizontalAlignment(
read_cell.
getHorizontalAlignment());
write_cell.setVerticalAlignment(
read_cell.getVerticalAlignment());
write_cell.setMarginLeft(read_cell.
getMarginLeft());
write_cell.setMarginTop(read_cell.
getMarginTop());
write_cell.setMarginRight(read_cell.
getMarginRight());
write_cell.setMarginBottom(read_cell.
getMarginBottom());
write_cell.setWordWrap(read_cell.
getWordWrap());
}
}
}
write_slide.addShape(write_table);
} else if (shape instanceof AutoShape) {
AutoShape read_shape = (AutoShape) shape;
AutoShape write_shape = new
AutoShape(read_shape.
getShapeType());
//
write_shape.setLineColor(read_shape.getLineColor());
write_shape.setLineDashing(read_shape.
getLineDashing());
write_shape.setLineStyle(read_shape.getLineStyle());
write_shape.setLineWidth(read_shape.getLineWidth());
write_shape.setRotation(read_shape.getRotation());
// Text
if (read_shape.getText() != null) {
write_shape.setText(read_shape.getText());
// Font
RichTextRun read_rtx =
read_shape.getTextRun().
getRichTextRuns()[0];
RichTextRun write_rtx =
write_shape.getTextRun().
getRichTextRuns()[0];
write_rtx.setBold(read_rtx.isBold());
write_rtx.setItalic(read_rtx.isItalic());
write_rtx.setShadowed(read_rtx.isShadowed());
write_rtx.setUnderlined(read_rtx.isUnderlined());
write_rtx.setFontName(read_rtx.getFontName());
write_rtx.setFontSize(read_rtx.getFontSize());
write_rtx.setFontColor(read_rtx.getFontColor());
// Text position
write_shape.setHorizontalAlignment(read_shape.
getHorizontalAlignment());
write_shape.setVerticalAlignment(read_shape.
getVerticalAlignment());
write_shape.setMarginLeft(read_shape.
getMarginLeft());
write_shape.setMarginTop(read_shape.
getMarginTop());
write_shape.setMarginRight(read_shape.
getMarginRight());
write_shape.setMarginBottom(read_shape.
getMarginBottom());
write_shape.setWordWrap(read_shape.getWordWrap());
}
// Hyperlink
if (read_shape.getHyperlink() != null) {
int link_id =
write_SlideShow.addHyperlink(
read_shape.getHyperlink());
write_shape.setHyperlink(link_id,
read_shape.getHyperlink().getStartIndex(),
read_shape.getHyperlink().getEndIndex());
}
// Fill
write_shape.setFillColor(read_shape.getFillColor());
// Size
Rectangle write_rt = shape.getAnchor();
if (write_rt != null) {
write_rt.x = write_rt.x *
write_pgsize.width /
read_pgsize.width;
write_rt.width = write_rt.width *
write_pgsize.width /
read_pgsize.width;
write_rt.y = write_rt.y *
write_pgsize.height /
read_pgsize.height;
write_rt.height = write_rt.height *
write_pgsize.height /
read_pgsize.height;
if ((write_rt.width != 0) &&
(write_rt.height != 0)) {
try {
write_shape.setAnchor(write_rt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
try {
write_slide.addShape(write_shape);
} catch (Exception e) {
e.printStackTrace();
}
//}else if (shape instanceof SimpleShape){
//SimpleShape read_shape =
(SimpleShape)shape;
//SimpleShape write_shape = new
SimpleShape(read_shape.getShapeType());
} else {
//
//HSSFPatriarch patriarch =
write_SlideShow.createDrawingPatriarch();
// a = new HSSFClientAnchor( 0, 0, 1023,
255, (short) 1, 0, (short) 1, 0 );
// HSSFSimpleShape write_shape =
patriarch.createSimpleShape(a1);
//shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
//
// Hyperlink
if (shape.getHyperlink() != null) {
write_SlideShow.addHyperlink(shape.getHyperlink());
}
Rectangle write_rt = shape.getAnchor();
if (write_rt != null) {
write_rt.x = write_rt.x *
write_pgsize.width /
read_pgsize.width;
write_rt.width = write_rt.width *
write_pgsize.width /
read_pgsize.width;
write_rt.y = write_rt.y *
write_pgsize.height /
read_pgsize.height;
write_rt.height = write_rt.height *
write_pgsize.height /
read_pgsize.height;
if ((write_rt.width != 0) &&
(write_rt.height != 0)) {
try {
shape.setAnchor(write_rt);
} catch (Exception e) {
e.printStackTrace();
}
}
}
try {
write_slide.addShape(shape);
} catch (Exception e) {
e.printStackTrace();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
FileOutputStream out = new FileOutputStream( filename );
write_SlideShow.write( out );
out.close();
}
catch ( Exception e ) {
e.printStackTrace();
return null;
}
return filename;
}
/**
* Prints out a message.
*
* @param msg the message to be printed.
*/
private static void printMessage(String[] msg) {
for (String s : msg) {
System.out.println(s);
}
}
public static void main(String[] args) {
if ((args.length<1)){
printMessage(USAGE_MESSAGE);
System.exit(1);
}
if (concatenateFiles(args) == null){
System.out.println("Some error found");
System.exit(1);
}else{
System.out.println("All Ok");
System.exit(0);
}
}
}
--
View this message in context: http://apache-poi.1045710.n5.nabble.com/Trouble-with-merging-ppt-files-tp3379143p3379143.html
Sent from the POI - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org