From 33277bc45763d074a205151eddc32da70bc7d520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=9B=84?= Date: Mon, 3 Apr 2023 07:09:30 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DTIF=E8=BD=AC=E6=8D=A2pdf?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20=E4=BF=AE=E5=A4=8DTIF=E8=BD=AC=E6=8D=A2pdf?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 高雄 --- .../java/cn/keking/utils/ConvertPicUtil.java | 154 ++++++------------ 1 file changed, 46 insertions(+), 108 deletions(-) diff --git a/server/src/main/java/cn/keking/utils/ConvertPicUtil.java b/server/src/main/java/cn/keking/utils/ConvertPicUtil.java index 701c42f4..9b5b17cd 100644 --- a/server/src/main/java/cn/keking/utils/ConvertPicUtil.java +++ b/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 { - //关闭文档 + rafa = new RandomAccessFileOrArray(new FileChannelRandomAccessSource(new RandomAccessFile(strJpgFile, "r").getChannel())); + int pages = TiffImage.getNumberOfPages(rafa); + Image image; + for (int i = 1; i <= pages; i++) { + try { + image = TiffImage.getTiffImage(rafa, i); + image.scaleToFit(FIT_WIDTH, FIT_HEIGHT); + document.add(image); + } catch (Exception e) { + document.close(); + rafa.close(); + e.printStackTrace(); + } + } + document.close(); + rafa.close(); + return true; + } + catch (Exception e) + { + System.out.println("错误:"+ e.getMessage()); + } + finally { document.close(); try { - assert fos != null; - fos.flush(); - fos.close(); + rafa.close(); } catch (IOException e) { e.printStackTrace(); } - } + return false; } - - - /** - * 将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); - Image image; - File filePDF; - - if (intPages == 1) { - String strJpg = strTifFile.substring(0, strTifFile.lastIndexOf(".")) + ".jpg"; - File fileJpg = new File(strJpg); - List listPic2Jpg = convertTif2Jpg(strTifFile, strJpg); - - if (listPic2Jpg != null && fileJpg.exists()) { - convertJpg2Pdf(strJpg, strPdfFile); - } - - } else { - for (int i = 1; i <= intPages; i++) { - image = TiffImage.getTiffImage(rafa, i); - // 设置页面宽高与图片一致 - Rectangle pageSize = new Rectangle(image.getScaledWidth(), image.getScaledHeight()); - document.setPageSize(pageSize); - // 图片居中 - image.setAlignment(Image.ALIGN_CENTER); - //新建一页添加图片 - document.newPage(); - document.add(image); - } - - document.close(); - } - - rafa.close(); - - filePDF = new File(strPdfFile); - - return filePDF; - } catch (Exception e) { - logger.error(e.getMessage(), e); - } - return null; - } - } \ No newline at end of file