|
|
|
@ -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];
|
|
|
|
|
}
|
|
|
|
|
}
|