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(
没有合适的资源?快使用搜索试试~ 我知道了~
基于apache.poi实现批量修改PPT文件源码
共1个文件
java:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 112 浏览量
2023-10-19
16:42:31
上传
评论
收藏 3KB ZIP 举报
温馨提示
相关文章:https://arthas777.blog.csdn.net/article/details/133929501 源代码包括: 依赖导入 读取目标文件夹内所有PPT文件得到文件名列表 循环文件列表 加载一个PPT文件 删除某一页 替换文本 重新生成PPT文件
资源推荐
资源详情
资源评论
收起资源包目录
BanGongZYFileProccess.zip (1个子文件)
BanGongZYFileProccess.java 11KB
共 1 条
- 1
资源评论
心兰相随引导者
- 粉丝: 777
- 资源: 5486
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功