|
@@ -0,0 +1,344 @@
|
|
|
+package com.huimv.admin.system.util;
|
|
|
+
|
|
|
+//import cn.bt.common.utils.StringUtils;
|
|
|
+//import cn.bt.modules.process.instance.enums.InstanceStatusEnum;
|
|
|
+//import com.itextpdf.text.*;
|
|
|
+//import com.itextpdf.text.pdf.*;
|
|
|
+
|
|
|
+import cn.hutool.core.io.IoUtil;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.BufferedInputStream;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileInputStream;
|
|
|
+import java.io.InputStream;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Author: xp
|
|
|
+ * @Date: 2021/7/14
|
|
|
+ */
|
|
|
+public class PdfUtil {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回PDF流
|
|
|
+ *
|
|
|
+ * @param response 相应设置
|
|
|
+ * @param pathName 水印文件路径和名称
|
|
|
+ * @throws Exception 异常
|
|
|
+ */
|
|
|
+ /*public static void returnPdfStream(HttpServletResponse response, String pathName) throws Exception {
|
|
|
+ response.setContentType("application/pdf");
|
|
|
+
|
|
|
+ File file = new File(pathName);
|
|
|
+ if (file.exists()) {
|
|
|
+ FileInputStream in = new FileInputStream(file);
|
|
|
+ OutputStream out = response.getOutputStream();
|
|
|
+ byte[] b = new byte[1024 * 4];
|
|
|
+ int n;
|
|
|
+ while ((n = in.read(b)) > -1) {
|
|
|
+ out.write(b, 0, n);
|
|
|
+ }
|
|
|
+ out.flush();
|
|
|
+ in.close();
|
|
|
+ out.close();
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ public static void returnPdfStream2(HttpServletResponse response, String pathName, String subsidyNane) throws Exception {
|
|
|
+ InputStream in = null;
|
|
|
+ try {
|
|
|
+ File file = new File(pathName);
|
|
|
+ in = new BufferedInputStream(new FileInputStream(file));
|
|
|
+ String filename = new String((subsidyNane+".pdf").getBytes(), "ISO8859_1");
|
|
|
+ response.setContentType("application/binary;charset=ISO8859_1");
|
|
|
+ response.setHeader("Content-disposition", "attachment; filename=" + filename);// 组装附件名称和格式
|
|
|
+ IoUtil.copy(in, response.getOutputStream());
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("------------ 这里除了问题!!!-----------");
|
|
|
+ System.out.println(e);
|
|
|
+ }finally {
|
|
|
+ if (in != null) {
|
|
|
+ in.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void returnPdfStream3(HttpServletResponse response, String pathName, String subsidyNane) throws Exception {
|
|
|
+ InputStream in = null;
|
|
|
+ try {
|
|
|
+ File file = new File(pathName);
|
|
|
+ in = new BufferedInputStream(new FileInputStream(file));
|
|
|
+ String filename = new String((subsidyNane+".xls").getBytes(), "ISO8859_1");
|
|
|
+ response.setContentType("application/binary;charset=ISO8859_1");
|
|
|
+ response.setHeader("Content-disposition", "attachment; filename=" + filename);// 组装附件名称和格式
|
|
|
+ IoUtil.copy(in, response.getOutputStream());
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("------------ 这里除了问题!!!-----------");
|
|
|
+ System.out.println(e);
|
|
|
+ }finally {
|
|
|
+ if (in != null) {
|
|
|
+ in.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 返回水印图片路径
|
|
|
+ *
|
|
|
+ * @param instanceStatus 流程状态
|
|
|
+ * @return 水印图片路径
|
|
|
+ */
|
|
|
+// public static String returnWatermarkPath(int instanceStatus) {
|
|
|
+// String watermarkPath = "ioffice-api/src/main/resources/static/watermark";
|
|
|
+// if (InstanceStatusEnum.E_0.getCode().equals(instanceStatus)) {
|
|
|
+// watermarkPath = watermarkPath + "/已作废.png";
|
|
|
+//
|
|
|
+// } else if (InstanceStatusEnum.E_2.getCode().equals(instanceStatus)) {
|
|
|
+// watermarkPath = watermarkPath + "/审批通过.png";
|
|
|
+//
|
|
|
+// } else {
|
|
|
+// watermarkPath = watermarkPath + "/审批中.png";
|
|
|
+// }
|
|
|
+// return watermarkPath;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
|
|
|
+// *
|
|
|
+// * @param pdfPath 保存路径
|
|
|
+// * @param document 文档
|
|
|
+// * @param pdfPathName 文件保存路径和名称
|
|
|
+// * @return 书写器(Writer)
|
|
|
+// * @throws Exception
|
|
|
+// */
|
|
|
+// public static PdfWriter createPdfWriter(String pdfPath, Document document, String pdfPathName) throws Exception {
|
|
|
+//
|
|
|
+// //判断文件夹是否存在
|
|
|
+// File file = new File(pdfPath);
|
|
|
+// if (!file.exists()) {
|
|
|
+// file.mkdir();
|
|
|
+// }
|
|
|
+// file = new File(pdfPathName);
|
|
|
+//
|
|
|
+// PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
|
|
|
+// writer.setViewerPreferences(PdfWriter.PageModeUseThumbs);
|
|
|
+//
|
|
|
+// return writer;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 设置第一标题内容
|
|
|
+// *
|
|
|
+// * @param title 第一标题
|
|
|
+// * @param document 文档
|
|
|
+// * @throws Exception 异常
|
|
|
+// */
|
|
|
+// public static void setPdfFirstTitle(String title, Document document) throws Exception {
|
|
|
+// Paragraph paragraph = new Paragraph(title, getPdfChineseFont(0));
|
|
|
+// paragraph.setAlignment(Element.ALIGN_CENTER);
|
|
|
+// paragraph.setSpacingAfter(2);
|
|
|
+// document.add(paragraph);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 设置第二标题内容
|
|
|
+// *
|
|
|
+// * @param title 第二标题
|
|
|
+// * @param document 文档
|
|
|
+// * @param alignment 对齐方式
|
|
|
+// * @param firstLineIndent 第一行缩进
|
|
|
+// * @param spacingAfter 之后间隔
|
|
|
+// * @throws Exception
|
|
|
+// */
|
|
|
+// public static void setPdfSecondTitle(String title, Document document, int alignment, int firstLineIndent, int spacingAfter) throws Exception {
|
|
|
+// Paragraph lsh = new Paragraph(title, getPdfChineseFont(1));
|
|
|
+// lsh.setAlignment(alignment);
|
|
|
+// lsh.setFirstLineIndent(firstLineIndent);
|
|
|
+// lsh.setSpacingAfter(spacingAfter);
|
|
|
+// document.add(lsh);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 设置表格内容 并将表格加入文档中
|
|
|
+// *
|
|
|
+// * @param dates 数据
|
|
|
+// * @param document 文档
|
|
|
+// * @param table 表格
|
|
|
+// * @throws Exception 异常
|
|
|
+// */
|
|
|
+// public static void setPdfTableContent(Object[][] dates, Document document, PdfPTable table) throws Exception {
|
|
|
+// for (int i = 0; i < dates.length; i++) {
|
|
|
+// for (int j = 0; j < dates[i].length; j++) {
|
|
|
+// //表格的单元格
|
|
|
+// PdfPCell pdfCell = new PdfPCell();
|
|
|
+// //设置表格行高
|
|
|
+// if (i > 0 && i < 3) {
|
|
|
+// pdfCell.setMinimumHeight(50);
|
|
|
+// } else {
|
|
|
+// pdfCell.setMinimumHeight(25);
|
|
|
+// }
|
|
|
+// Paragraph paragraph = new Paragraph(dates[i][j] + "", getPdfChineseFont(1));
|
|
|
+// pdfCell.setPhrase(paragraph);
|
|
|
+//
|
|
|
+// setCellStyle(pdfCell);
|
|
|
+// table.addCell(pdfCell);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// document.add(table);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 设置水印
|
|
|
+// *
|
|
|
+// * @param inputFile 要这设置水印的文件路径
|
|
|
+// * @param imageFile 水印图片路径
|
|
|
+// * @param tag 标记
|
|
|
+// * @return 生成水印文件的路径
|
|
|
+// */
|
|
|
+// public static String imageWaterMark(String inputFile, String imageFile, String tag) throws Exception {
|
|
|
+// String[] spe = separatePath(inputFile);
|
|
|
+// String outputFile = spe[0] + tag + "." + spe[1];
|
|
|
+//
|
|
|
+// PdfReader reader = new PdfReader(inputFile);
|
|
|
+// PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
|
|
|
+//
|
|
|
+// int total = reader.getNumberOfPages() + 1;
|
|
|
+//
|
|
|
+// Image image = Image.getInstance(imageFile);
|
|
|
+// //坐标
|
|
|
+// image.setAbsolutePosition(389, 730);
|
|
|
+// //自定义大小
|
|
|
+// image.scaleAbsolute(80, 80);
|
|
|
+// //旋转 弧度
|
|
|
+// image.setRotation(-55);
|
|
|
+//
|
|
|
+// //旋转 角度
|
|
|
+// image.setRotationDegrees(0);
|
|
|
+// //依照比例缩放
|
|
|
+// image.scalePercent(50);
|
|
|
+//
|
|
|
+// PdfGState gs = new PdfGState();
|
|
|
+// // 设置透明度为0.2
|
|
|
+// gs.setFillOpacity(0.2f);
|
|
|
+//
|
|
|
+//
|
|
|
+// PdfContentByte under;
|
|
|
+// //给每一页加水印
|
|
|
+// for (int i = 1; i < total; i++) {
|
|
|
+// under = stamper.getUnderContent(i);
|
|
|
+// under.beginText();
|
|
|
+// // 添加水印图片
|
|
|
+// under.addImage(image);
|
|
|
+// under.setGState(gs);
|
|
|
+// }
|
|
|
+// stamper.close();
|
|
|
+// reader.close();
|
|
|
+// return outputFile;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 拆分原文件路径
|
|
|
+// *
|
|
|
+// * @param path 原文件路径
|
|
|
+// * @return 拆分原路径的数组
|
|
|
+// */
|
|
|
+// public static String[] separatePath(String path) {
|
|
|
+// if (StringUtils.isBlank(path)) {
|
|
|
+// return null;
|
|
|
+// }
|
|
|
+// String[] sep = path.split("\\.");
|
|
|
+// return new String[]{sep[0], sep[1]};
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 设置表格单元格样式
|
|
|
+// *
|
|
|
+// * @param pdfCell 单元格对象
|
|
|
+// */
|
|
|
+// public static void setCellStyle(PdfPCell pdfCell) {
|
|
|
+// pdfCell.setHorizontalAlignment(Element.ALIGN_CENTER);
|
|
|
+// pdfCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
|
|
|
+// pdfCell.setBackgroundColor(new BaseColor(0xdd7e6b));
|
|
|
+// pdfCell.setBorderWidthTop(0.1f);
|
|
|
+// pdfCell.setBorderWidthBottom(0.1f);
|
|
|
+// pdfCell.setBorderWidthLeft(0.1f);
|
|
|
+// pdfCell.setBorderWidthRight(0.1f);
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 设置pdf字体及大小
|
|
|
+// *
|
|
|
+// * @param type 标题或者内容 0-内容 1-标题
|
|
|
+// * @return 字体
|
|
|
+// * @throws Exception 异常
|
|
|
+// */
|
|
|
+// public static Font getPdfChineseFont(int type) throws Exception {
|
|
|
+// // 使用系统字体
|
|
|
+// BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
|
|
|
+// Font font;
|
|
|
+// if (type == 1) {
|
|
|
+// font = new Font(bfChinese);
|
|
|
+// } else {
|
|
|
+// font = new Font(bfChinese, 18, Font.BOLD);
|
|
|
+// }
|
|
|
+//
|
|
|
+// return font;
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 删除文件夹
|
|
|
+// *
|
|
|
+// * @param folderPath 文件路基
|
|
|
+// */
|
|
|
+// public static void delFolder(String folderPath) {
|
|
|
+// // 删除完里面所有内容
|
|
|
+// delAllFile(folderPath);
|
|
|
+// String filePath = folderPath;
|
|
|
+// filePath = filePath.toString();
|
|
|
+// java.io.File myFilePath = new java.io.File(filePath);
|
|
|
+// // 删除空文件夹
|
|
|
+// myFilePath.delete();
|
|
|
+// }
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 删除指定文件夹下所有文件
|
|
|
+// *
|
|
|
+// * @param path 文件路基
|
|
|
+// * @return 是否成功
|
|
|
+// */
|
|
|
+// public static boolean delAllFile(String path) {
|
|
|
+// boolean flag = false;
|
|
|
+// File file = new File(path);
|
|
|
+// String[] tempList = file.list();
|
|
|
+// File temp = null;
|
|
|
+// for (int i = 0; i < tempList.length; i++) {
|
|
|
+// if (path.endsWith(File.separator)) {
|
|
|
+// temp = new File(path + tempList[i]);
|
|
|
+// } else {
|
|
|
+// temp = new File(path + File.separator + tempList[i]);
|
|
|
+// }
|
|
|
+// if (temp.isFile()) {
|
|
|
+// temp.delete();
|
|
|
+// }
|
|
|
+// if (temp.isDirectory()) {
|
|
|
+// // 先删除文件夹里面的文件
|
|
|
+// delAllFile(path + "/" + tempList[i]);
|
|
|
+// // 再删除空文件夹
|
|
|
+// delFolder(path + "/" + tempList[i]);
|
|
|
+// flag = true;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// return flag;
|
|
|
+// }
|
|
|
+// public static boolean delAllFile(String path) {
|
|
|
+// boolean flag = false;
|
|
|
+// File file = new File(path);
|
|
|
+// File temp = null;
|
|
|
+//
|
|
|
+// if (temp.isFile()) {
|
|
|
+// temp.delete();
|
|
|
+// }
|
|
|
+// return flag;
|
|
|
+// }
|
|
|
+}
|
|
|
+
|