瀏覽代碼

修复TIF转换pdf问题
修复TIF转换pdf问题

Signed-off-by: 高雄 <admin@cxcp.com>

高雄 2 年之前
父節點
當前提交
33277bc457
共有 1 個文件被更改,包括 45 次插入107 次删除
  1. 45 107
      server/src/main/java/cn/keking/utils/ConvertPicUtil.java

+ 45 - 107
server/src/main/java/cn/keking/utils/ConvertPicUtil.java

@@ -1,16 +1,17 @@
 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.lowagie.text.pdf.RandomAccessFileOrArray;
-import com.lowagie.text.pdf.codec.TiffImage;
+import cn.keking.config.ConfigConstants;
+
 import com.sun.media.jai.codec.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
+import com.itextpdf.text.Document;
+import com.itextpdf.text.Image;
+import com.itextpdf.text.io.FileChannelRandomAccessSource;
+import com.itextpdf.text.pdf.PdfWriter;
+import com.itextpdf.text.pdf.RandomAccessFileOrArray;
+import com.itextpdf.text.pdf.codec.TiffImage;
 import javax.media.jai.JAI;
 import javax.media.jai.RenderedOp;
 import java.awt.image.RenderedImage;
@@ -18,13 +19,14 @@ import java.awt.image.renderable.ParameterBlock;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.RandomAccessFile;
 import java.util.ArrayList;
 import java.util.List;
 
 public class ConvertPicUtil {
 
     private final static Logger logger = LoggerFactory.getLogger(ConvertPicUtil.class);
-
+    private final static String fileDir = ConfigConstants.getFileDir();
     /**
      * Tif 转  JPG。
      *
@@ -42,25 +44,21 @@ public class ConvertPicUtil {
             logger.info("找不到文件【" + strInputFile + "】");
             return null;
         }
-
         strInputFile = strInputFile.replaceAll("\\\\", "/");
         strOutputFile = strOutputFile.replaceAll("\\\\", "/");
-
         FileSeekableStream fileSeekStream = null;
         try {
             JPEGEncodeParam jpegEncodeParam = new JPEGEncodeParam();
-
             TIFFEncodeParam tiffEncodeParam = new TIFFEncodeParam();
             tiffEncodeParam.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);
             tiffEncodeParam.setLittleEndian(false);
-
-            String strFilePrefix = strInputFile.substring(strInputFile.lastIndexOf("/") + 1, strInputFile.lastIndexOf("."));
-
+            String jpgname = strInputFile.replace(fileDir.replace("\\","/"), "");
+            int index = jpgname.lastIndexOf(".");
+            String strFilePrefix = jpgname.substring(0, index);
             fileSeekStream = new FileSeekableStream(strInputFile);
             ImageDecoder imageDecoder = ImageCodec.createImageDecoder("TIFF", fileSeekStream, null);
             int intTifCount = imageDecoder.getNumPages();
             logger.info("该tif文件共有【" + intTifCount + "】页");
-
             String strJpgPath;
             String strJpgUrl;
             if (intTifCount == 1) {
@@ -87,9 +85,7 @@ public class ConvertPicUtil {
                     strJpg = strJpgPath + "/" + i + ".jpg";
                     strJpgUrl = strFilePrefix + "/" + i + ".jpg";
                 }
-
                 File fileJpg = new File(strJpg);
-
                 // 如果文件不存在,则生成
                 if (!fileJpg.exists()) {
                     RenderedImage renderedImage = imageDecoder.decodeAsRenderedImage(i);
@@ -98,13 +94,11 @@ public class ConvertPicUtil {
                     pb.add(fileJpg.toString());
                     pb.add("JPEG");
                     pb.add(jpegEncodeParam);
-
                     RenderedOp renderedOp = JAI.create("filestore", pb);
                     renderedOp.dispose();
-
                     logger.info("每页分别保存至: " + fileJpg.getCanonicalPath());
                 } else {
-                    logger.info("JPG文件已存在: " + fileJpg.getCanonicalPath());
+                  //  logger.info("JPG文件已存在: " + fileJpg.getCanonicalPath());
                 }
 
                 listImageFiles.add(strJpgUrl);
@@ -131,101 +125,45 @@ public class ConvertPicUtil {
      * @param strJpgFile 输入的jpg的路径和文件名
      * @param strPdfFile 输出的pdf的路径和文件名
      */
-    public static void convertJpg2Pdf(String strJpgFile, String strPdfFile) {
-        Document document = new Document();
-        // 设置文档页边距
-        document.setMargins(0, 0, 0, 0);
-
-        FileOutputStream fos = null;
+    private static final int FIT_WIDTH = 500;
+    private static final int FIT_HEIGHT = 900;
+    public static boolean convertJpg2Pdf(String strJpgFile, String strPdfFile) {
+        Document document= null;
+        RandomAccessFileOrArray rafa = null;
         try {
-            fos = new FileOutputStream(strPdfFile);
-            PdfWriter.getInstance(document, fos);
-            // 打开文档
+            document = new Document();
+            PdfWriter.getInstance(document,  new FileOutputStream(strPdfFile));
             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();
-        } finally {
-            //关闭文档
-            document.close();
-            try {
-                assert fos != null;
-                fos.flush();
-                fos.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-
-        }
-    }
-
-
-    /**
-     * 将Tif图片转换为Pdf文件(支持多页Tif)
-     *
-     * @param strTifFile 输入的tif的路径和文件名
-     * @param strPdfFile 输出的pdf的路径和文件名
-     * @return File
-     */
-    public static File convertTif2Pdf(String strTifFile, String strPdfFile) {
-        try {
-            RandomAccessFileOrArray rafa = new RandomAccessFileOrArray(strTifFile);
-
-            Document document = new Document();
-            // 设置文档页边距
-            document.setMargins(0, 0, 0, 0);
-
-            PdfWriter.getInstance(document, new FileOutputStream(strPdfFile));
-            document.open();
-            int intPages = TiffImage.getNumberOfPages(rafa);
+            rafa = new RandomAccessFileOrArray(new FileChannelRandomAccessSource(new RandomAccessFile(strJpgFile, "r").getChannel()));
+            int pages = TiffImage.getNumberOfPages(rafa);
             Image image;
-            File filePDF;
-
-            if (intPages == 1) {
-                String strJpg = strTifFile.substring(0, strTifFile.lastIndexOf(".")) + ".jpg";
-                File fileJpg = new File(strJpg);
-                List<String> listPic2Jpg = convertTif2Jpg(strTifFile, strJpg);
-
-                if (listPic2Jpg != null && fileJpg.exists()) {
-                    convertJpg2Pdf(strJpg, strPdfFile);
-                }
-
-            } else {
-                for (int i = 1; i <= intPages; i++) {
+            for (int i = 1; i <= pages; i++) {
+                try {
                     image = TiffImage.getTiffImage(rafa, i);
-                    // 设置页面宽高与图片一致
-                    Rectangle pageSize = new Rectangle(image.getScaledWidth(), image.getScaledHeight());
-                    document.setPageSize(pageSize);
-                    // 图片居中
-                    image.setAlignment(Image.ALIGN_CENTER);
-                    //新建一页添加图片
-                    document.newPage();
+                    image.scaleToFit(FIT_WIDTH, FIT_HEIGHT);
                     document.add(image);
+                } catch (Exception e) {
+                    document.close();
+                    rafa.close();
+                    e.printStackTrace();
                 }
-
-                document.close();
             }
-
+            document.close();
             rafa.close();
-
-            filePDF = new File(strPdfFile);
-
-            return filePDF;
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
+            return true;
+        }
+        catch (Exception e)
+        {
+           System.out.println("错误:"+ e.getMessage());
         }
-        return null;
+        finally {
+            document.close();
+            try {
+                rafa.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return false;
     }
-
 }