700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > POI + PDFbox将PPT有图表页转换成图片

POI + PDFbox将PPT有图表页转换成图片

时间:2024-05-30 12:44:47

相关推荐

POI + PDFbox将PPT有图表页转换成图片

使用poi将PPT中有图表页转换成图片存在一些问题,转成图片的时候图表没有了,数据丢失。

所以用一个中转的方法,现将PPT的图表页转换成PDF,再将PDF转换成图片,虽然麻烦点,但是没有出现任何问题。

先添加依赖

<!--pdf 依赖--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>2.0.12</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.12</version></dependency><!--poi 依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.3</version></dependency>

上代码:

这段代码里边有将PPT图表页转换成图片、添加水印和获取全部文本的功能。

public static void main(String[] args) {try {extractCharts();} catch (Exception e) {e.printStackTrace();}}public static void extractCharts() throws Exception {//poi解析PPT获取图表以及图表的所在页XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("D:\\nfc111.pptx"));XSLFSlide[] slides = ppt.getSlides().toArray(new XSLFSlide[0]);//pdfbox解析PDF将图表所在页生成图片PDDocument document = PDDocument.load(new FileInputStream("D:\\nfc111.pdf"));PDFRenderer renderer = new PDFRenderer(document);//PdfReader pdfReader = new PdfReader(FILE_NAME);String waterMarkContent = "Hello World !";for (int i = 0; i < slides.length; i++) {XSLFShape[] sh = slides[i].getShapes().toArray(new XSLFShape[0]);//XSLFSlide slide = ppt.getSlides().get(i);for (int j = 0; j < sh.length; j++) {XSLFShape shape = sh[j];if (shape instanceof XSLFGraphicFrame) {//System.out.println(textFromPage);//获取全部文本/*PDFTextStripper pdfTextStripper = new PDFTextStripper();pdfTextStripper.setSortByPosition(true);pdfTextStripper.setStartPage(i);pdfTextStripper.setEndPage(i);String content = pdfTextStripper.getText(document);System.out.print(content);*//*Image image = renderer.renderImageWithDPI(i, 100);*///生成图片代码,100是生成的图片大小BufferedImage image = renderer.renderImageWithDPI(i, 100);BufferedImage buffImg = new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.TYPE_INT_RGB);Graphics2D graphics = buffImg.createGraphics();graphics.setColor(Color.RED);graphics.setFont(new Font("宋体", Font.BOLD, 36));graphics.drawImage(image, 0, 0, image.getWidth(null), image.getHeight(null), null);int x = image.getWidth(null) - 2*getWatermarkLength(waterMarkContent,graphics);int y = image.getHeight(null) - 2*getWatermarkLength(waterMarkContent,graphics);graphics.drawString(waterMarkContent, x, y);graphics.dispose();FileOutputStream out = new FileOutputStream("D:\\d\\" + UUID.randomUUID() + ".png");ImageIO.write(buffImg, "png", out);ppt.write(out);out.close();break;}}}}public static int getWatermarkLength(String waterMarkContent, Graphics2D graphics) {return graphics.getFontMetrics(graphics.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。