diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/pom.xml b/src/main/java/com/sztzjy/admin-convert-pdf/pom.xml deleted file mode 100644 index c1167cb..0000000 --- a/src/main/java/com/sztzjy/admin-convert-pdf/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> -<!-- <parent>--> -<!-- <groupId>com.ibeetl</groupId>--> -<!-- <artifactId>admin-framwork</artifactId>--> -<!-- <version>1.3.1</version>--> -<!-- </parent>--> - <modelVersion>4.0.0</modelVersion> - - <groupId>com.ibeetl</groupId> - <artifactId>admin-convert-pdf</artifactId> - <version>1.3.1</version> - - <description>任意格式转换成PDF的工具包</description> - - <properties> - <maven.compiler.source>8</maven.compiler.source> - <maven.compiler.target>8</maven.compiler.target> - </properties> - - <dependencies> - <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> - <!--pdf依赖开始,导入本地依赖包,crack jar--> - <dependency> - <groupId>com.aspose</groupId> - <artifactId>aspose-words</artifactId> - <version>18.10</version> - <scope>system</scope> - <systemPath>${project.basedir}/src/main/resources/lib/aspose-words-18.10-jdk16.jar</systemPath> - </dependency> - <dependency> - <groupId>com.aspose</groupId> - <artifactId>aspose-pdf</artifactId> - <version>18.2</version> - <scope>system</scope> - <systemPath>${project.basedir}/src/main/resources/lib/aspose-pdf-18.2.jar</systemPath> - </dependency> - <dependency> - <groupId>com.aspose</groupId> - <artifactId>aspose-cells</artifactId> - <version>20.7</version> - <scope>system</scope> - <systemPath>${project.basedir}/src/main/resources/lib/aspose-cells-20.7-crack.jar</systemPath> - </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi-ooxml</artifactId> - <version>4.1.2</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-web</artifactId> - <version>6.0.11</version> - <scope>compile</scope> - </dependency> - - - </dependencies> - - <repositories> - <repository> - <id>AsposeJavaAPI</id> - <name>Aspose Java API</name> - <url>https://repository.aspose.com/repo/</url> - </repository> - </repositories> - <pluginRepositories> - <pluginRepository> - <id>AsposeJavaAPI</id> - <url>https://repository.aspose.com/repo/</url> - </pluginRepository> - </pluginRepositories> - -</project> \ No newline at end of file diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/java/util/convertPDF/PDFConvertUtil.java b/src/main/java/com/sztzjy/admin-convert-pdf/src/main/java/util/convertPDF/PDFConvertUtil.java deleted file mode 100644 index 8619f6d..0000000 --- a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/java/util/convertPDF/PDFConvertUtil.java +++ /dev/null @@ -1,538 +0,0 @@ -package 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 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 java.awt.Font("宋体", java.awt.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 java.awt.Font("宋体", java.awt.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/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-cells-20.7-crack.jar b/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-cells-20.7-crack.jar deleted file mode 100644 index 9676f04..0000000 Binary files a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-cells-20.7-crack.jar and /dev/null differ diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-pdf-18.2.jar b/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-pdf-18.2.jar deleted file mode 100644 index 833df4f..0000000 Binary files a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-pdf-18.2.jar and /dev/null differ diff --git a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-words-18.10-jdk16.jar b/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-words-18.10-jdk16.jar deleted file mode 100644 index 33057f9..0000000 Binary files a/src/main/java/com/sztzjy/admin-convert-pdf/src/main/resources/lib/aspose-words-18.10-jdk16.jar and /dev/null differ