赞
踩
借鉴 https://blog.csdn.net/qq_41831842/article/details/115394488
<!-- poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.1.2</version> </dependency> <!-- itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.3</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.6.0</version> </dependency>
import cn.hutool.core.util.StrUtil; import java.awt.*; import java.awt.image.BufferedImage; import org.apache.poi.xslf.usermodel.*; import org.apache.poi.hslf.usermodel.*; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.*; import com.itextpdf.text.Image; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; /** * 类名称:PdfConvertUtil * 类描述:转为为PDF工具类 */ public final class PdfConverUtil { /** * pptToPdf * @param pptPath PPT文件路径 * @param pdfDir 生成的PDF文件路径 * @return */ public static boolean pptToPdf(String pptPath, String pdfDir) { if (StrUtil.isEmpty(pptPath)) { throw new RuntimeException("word文档路径不能为空"); } if (StrUtil.isEmpty(pdfDir)) { throw new RuntimeException("pdf目录不能为空"); } String pdfPath = pdfDir + StrUtil.sub(pptPath, pptPath.lastIndexOf(StrUtil.BACKSLASH), pptPath.lastIndexOf(StrUtil.DOT)) + StrUtil.DOT + "pdf"; Document document = null; HSLFSlideShow hslfSlideShow = null; FileOutputStream fileOutputStream = null; PdfWriter pdfWriter = null; try { hslfSlideShow = new HSLFSlideShow(new FileInputStream(pptPath)); // 获取ppt文件页面 Dimension dimension = hslfSlideShow.getPageSize(); fileOutputStream = new FileOutputStream(pdfPath); document = new Document(); // pdfWriter实例 pdfWriter = PdfWriter.getInstance(document, fileOutputStream); document.open(); PdfPTable pdfPTable = new PdfPTable(1); List<HSLFSlide> hslfSlideList = hslfSlideShow.getSlides(); for (int i=0; i < hslfSlideList.size(); i++) { HSLFSlide hslfSlide = hslfSlideList.get(i); // 设置字体, 解决中文乱码 for (HSLFShape shape : hslfSlide.getShapes()) { HSLFTextShape textShape = (HSLFTextShape) shape; for (HSLFTextParagraph textParagraph : textShape.getTextParagraphs()) { for (HSLFTextRun textRun : textParagraph.getTextRuns()) { textRun.setFontFamily("宋体"); } } } BufferedImage bufferedImage = new BufferedImage((int)dimension.getWidth(), (int)dimension.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D graphics2d = bufferedImage.createGraphics(); graphics2d.setPaint(Color.white); graphics2d.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12)); hslfSlide.draw(graphics2d); graphics2d.dispose(); Image image = Image.getInstance(bufferedImage, null); image.scalePercent(50f); // 写入单元格 pdfPTable.addCell(new PdfPCell(image, true)); document.add(image); } } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (document != null) { document.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } if (pdfWriter != null) { pdfWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } /** * * @Title: pptxToPdf * @param pptPath PPT文件路径 * @param pdfDir 生成的PDF文件路径 */ public static boolean pptxToPdf(String pptPath, String pdfDir) { if (StrUtil.isEmpty(pptPath)) { throw new RuntimeException("word文档路径不能为空"); } if (StrUtil.isEmpty(pdfDir)) { throw new RuntimeException("pdf目录不能为空"); } String pdfPath = pdfDir + StrUtil.sub(pptPath, pptPath.lastIndexOf(StrUtil.BACKSLASH), pptPath.lastIndexOf(StrUtil.DOT)) + StrUtil.DOT + "pdf"; Document document = null; XMLSlideShow slideShow = null; FileOutputStream fileOutputStream = null; PdfWriter pdfWriter = null; try { slideShow = new XMLSlideShow(new FileInputStream(pptPath)); Dimension dimension = slideShow.getPageSize(); fileOutputStream = new FileOutputStream(pdfPath); document = new Document(); pdfWriter = PdfWriter.getInstance(document, fileOutputStream); document.open(); PdfPTable pdfPTable = new PdfPTable(1); List<XSLFSlide> slideList = slideShow.getSlides(); for (int i = 0, row = slideList.size(); i < row; i++) { XSLFSlide slide = slideList.get(i); // 设置字体, 解决中文乱码 for (XSLFShape shape : slide.getShapes()) { XSLFTextShape textShape = (XSLFTextShape) shape; for (XSLFTextParagraph textParagraph : textShape.getTextParagraphs()) { for (XSLFTextRun textRun : textParagraph.getTextRuns()) { textRun.setFontFamily("宋体"); } } } BufferedImage bufferedImage = new BufferedImage((int)dimension.getWidth(), (int)dimension.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D graphics2d = bufferedImage.createGraphics(); graphics2d.setPaint(Color.white); graphics2d.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12)); slide.draw(graphics2d); graphics2d.dispose(); Image image = Image.getInstance(bufferedImage, null); image.scalePercent(50f); // 写入单元格 pdfPTable.addCell(new PdfPCell(image, true)); document.add(image); } } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (document != null) { document.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } if (pdfWriter != null) { pdfWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } }
public static void main(String[] args) {
boolean successful = false;
// ppt to pdf
successful = PdfConvertUtil.pptToPdf("D:\\360_js\\abc1.ppt", "D:\\360_js")
// pptx to pdf
// successful = PdfConvertUtil.pptxToPdf("D:\\360_js\\测321pt.pptx", "D:\\360_js");
System.out.println("转换" + (successful ? "成功" : "失败"));
}
org.apache.poi.xslf.usermodel.XSLFPictureShape cannot be cast to org.apache.poi.xslf.usermodel.XSLFTextShape
主要都是中文转码的问题,注释掉解决中文乱码的代码就可以执行了
import cn.hutool.core.util.StrUtil; import java.awt.*; import java.awt.image.BufferedImage; import org.apache.poi.xslf.usermodel.*; import org.apache.poi.hslf.usermodel.*; import com.itextpdf.text.Document; import com.itextpdf.text.pdf.*; import com.itextpdf.text.Image; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; /** * 类名称:PdfConvertUtil * 类描述:转为为PDF工具类 */ public final class PdfConverUtil { /** * pptToPdf * pptPath PPT文件路径 * pdfDir 生成的PDF文件路径 */ public static void main(String[] args) { boolean successful = false; //获取文件路径文件夹下的全部文件列表 //表示一个文件路径 File file = new File("D:\\360_js\\abc1.ppt", "D:\\360_js"); //用数组把文件夹下的文件存起来 File[] files = file.listFiles(); //foreach遍历数组 for (File file2 : files) { //打印文件列表:只读取名称使用getName(); // System.out.println("路径:"+file2.getPath()); // System.out.println("文件夹/文件名:"+file2.getName()); // successful = PdfConverUtil.pptToPdf("D:\\360_js\\abc1.ppt", "D:\\360_js"); successful = PdfConverUtil.pptxToPdf("D:\\360_js\\abc1.ppt", "D:\\360_js"); } // ppt to pdf // successful = pptToPdf("D:\\360_js\\abc1.ppt", "D:\\360_js"); // pptx to pdf // successful = PdfConvertUtil.pptxToPdf("D:\\360_js\\测321pt.pptx", "D:\\360_js"); System.out.println("转换" + (successful ? "成功" : "失败")); } public static boolean pptToPdf(String pptPath, String pdfDir) { if (StrUtil.isEmpty(pptPath)) { throw new RuntimeException("word文档路径不能为空"); } if (StrUtil.isEmpty(pdfDir)) { throw new RuntimeException("pdf目录不能为空"); } String pdfPath = pdfDir + StrUtil.sub(pptPath, pptPath.lastIndexOf(StrUtil.BACKSLASH), pptPath.lastIndexOf(StrUtil.DOT)) + StrUtil.DOT + "pdf"; Document document = null; HSLFSlideShow hslfSlideShow = null; FileOutputStream fileOutputStream = null; PdfWriter pdfWriter = null; try { hslfSlideShow = new HSLFSlideShow(new FileInputStream(pptPath)); // 获取ppt文件页面 Dimension dimension = hslfSlideShow.getPageSize(); fileOutputStream = new FileOutputStream(pdfPath); document = new Document(); // pdfWriter实例 pdfWriter = PdfWriter.getInstance(document, fileOutputStream); document.open(); PdfPTable pdfPTable = new PdfPTable(1); List<HSLFSlide> hslfSlideList = hslfSlideShow.getSlides(); for (int i=0; i < hslfSlideList.size(); i++) { HSLFSlide hslfSlide = hslfSlideList.get(i); // // 设置字体, 解决中文乱码 // for (HSLFShape shape : hslfSlide.getShapes()) { // HSLFTextShape textShape = (HSLFTextShape) shape; // // for (HSLFTextParagraph textParagraph : textShape.getTextParagraphs()) { // for (HSLFTextRun textRun : textParagraph.getTextRuns()) { // textRun.setFontFamily("宋体"); // } // } // } BufferedImage bufferedImage = new BufferedImage((int)dimension.getWidth(), (int)dimension.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D graphics2d = bufferedImage.createGraphics(); graphics2d.setPaint(Color.white); graphics2d.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12)); hslfSlide.draw(graphics2d); graphics2d.dispose(); Image image = Image.getInstance(bufferedImage, null); image.scalePercent(50f); // 写入单元格 pdfPTable.addCell(new PdfPCell(image, true)); document.add(image); } } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (document != null) { document.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } if (pdfWriter != null) { pdfWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } /** * * @Title: pptxToPdf * @param pptPath PPT文件路径 * @param pdfDir 生成的PDF文件路径 */ public static boolean pptxToPdf(String pptPath, String pdfDir) { if (StrUtil.isEmpty(pptPath)) { throw new RuntimeException("word文档路径不能为空"); } if (StrUtil.isEmpty(pdfDir)) { throw new RuntimeException("pdf目录不能为空"); } String pdfPath = pdfDir + StrUtil.sub(pptPath, pptPath.lastIndexOf(StrUtil.BACKSLASH), pptPath.lastIndexOf(StrUtil.DOT)) + StrUtil.DOT + "pdf"; Document document = null; XMLSlideShow slideShow = null; FileOutputStream fileOutputStream = null; PdfWriter pdfWriter = null; try { slideShow = new XMLSlideShow(new FileInputStream(pptPath)); Dimension dimension = slideShow.getPageSize(); fileOutputStream = new FileOutputStream(pdfPath); document = new Document(); pdfWriter = PdfWriter.getInstance(document, fileOutputStream); document.open(); PdfPTable pdfPTable = new PdfPTable(1); List<XSLFSlide> slideList = slideShow.getSlides(); for (int i = 0, row = slideList.size(); i < row; i++) { XSLFSlide slide = slideList.get(i); // // 设置字体, 解决中文乱码 // for (XSLFShape shape : slide.getShapes()) { // XSLFTextShape textShape = (XSLFTextShape) shape; // // for (XSLFTextParagraph textParagraph : textShape.getTextParagraphs()) { // for (XSLFTextRun textRun : textParagraph.getTextRuns()) { // textRun.setFontFamily("宋体"); // } // } // } BufferedImage bufferedImage = new BufferedImage((int)dimension.getWidth(), (int)dimension.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D graphics2d = bufferedImage.createGraphics(); graphics2d.setPaint(Color.white); graphics2d.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12)); slide.draw(graphics2d); graphics2d.dispose(); Image image = Image.getInstance(bufferedImage, null); image.scalePercent(50f); // 写入单元格 pdfPTable.addCell(new PdfPCell(image, true)); document.add(image); } } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (document != null) { document.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } if (pdfWriter != null) { pdfWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。