package speetgeter.resoucestools.handler;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ooxml.POIXMLProperties;
import org.apache.poi.ooxml.POIXMLProperties.CoreProperties;
import org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFGroupShape;
import org.apache.poi.xslf.usermodel.XSLFShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;
import org.apache.xmlbeans.XmlDocumentProperties;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMaster;
import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument;
import java.io.FileOutputStream;
public class BanGongZYFileProccess {
/*
* 加载一个ppt文件
*/
public static XMLSlideShow LoadPresentation(String fileName) {
try {
FileInputStream file = new FileInputStream(fileName);
XMLSlideShow ppt = new XMLSlideShow(file);
file.close();
return ppt;
}
catch (FileNotFoundException e) {
System.out.println("File Not Found");
return null;
}
catch (OLE2NotOfficeXmlFileException oe){
oe.printStackTrace();
return null;
}
catch (IOException e) {
e.printStackTrace();
return null;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* @param textShape
*/
private static void replaceTextInTextShape(XSLFTextShape textShape){
for (XSLFTextParagraph paragraph : textShape) {
List<XSLFTextRun> textRuns = new ArrayList<>();
for (XSLFTextRun textRun : paragraph) {
textRuns.add(textRun);
}
for (XSLFTextRun textRun : textRuns) {
try{
System.out.println("-------text : " + textRun.toString());
String text = textRun.getRawText();
// String text = textRun.toString();
String newText = "";
if (text.contains("FFFFFFFFFFFFFFF")) {
newText = text.replace("FFFFFFFFFFFFFFFFF", "XXXXXXX");
textShape.setText(newText);
}
}catch(Exception e){
e.printStackTrace();
continue;
}
}
}
}
private static void collectTextShapes(List<XSLFShape> shapes, List<XSLFTextShape> textShapes) {
for (XSLFShape shape : shapes) {
if (shape instanceof XSLFGroupShape) {
XSLFGroupShape groupShape = (XSLFGroupShape) shape;
collectTextShapes(groupShape.getShapes(), textShapes);
} else if (shape instanceof XSLFTextShape) {
XSLFTextShape textShape = (XSLFTextShape) shape;
textShapes.add(textShape);
}
}
}
private static boolean containsCopyrightStatement(XSLFSlide slide) {
for (XSLFShape shape : slide.getShapes()) {
if (shape instanceof XSLFTextShape) {
XSLFTextShape textShape = (XSLFTextShape) shape;
if (textShape.getText().contains("XXXXXXXX")) {
return true;
}
if (textShape.getText().contains("XXXXXXXXXXXXX")) {
return true;
}
if (textShape.getText().contains("XXXXXXXXXXXXXXX")) {
return true;
}
}
}
return false;
}
/**
* @return nothing 批量修改完成
*/
public void loopAndRefreshCopyRightInfo(String filePath,String pufix){
ArrayList<String> fileNames = traverseFolder(filePath);
try{
for (String fileName : fileNames){
System.out.println("-------------I get file name this , "+fileName);
System.out.println("----------------------------------------------==================================================");
String fileNameAndPath = filePath+"\\"+fileName;
XMLSlideShow presentation = LoadPresentation(fileNameAndPath);
if (presentation != null) {
List<XSLFTextShape> textShapes = new ArrayList<>();
/*
* 判断当前幻灯片,是否包含某个文字,如果包含,就删除当前幻灯片
*/
for (int i = presentation.getSlides().size() - 1; i >= 0; i--) {
XSLFSlide slide = presentation.getSlides().get(i);
if (containsCopyrightStatement(slide)) {
presentation.removeSlide(i);
}
}
System.out.println("step>>>>>>>>>>>>>>>>>>>>>判断当前幻灯片,是否包含某个文字,如果包含,就删除当前幻灯片>>>>ok");
/*
* 得到当前幻灯片的母版,将所有母版,全都重命名
*/
//没有找到解决方法
System.out.println("step>>>>>>>>>>>>>>>>>>>>>得到当前幻灯片的母版,将所有母版,全都重命名>>>>ok");
/*
*判断每一页中是否有要替换的文字,全都替换掉
*/
for (XSLFSlide slide : presentation.getSlides()) {
collectTextShapes(slide.getShapes(), textShapes);
}
System.out.println("step>>>>>>>>>>>>>>>>>>>>>收集所有需要判断的shapes>>>>ok");
for (XSLFTextShape textShape : textShapes) {
try{
replaceTextInTextShape(textShape);
}catch(Exception e){
e.printStackTrace();
continue;
}
}
System.out.println("step>>>>>>>>>>>>>>>>>>>>>在新的shapes集合中,修改内容>>>>ok");
File folder = new File(filePath+"\\new_edition\\");
if (!folder.exists() || !folder.isDirectory()) {
folder.mkdir();
}
fileName = pufix +"PPT模板"+fileName.split("PPT模板.ppt")[0]+".pptx";
File newFile = new File(filePath+"\\new_edition\\"+fileName);
newFile.createNewFile();
FileOutputStream fos = new FileOutputStream(filePath+"\\new_edition\\"+fileName);
presentation.write(fos);
// presentation.close();
// fos.close();
}
else{
/*
* presentation为null,代表文件肯定不是pptx格式,那就暂存在另外一个文件夹下吧
*/
File folder = new File(
心兰相随引导者
- 粉丝: 1146
- 资源: 5639
最新资源
- 基于flink的实时数仓详细文档+全部资料.zip
- 基于Flink的数据同步工具详细文档+全部资料.zip
- 基于Flink的数据流业务处理平台详细文档+全部资料.zip
- 基于flink的物流业务数据实时数仓建设详细文档+全部资料.zip
- 外卖时间数据,食品配送时间数据集,外卖影响因素数据集(千条数据)
- 基于flink的异构数据源同步详细文档+全部资料.zip
- 基于flink的营销系统详细文档+全部资料.zip
- 基于Flink对用户行为数据的实时分析详细文档+全部资料.zip
- 基于Flink分析用户行为详细文档+全部资料.zip
- 基于flink可以创建物理表的catalog详细文档+全部资料.zip
- 基于Flink流批一体数据处理快速集成开发框架、快速构建基于Java的Flink流批一体应用程序,实现异构数据库实时同步和ETL,还可以让Flink SQL变得
- 太和-圣德西实施—部门负责人以上宣贯培训大纲.doc
- 太和-圣德西实施—部门负责人非HR的HRM培训.pptx
- 太和-圣德西实施—宣贯培训大纲.docx
- 基于Flink流处理的动态实时亿级全端用户画像系统可视化界面详细文档+全部资料.zip
- 基于Flink全端用户画像商品推荐系统详细文档+全部资料.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈