diff --git a/server/lib/jai_codec-1.1.3.jar b/server/lib/jai_codec-1.1.3.jar
new file mode 100644
index 00000000..056ecd3a
Binary files /dev/null and b/server/lib/jai_codec-1.1.3.jar differ
diff --git a/server/lib/jai_core-1.1.2-beta.jar b/server/lib/jai_core-1.1.2-beta.jar
new file mode 100644
index 00000000..cf228722
Binary files /dev/null and b/server/lib/jai_core-1.1.2-beta.jar differ
diff --git a/server/pom.xml b/server/pom.xml
index 7e7c81d7..d0288345 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -250,6 +250,26 @@
+
+ com.lowagie
+ itext
+ 2.1.7
+
+
+
+ javax.media
+ jai_core
+ 1.1.2-beta
+ ${basedir}/lib/jai_core-1.1.2-beta.jar
+
+
+
+ javax.media
+ jai_codec
+ 1.1.3
+ ${basedir}/lib/jai_codec-1.1.3.jar
+
+
diff --git a/server/src/main/config/application.properties b/server/src/main/config/application.properties
index e964c10c..122182e4 100644
--- a/server/src/main/config/application.properties
+++ b/server/src/main/config/application.properties
@@ -67,7 +67,7 @@ media.convert.disable = ${KK_MEDIA_CONVERT_DISABLE:false}
#支持转换的视频类型
convertMedias = ${KK_CONVERTMEDIAS:avi,mov,wmv,mkv,3gp,rm}
#office类型文档(word ppt)样式,默认为图片(image),可配置为pdf(预览时也有按钮切换)
-office.preview.type = ${KK_OFFICE_PREVIEW_TYPE:image}
+office.preview.type = ${KK_OFFICE_PREVIEW_TYPE:pdf}
#是否关闭office预览切换开关,默认为false,可配置为true关闭
office.preview.switch.disabled = ${KK_OFFICE_PREVIEW_SWITCH_DISABLED:false}
diff --git a/server/src/main/java/cn/keking/service/FilePreview.java b/server/src/main/java/cn/keking/service/FilePreview.java
index db1743d8..eeb1c462 100644
--- a/server/src/main/java/cn/keking/service/FilePreview.java
+++ b/server/src/main/java/cn/keking/service/FilePreview.java
@@ -15,7 +15,6 @@ public interface FilePreview {
String COMPRESS_FILE_PREVIEW_PAGE = "compress";
String MEDIA_FILE_PREVIEW_PAGE = "media";
String PICTURE_FILE_PREVIEW_PAGE = "picture";
- String TIFF_FILE_PREVIEW_PAGE = "tiff";
String OFD_FILE_PREVIEW_PAGE = "ofd";
String OFFICE_PICTURE_FILE_PREVIEW_PAGE = "officePicture";
String TXT_FILE_PREVIEW_PAGE = "txt";
diff --git a/server/src/main/java/cn/keking/service/impl/TiffFilePreviewImpl.java b/server/src/main/java/cn/keking/service/impl/TiffFilePreviewImpl.java
index 3ebf02b6..ce0799b2 100644
--- a/server/src/main/java/cn/keking/service/impl/TiffFilePreviewImpl.java
+++ b/server/src/main/java/cn/keking/service/impl/TiffFilePreviewImpl.java
@@ -1,11 +1,20 @@
package cn.keking.service.impl;
+import cn.keking.config.ConfigConstants;
import cn.keking.model.FileAttribute;
+import cn.keking.model.FileType;
+import cn.keking.model.ReturnResponse;
import cn.keking.service.FilePreview;
-import cn.keking.utils.WebUtils;
+import cn.keking.utils.ConvertPicUtil;
+import cn.keking.utils.DownloadUtils;
+import cn.keking.web.filter.BaseUrlFilter;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
-import org.springframework.util.StringUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
/**
* tiff 图片文件处理
@@ -16,9 +25,8 @@ import org.springframework.util.StringUtils;
public class TiffFilePreviewImpl implements FilePreview {
private final PictureFilePreviewImpl pictureFilePreview;
- private static final String INITIALIZE_MEMORY_SIZE = "initializeMemorySize";
- //默认初始化 50MB 内存
- private static final long INITIALIZE_MEMORY_SIZE_VALUE_DEFAULT = 1024L * 1024 * 50;
+
+ private final String fileDir = ConfigConstants.getFileDir();
public TiffFilePreviewImpl(PictureFilePreviewImpl pictureFilePreview) {
this.pictureFilePreview = pictureFilePreview;
@@ -26,13 +34,55 @@ public class TiffFilePreviewImpl implements FilePreview {
@Override
public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
- pictureFilePreview.filePreviewHandle(url,model,fileAttribute);
- String fileSize = WebUtils.getUrlParameterReg(url,INITIALIZE_MEMORY_SIZE);
- if(StringUtils.hasText(fileSize)){
- model.addAttribute(INITIALIZE_MEMORY_SIZE,fileSize);
- }else {
- model.addAttribute(INITIALIZE_MEMORY_SIZE,Long.toString(INITIALIZE_MEMORY_SIZE_VALUE_DEFAULT));
- }
- return TIFF_FILE_PREVIEW_PAGE;
+ String inputFileName = url.substring(url.lastIndexOf("/") + 1);
+ String inputFileExt = inputFileName.substring(inputFileName.lastIndexOf(".") + 1);
+ String uuid = UUID.randomUUID().toString().replaceAll("-","");
+ String tiffFileName = uuid + "." + inputFileExt;
+
+ ReturnResponse response = DownloadUtils.downLoad(fileAttribute, tiffFileName);
+ if (response.isFailure()) {
+ return NOT_SUPPORTED_FILE_PAGE;
+ }
+ String strTiffPath = response.getContent();
+
+ File fileTiff = new File(strTiffPath);
+
+ File fileJpg = ConvertPicUtil.convertPic2Jpg(strTiffPath, fileDir + uuid + ".jpg");
+
+ if(fileJpg.exists()){
+ // 转换后的tif没用了,可以删掉了
+ fileTiff.delete();
+
+ String baseUrl = BaseUrlFilter.getBaseUrl();
+ if("pdf".equalsIgnoreCase(fileAttribute.getOfficePreviewType())){
+ File filePdf = ConvertPicUtil.convertJpg2Pdf(fileDir + uuid + ".jpg", fileDir + uuid + ".pdf");
+ if(filePdf.exists()){
+ // 转换后的jpg没用了,可以删掉了
+ fileJpg.delete();
+
+ String pdfUrl = baseUrl + uuid + ".pdf";
+ model.addAttribute("pdfUrl", pdfUrl);
+
+ return PDF_FILE_PREVIEW_PAGE;
+ }
+ }else{
+ String jpgUrl = baseUrl + uuid + ".jpg";
+
+ fileAttribute.setName(uuid + ".jpg");
+ fileAttribute.setType(FileType.PICTURE);
+ fileAttribute.setSuffix("jpg");
+ fileAttribute.setUrl(jpgUrl);
+
+ List imgUrls = new ArrayList<>();
+ imgUrls.add(jpgUrl);
+
+ model.addAttribute("imgUrls", imgUrls);
+ model.addAttribute("currentUrl", jpgUrl);
+ }
+
+ }
+
+ return PICTURE_FILE_PREVIEW_PAGE;
+
}
}
diff --git a/server/src/main/java/cn/keking/utils/ConvertPicUtil.java b/server/src/main/java/cn/keking/utils/ConvertPicUtil.java
new file mode 100644
index 00000000..c4200106
--- /dev/null
+++ b/server/src/main/java/cn/keking/utils/ConvertPicUtil.java
@@ -0,0 +1,107 @@
+package cn.keking.utils;
+
+
+import com.lowagie.text.Document;
+import com.lowagie.text.Image;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.PdfWriter;
+import com.sun.media.jai.codec.ImageCodec;
+import com.sun.media.jai.codec.ImageEncoder;
+import com.sun.media.jai.codec.JPEGEncodeParam;
+import org.springframework.stereotype.Component;
+
+import javax.media.jai.JAI;
+import javax.media.jai.RenderedOp;
+import java.io.*;
+
+@Component
+public class ConvertPicUtil {
+
+ /**
+ * 图片 转 JPG。
+ * 支持输入格式如下:BMP、GIF、FlashPix、JPEG、PNG、PMN、TIFF、WBMP
+ * @param strInputFile 输入文件的路径和文件名
+ * @param strOutputFile 输出文件的路径和文件名
+ * @return
+ */
+ public static File convertPic2Jpg(String strInputFile, String strOutputFile) {
+ // 读取源图片文件
+ RenderedOp roInput = JAI.create("fileload", strInputFile);
+ try {
+ strOutputFile = strOutputFile.replaceAll("\\\\", "/");
+ File fileJpgPath = new File(strOutputFile.substring(0, strOutputFile.lastIndexOf("/")));
+ if(!fileJpgPath.exists()){
+ fileJpgPath.mkdirs();
+ }
+
+ File fileJpg=new File(strOutputFile);
+ OutputStream ops = new FileOutputStream(fileJpg);
+ // 文件存储输出流
+ JPEGEncodeParam param = new JPEGEncodeParam();
+ ImageEncoder image = ImageCodec.createImageEncoder("JPEG", ops,
+ param); // 指定输出格式
+ // 解析输出流进行输出
+ image.encode(roInput);
+ // 关闭流
+ ops.close();
+
+ return fileJpg;
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * 将Jpg图片转换为Pdf文件
+ * @param strJpgFile 输入的jpg的路径和文件名
+ * @param strPdfFile 输出的pdf的路径和文件名
+ * @return
+ */
+ public static File convertJpg2Pdf(String strJpgFile, String strPdfFile) {
+ Document document = new Document();
+ // 设置文档页边距
+ document.setMargins(0,0,0,0);
+ FileOutputStream fos = null;
+ try {
+ fos = new FileOutputStream(strPdfFile);
+ PdfWriter.getInstance(document, fos);
+ // 打开文档
+ document.open();
+ // 获取图片的宽高
+ Image image = Image.getInstance(strJpgFile);
+ float floatImageHeight=image.getScaledHeight();
+ float floatImageWidth=image.getScaledWidth();
+ // 设置页面宽高与图片一致
+ Rectangle rectangle = new Rectangle(floatImageWidth, floatImageHeight);
+ document.setPageSize(rectangle);
+ // 图片居中
+ image.setAlignment(Image.ALIGN_CENTER);
+ //新建一页添加图片
+ document.newPage();
+ document.add(image);
+ } catch (Exception ioe) {
+ ioe.printStackTrace();
+ return null;
+ } finally {
+ //关闭文档
+ document.close();
+ try {
+ fos.flush();
+ fos.close();
+
+ File filePDF = new File(strPdfFile);
+ return filePDF;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ return null;
+ }
+
+}
+