diff --git a/pom.xml b/pom.xml index 92428ca..bd2e0bf 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ </dependency> -<!-- Commons Math 来计算各种统计量--> + <!-- Commons Math 来计算各种统计量--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-math3</artifactId> @@ -66,19 +66,30 @@ - <dependency> - <groupId>com.squareup.okhttp3</groupId> - <artifactId>okhttp</artifactId> - <version>4.12.0</version> + <dependency> + <groupId>com.squareup.okhttp3</groupId> + <artifactId>okhttp</artifactId> + <version>4.12.0</version> + </dependency> + <dependency> + <groupId>org.apache.poi</groupId> + <artifactId>poi-scratchpad</artifactId> + <version>4.1.2</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.itextpdf</groupId> + <artifactId>itextpdf</artifactId> + <version>5.5.13.3</version> + <scope>compile</scope> </dependency> - -<!-- 词频分析--> -<!-- <dependency>--> -<!-- <groupId>com.hankcs.hanlp.restful</groupId>--> -<!-- <artifactId>hanlp-restful</artifactId>--> -<!-- <version>0.0.12</version>--> -<!-- </dependency>--> + <!-- 词频分析--> + <!-- <dependency>--> + <!-- <groupId>com.hankcs.hanlp.restful</groupId>--> + <!-- <artifactId>hanlp-restful</artifactId>--> + <!-- <version>0.0.12</version>--> + <!-- </dependency>--> <!-- 情感分析--> <dependency> @@ -93,15 +104,15 @@ <version>0.0.12</version> </dependency> -<!-- Apriori算法--> -<!-- <dependency>--> -<!-- <groupId>org.paukov</groupId>--> -<!-- <artifactId>combinatoricsLib</artifactId>--> -<!-- <version>1.0</version>--> -<!-- </dependency>--> + <!-- Apriori算法--> + <!-- <dependency>--> + <!-- <groupId>org.paukov</groupId>--> + <!-- <artifactId>combinatoricsLib</artifactId>--> + <!-- <version>1.0</version>--> + <!-- </dependency>--> -<!-- logistic逻辑回归算法--> + <!-- logistic逻辑回归算法--> <!-- 用于矩阵运算 --> <dependency> <groupId>org.ujmp</groupId> @@ -334,7 +345,7 @@ <version>9.1.22</version> </dependency> -<!-- //词云--> + <!-- //词云--> <dependency> <groupId>com.kennycason</groupId> <artifactId>kumo-core</artifactId> @@ -347,17 +358,27 @@ </dependency> -<!-- AI--> + <!-- AI--> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.3</version> <!-- 使用最新版本 --> </dependency> + + <dependency> + <groupId>com.aspose</groupId> + <artifactId>aspose-words</artifactId> + <version>18.10</version> + </dependency> <dependency> - <groupId>com.ibeetl</groupId> - <artifactId>admin-convert-pdf</artifactId> - <version>1.3.1</version> - <scope>compile</scope> + <groupId>com.aspose</groupId> + <artifactId>aspose-pdf</artifactId> + <version>18.2</version> + </dependency> + <dependency> + <groupId>com.aspose</groupId> + <artifactId>aspose-cells</artifactId> + <version>20.7</version> </dependency> diff --git a/src/main/java/com/sztzjy/marketing/service/impl/StuConceptBlockServiceImpl.java b/src/main/java/com/sztzjy/marketing/service/impl/StuConceptBlockServiceImpl.java index 9f3228a..9e3dbf8 100644 --- a/src/main/java/com/sztzjy/marketing/service/impl/StuConceptBlockServiceImpl.java +++ b/src/main/java/com/sztzjy/marketing/service/impl/StuConceptBlockServiceImpl.java @@ -1,6 +1,7 @@ package com.sztzjy.marketing.service.impl; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; import com.sztzjy.marketing.config.exception.handler.ServiceException; import com.sztzjy.marketing.entity.*; @@ -13,11 +14,13 @@ import com.sztzjy.marketing.util.ConvertUtil; import com.sztzjy.marketing.util.PdfUtil; import com.sztzjy.marketing.util.ResultEntity; import com.sztzjy.marketing.util.compute.ScoringUtil; +import com.sztzjy.marketing.util.convertPDF.PDFConvertUtil; import com.sztzjy.marketing.util.file.IFileUtil; import org.apache.poi.util.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -277,6 +280,19 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { if (stuBlockProductWithBLOBs == null) { throw new RuntimeException("模块或用户ID不能为空"); } + String upload = null; + String originalFilename = file.getOriginalFilename(); + int i = file.getOriginalFilename().lastIndexOf("."); + String substring = file.getOriginalFilename().substring(i + 1); + + boolean flag = false; + //将文件转为PDF + if ("doc".equals(substring) || "docx".equals(substring) + || "jpeg".equals(substring) || "png".equals(substring) || "jpg".equals(substring)) { + + flag = true; + + } //查询是否已有分数 StuPracticalTrainingReportExample stuPracticalTrainingReportExample = new StuPracticalTrainingReportExample(); @@ -292,11 +308,17 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { } } //多次上传 更新 上限就六个 + StuPracticalTrainingReport report = stuPracticalTrainingReports.get(0); + if (flag) { + upload = convertFile(substring, file); + } - StuPracticalTrainingReport report = stuPracticalTrainingReports.get(0); //更新操作 - String upload = fileUtil.upload(file); + if (upload == null) { + upload = fileUtil.upload(file); + } + report.setUrl(upload); report.setUploadTime(new Date()); report.setSize((int) file.getSize()); @@ -306,8 +328,13 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { return report; } else { + if (flag) { + upload = convertFile(substring, file); + } //第一次上传 - String upload = fileUtil.upload(file); + if (upload == null) { + upload = fileUtil.upload(file); + } StuPracticalTrainingReport report = new StuPracticalTrainingReport(); int uuid = UUID.randomUUID().hashCode(); @@ -359,7 +386,7 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { // if (stuPracticalTrainingReportList.size() == 6) { // stuScoreDetails.setCompletionStatus("1"); // } - ArrayList<String> arrayList = new ArrayList<>(); + List<String> arrayList = new ArrayList<>(10); arrayList.add("AI文生图"); arrayList.add("AI修图"); arrayList.add("AI视频"); @@ -396,6 +423,47 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { } + private String convertFile(String substring, MultipartFile file) { + String originalFilename = file.getOriginalFilename(); + + //格式不为pdf,转换 + try { + BufferedInputStream inputStream = FileUtil.getInputStream(convertMultipartFileToFile(file)); + + + String s = IdUtil.simpleUUID(); +// String filePath = "D:\\home"; + // 创建 File 对象 +// File infoFile = new File(filePath); +// if (!infoFile.exists()) { +// infoFile.mkdir(); +// } + FileOutputStream fileOutputStream = new FileOutputStream(filePath + "/pdf/" + s + ".pdf"); + if ("doc".equals(substring) || "docx".equals(substring)) { + PDFConvertUtil.convertToPDFByFileNameSuffix(originalFilename, inputStream, fileOutputStream); + } else if ("jpeg".equals(substring) || "png".equals(substring) || "jpg".equals(substring)) { + PDFConvertUtil.imgToPdf(inputStream, fileOutputStream); + } + FileInputStream fileInputStream = new FileInputStream(filePath + "/pdf/" + s + ".pdf"); + + MultipartFile multipartFile = new MockMultipartFile( + "example.txt", // 文件名 + s + ".pdf", // 原始文件名 + "pdf", // 文件类型 + fileInputStream + ); + String upload = localFileUtil.upload(multipartFile); + + fileInputStream.close(); + fileOutputStream.close(); + return upload; + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + /* * @author whb @@ -686,7 +754,8 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { } @Override - public ResultEntity downReportByZip(HttpServletResponse response, String userId, String module, String reportName) { + public ResultEntity downReportByZip(HttpServletResponse response, String userId, String module, String + reportName) { StuPracticalTrainingReportExample example = new StuPracticalTrainingReportExample(); StuPracticalTrainingReportExample.Criteria criteria = example.createCriteria() .andModuleEqualTo(module) @@ -748,7 +817,8 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { return null; } - private StuPracticalTrainingReport uploadByReport(MultipartFile file, StuBlockProductWithDTO stuBlockProductWithBLOBs) { + private StuPracticalTrainingReport uploadByReport(MultipartFile file, StuBlockProductWithDTO + stuBlockProductWithBLOBs) { StuPracticalTrainingReport stuPracticalTrainingReport = new StuPracticalTrainingReport(); String upload = fileUtil.upload(file); @@ -768,7 +838,7 @@ public class StuConceptBlockServiceImpl implements StuConceptBlockService { } - public File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException { + public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException { // 创建一个临时文件 File tempFile = File.createTempFile("temp", null); diff --git a/src/main/java/com/sztzjy/marketing/util/convertPDF/PDFConvertUtil.java b/src/main/java/com/sztzjy/marketing/util/convertPDF/PDFConvertUtil.java new file mode 100644 index 0000000..5e64927 --- /dev/null +++ b/src/main/java/com/sztzjy/marketing/util/convertPDF/PDFConvertUtil.java @@ -0,0 +1,538 @@ +package com.sztzjy.marketing.util.convertPDF; + +import com.aspose.words.FontSettings; +import com.aspose.words.License; +import com.aspose.words.SaveFormat; +import com.itextpdf.text.Document; +import com.itextpdf.text.Image; +import com.itextpdf.text.PageSize; +import com.itextpdf.text.pdf.PdfPCell; +import com.itextpdf.text.pdf.PdfPTable; +import com.itextpdf.text.pdf.PdfWriter; +import org.apache.poi.hslf.usermodel.*; +import org.apache.poi.xslf.usermodel.*; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static com.sztzjy.marketing.util.convertPDF.PDFConvertUtil.TypeEnum.*; + + +/** + * 功能描述: <br> + * PDF 转换工具 + * + * @Author: lx + * @Date: 2022/12/13 16:26 + */ +public final class PDFConvertUtil { + + final private static Map<TypeEnum, List<String>> types = new HashMap<>(); + + public static enum TypeEnum { + WORD, EXCEL, PPT, PPTX, IMG, OTHER + } + + static { + types.put(WORD, Arrays.asList("DOC", "DOCX")); + types.put(EXCEL, Arrays.asList("XLS", "XLSX")); + types.put(PPT, Arrays.asList("PPT")); + types.put(PPTX, Arrays.asList("PPTX")); +// types.put(IMG, Arrays.asList("JPEG", "JPG", "PNG")); + types.put(OTHER, Arrays.asList("OOXML", "RTF HTML", "OpenDocument", "EPUB", "XPS", "SWF")); + + } + + /** + * @param inputStream 源文件输入流 + * @param outputStream pdf文件输出流 + **/ + public static boolean imgToPdf(InputStream inputStream, OutputStream outputStream) { + + Document document = null; PdfWriter pdfWriter = null; + try { + //此处处理乱码和小方块 + //如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题 + //指定文件库内容路径 + FontSettings.getDefaultInstance().setFontsFolders( + new String[] {"/usr/share/fonts", "/usr/share/fonts/chinese"} + , true); + + // 创建文档,设置PDF页面的大小 A2-A9, 个人觉得A3最合适 + document = new Document(PageSize.A6, 0, 0, 0, 0); + + // 新建pdf文档,具体逻辑看.getInstance方法 + pdfWriter = PdfWriter.getInstance(document, outputStream); + + document.open(); + document.newPage(); + + // 将文件流转换为字节流,便于格式转换 + BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + byte[] bytes = new byte[1024]; + int length = 0 ; + while (-1 != (length = bufferedInputStream.read(bytes))) { + byteArrayOutputStream.write(bytes, 0, length); + } + + // 处理img图片 + Image image = Image.getInstance(byteArrayOutputStream.toByteArray()); + + float height = image.getHeight(); + float width = image.getWidth(); + + float percent = 0.0f; + // 设置像素或者长宽高,将会影响图片的清晰度,因为只是对图片放大或缩小 + if (height > width) { + // A4 - A9 + percent = PageSize.A6.getHeight() / height * 100; + } else { + percent = PageSize.A6.getWidth() / width * 100; + } + + image.setAlignment(Image.MIDDLE); + image.scalePercent(percent); + + // 将图片放入文档中,完成pdf转换 + document.add(image); + System.out.println("image转换完毕"); + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + close(document, pdfWriter); + closeOutput(outputStream); + closeInput(inputStream); + } + + return true; + } + + /** + * @param inputStream 源文件输入流 + * @param outputStream pdf文件输出流 + **/ + public static boolean wordToPdfByAspose(InputStream inputStream, OutputStream outputStream) { + + // 验证License 若不验证则转化出的pdf文档会有水印产生 + if (!getLicense()) { + return false; + } + try { + //此处处理乱码和小方块 + //如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题 + //指定文件库内容路径 + FontSettings.getDefaultInstance().setFontsFolders( + new String[] {"/usr/share/fonts", "/usr/share/fonts/win"} + , true); + // 将源文件保存在com.aspose.words.Document中,具体的转换格式依靠里面的save方法 + com.aspose.words.Document doc = new com.aspose.words.Document(inputStream); + + // 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换 + doc.save(outputStream, SaveFormat.PDF); + + System.out.println("word转换完毕"); + } catch (Exception e) { + e.printStackTrace(); + return false; + }finally { + closeOutput(outputStream); + closeInput(inputStream); + } + return true; + } + + /** + * 关闭输出流 + * @param outputStream + */ + private static void closeOutput(OutputStream outputStream) { + if (outputStream != null) { + try { + outputStream.flush(); + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 关闭输出流 + * @param inputStream + */ + private static void closeInput(InputStream inputStream) { + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private static void close(Document document, PdfWriter pdfWriter) { + if (document != null) { + document.close(); + } + if (pdfWriter != null) { + pdfWriter.close(); + } + } + + // 官方文档的要求 无需理会 + public static boolean getLicense() { + boolean result = false; + try { + String s = "<License>\n" + + " <Data>\n" + + " <Products>\n" + + " <Product>Aspose.Total for Java</Product>\n" + + " <Product>Aspose.Words for Java</Product>\n" + + " </Products>\n" + + " <EditionType>Enterprise</EditionType>\n" + + " <SubscriptionExpiry>20991231</SubscriptionExpiry>\n" + + " <LicenseExpiry>20991231</LicenseExpiry>\n" + + " <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>\n" + + " </Data>\n" + + " <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>\n" + + "</License>"; + ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes()); + License aposeLic = new License(); + aposeLic.setLicense(is); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + /** + * @param inputStream 源文件输入流 + * @param outputStream pdf文件输出流 + **/ + public static boolean excelToPdf(InputStream inputStream, OutputStream outputStream) { + // 验证License 若不验证则转化出的pdf文档会有水印产生 + if (!getExcelLicense()) { + return false; + } + try { + //此处处理乱码和小方块 + //如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题 + //指定文件库内容路径 + FontSettings.getDefaultInstance().setFontsFolders( + new String[] {"/usr/share/fonts", "/usr/share/fonts/win"} + , true); + // 原始excel路径 + com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook(inputStream); + + com.aspose.cells.PdfSaveOptions pdfSaveOptions = new com.aspose.cells.PdfSaveOptions(); + pdfSaveOptions.setOnePagePerSheet(false); + + int[] autoDrawSheets={3}; + //当excel中对应的sheet页宽度太大时,在PDF中会拆断并分页。此处等比缩放。 + autoDraw(wb,autoDrawSheets); + + int[] showSheets={0}; + //隐藏workbook中不需要的sheet页。 + printSheetPage(wb,showSheets); + wb.save(outputStream, pdfSaveOptions); + System.out.println("excel转换完毕"); + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + }finally { + closeOutput(outputStream); + closeInput(inputStream); + } + return true; + } + + + /** + * 设置打印的sheet 自动拉伸比例 + * @param wb + * @param page 自动拉伸的页的sheet数组 + */ + public static void autoDraw(com.aspose.cells.Workbook wb,int[] page){ + if(null!=page&&page.length>0){ + for (int i = 0; i < page.length; i++) { + wb.getWorksheets().get(i).getHorizontalPageBreaks().clear(); + wb.getWorksheets().get(i).getVerticalPageBreaks().clear(); + } + } + } + + /** + * 隐藏workbook中不需要的sheet页。 + * + * @param wb + * @param page 显示页的sheet数组 + */ + public static void printSheetPage(com.aspose.cells.Workbook wb, int[] page) { + for (int i = 1; i < wb.getWorksheets().getCount(); i++) { + wb.getWorksheets().get(i).setVisible(false); + } + if (null == page || page.length == 0) { + wb.getWorksheets().get(0).setVisible(true); + } else { + for (int i = 0; i < page.length; i++) { + wb.getWorksheets().get(i).setVisible(true); + } + } + } + + public static boolean getExcelLicense() { + boolean result = false; + try { + String s = "<License>\n" + + " <Data>\n" + + " <Products>\n" + + " <Product>Aspose.Cells for Java</Product>\n" + + " </Products>\n" + + " <EditionType>Enterprise</EditionType>\n" + + " <SubscriptionExpiry>29991231</SubscriptionExpiry>\n" + + " <LicenseExpiry>29991231</LicenseExpiry>\n" + + " <SerialNumber>evilrule</SerialNumber>\n" + + " </Data>\n" + + " <Signature>evilrule</Signature>\n" + + "</License>"; + ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes()); + com.aspose.cells.License aposeLic = new com.aspose.cells.License(); + aposeLic.setLicense(is); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * pptToPdf + * @param inputStream + * @param outputStream + * @return + */ + public static boolean pptToPdf(InputStream inputStream, OutputStream outputStream) { + + Document document = null; + HSLFSlideShow hslfSlideShow = null; + PdfWriter pdfWriter = null; + + try { + //此处处理乱码和小方块 + //如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题 + //指定文件库内容路径 + FontSettings.getDefaultInstance().setFontsFolders( + new String[] {"/usr/share/fonts", "/usr/share/fonts/win"} + , true); + hslfSlideShow = new HSLFSlideShow(inputStream); + + // 获取ppt文件页面 + Dimension dimension = hslfSlideShow.getPageSize(); + + document = new Document(); + + // pdfWriter实例 + pdfWriter = PdfWriter.getInstance(document, outputStream); + + 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()) { + if (shape instanceof HSLFTextShape) { + 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 Font("宋体", Font.PLAIN, 12)); + + hslfSlide.draw(graphics2d); + + graphics2d.dispose(); + + Image image = Image.getInstance(bufferedImage, null); + image.scalePercent(56f); + + // 写入单元格 + pdfPTable.addCell(new PdfPCell(image, true)); + document.add(image); + + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + close(document, pdfWriter); + closeOutput(outputStream); + closeInput(inputStream); + } + System.out.println("ppt转换完毕"); + return true; + } + + /** + * pptxToPdf + * @param inputStream + * @param outputStream + * @return + */ + public static boolean pptxToPdf(InputStream inputStream, OutputStream outputStream) { + + Document document = null; + + XMLSlideShow slideShow = null; + + PdfWriter pdfWriter = null; + + try { + //此处处理乱码和小方块 + //如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题 + //指定文件库内容路径 + FontSettings.getDefaultInstance().setFontsFolders( + new String[] {"/usr/share/fonts", "/usr/share/fonts/win"} + , true); + + slideShow = new XMLSlideShow(inputStream); + + Dimension dimension = slideShow.getPageSize(); + + document = new Document(); + + pdfWriter = PdfWriter.getInstance(document, outputStream); + + 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()) { + if (shape instanceof XSLFTextShape) { + 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 Font("宋体", Font.PLAIN, 12)); + + slide.draw(graphics2d); + + graphics2d.dispose(); + + Image image = Image.getInstance(bufferedImage, null); + //image.scalePercent(50f); + image.scalePercent(56f); + + // 写入单元格 + pdfPTable.addCell(new PdfPCell(image, true)); + document.add(image); + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + close(document, pdfWriter); + closeOutput(outputStream); + closeInput(inputStream); + } + System.out.println("pptx转换完毕"); + return true; + } + + /** + * 功能描述: <br> + * 通过文件名后缀来进行转换 + * + * @return {@link boolean} + * @Author: lx + * @Date: 2022/12/13 16:37 + */ + public static boolean convertToPDFByFileNameSuffix(String fileName, InputStream inputStream, OutputStream outputStream) { + + String fileSuffix = getFileSuffix(fileName).toUpperCase(); + + if (types.get(WORD).contains(fileSuffix)) { + return wordToPdfByAspose(inputStream, outputStream); + } + if (types.get(EXCEL).contains(fileSuffix)) { + return excelToPdf(inputStream, outputStream); + } + if (types.get(PPT).contains(fileSuffix)) { + return pptToPdf(inputStream, outputStream); + } + if (types.get(PPTX).contains(fileSuffix)) { + return pptxToPdf(inputStream, outputStream); + } +// if (types.get(IMG).contains(fileSuffix)) { +// return imgToPdf(inputStream, outputStream); +// } + if (types.get(OTHER).contains(fileSuffix)) { + return wordToPdfByAspose(inputStream, outputStream); + } + return false; + } + + /** + * 判断是否可以生成PDF文件 + * @param fileName + * @return + */ + public static boolean isCreatePdf(String fileName) { + return types.values().stream().anyMatch(item -> item.contains(getFileSuffix(fileName).toUpperCase())); + } + + /** + * 功能描述: <br> + * 取文件名后缀 + * + * @param fileName + * @return {@link String} + * @Author: lx + * @Date: 2022/12/13 21:51 + */ + private static String getFileSuffix(String fileName) { + if (!fileName.contains(".")) { + throw new RuntimeException("非法的文件名,文件名必须要有文件类型!"); + } + String[] split = fileName.split("\\."); + return split[split.length - 1]; + } +} \ No newline at end of file diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 4c4fdbb..1b9df88 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -21,8 +21,8 @@ spring: file: type: local path: /usr/local/tianzeProject/digitalMarketing/uploadFile -# path: D:\home -# path: /usr/local/tianzeProject/blockFinance/uploadFile + #path: D:\home + bigModule: accessKey: 4zXteUiZO56bkIXfcIypUVsS