Commit d5f7ebc4 by songxiang

错题本2.75期相关代码

parent 56de0445
/*
* 武汉理工数字传播工程有限公司源代码,版权归武汉理工数字传播工程有限公司所有.
* 项目名称 : pcloud-common
* 创建日期 : 2017年3月3日
* 修改历史 :
* 1. [2017年3月3日]创建文件 by xnxqs
*/
package com.pcloud.common.constant;
/**
*
*
* @Author: songx
* @Date: 2019/7/29,14:11
*/
public class FilePathConstant {
/**
* 视频剪切文件夹
*/
public final static String CUT = getFolder("cut");
/**
* 下载文件夹
*/
public final static String DOWNLOAD = getFolder("download");
/**
* 生成图片地址
*/
public final static String IMAGE = getFolder("image");
/**
* 生成带水印文件夹
*/
public final static String IMAGE_WATERMARK = getFolder("image/watermark");
/**
* 生成音频文件夹
*/
public final static String AUDIO = getFolder("audio");
/**
* 生成PDF文件夹
*/
public final static String PDF = getFolder("pdf");
/**
* 生成WORD文件夹
*/
public final static String WORD = getFolder("word");
/**
* 生成TEXT文件夹
*/
public final static String TEXT = getFolder("text");
/**
* 组装文件夹路径
*
* @param folderName
* @return
*/
private static String getFolder(String folderName) {
return OSConstant.USERDIR + OSConstant.SEPARATOR + "files" + folderName + OSConstant.SEPARATOR;
}
}
package com.pcloud.common.dto;
import com.pcloud.common.dto.BaseDto;
import java.math.BigDecimal;
/**
* @Describe: TODO
* @Author: zhangdongwei
* @Date: Create on 11:35 2019/7/24 0024
*/
public class StoreFlowInfoDto extends BaseDto {
/**
* 标识(appId/productId/bookGroupId)
*/
private Long originId;
/**
* 类型(APP/PRODUCT/BOOK_GROUP)
*/
private String originType;
/**
*具体类型
*/
private String typeCode;
/**
* 标题
*/
private String title;
/**
* 封面图片
*/
private String coverImg;
/**
* 价格
*/
private BigDecimal price;
/**
* 开始时间(MM-dd)
*/
private String startDate;
/**
* 结束时间(MM-dd)
*/
private String endDate;
/**
* 数量(应用、作品下的资源数量, 社群书的群数量,等)
*/
private Integer resourceNum;
/**
* 数量(资源的item数量,群的成员数量,等)
*/
private Integer resourceItemNum;
public Long getOriginId() {
return originId;
}
public void setOriginId(Long originId) {
this.originId = originId;
}
public String getOriginType() {
return originType;
}
public void setOriginType(String originType) {
this.originType = originType;
}
public String getTypeCode() {
return typeCode;
}
public void setTypeCode(String typeCode) {
this.typeCode = typeCode;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCoverImg() {
return coverImg;
}
public void setCoverImg(String coverImg) {
this.coverImg = coverImg;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public Integer getResourceNum() {
return resourceNum;
}
public void setResourceNum(Integer resourceNum) {
this.resourceNum = resourceNum;
}
public Integer getResourceItemNum() {
return resourceItemNum;
}
public void setResourceItemNum(Integer resourceItemNum) {
this.resourceItemNum = resourceItemNum;
}
@Override
public String toString() {
return "StoreFlowInfoDto{" +
"originId=" + originId +
", originType='" + originType + '\'' +
", typeCode='" + typeCode + '\'' +
", title='" + title + '\'' +
", coverImg='" + coverImg + '\'' +
", price=" + price +
", startDate='" + startDate + '\'' +
", endDate='" + endDate + '\'' +
", resourceNum=" + resourceNum +
", resourceItemNum=" + resourceItemNum +
"} " + super.toString();
}
}
......@@ -29,7 +29,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pcloud.common.constant.AliyunConstant;
import com.pcloud.common.constant.FilePathConst;
import com.pcloud.common.constant.FilePathConstant;
import com.pcloud.common.constant.OSConstant;
import com.pcloud.common.entity.UploadResultInfo;
import com.pcloud.common.exceptions.BizException;
......@@ -215,7 +215,7 @@ public class FileUtils {
/**
* 传入文件夹路径,该方法能够实现创建整个路径
*
* @param path
* @param filePath
* 文件夹路径,不包含文件名称及后缀名
*/
public static boolean isDir(String filePath) {
......@@ -882,7 +882,7 @@ public class FileUtils {
String fileType = getFileType(url);
String localFilePath = url;
if (url.startsWith("http")) {
localFilePath = FilePathConst.TEXT_PATH + UUIDUitl.taskName() + "." + fileType;
localFilePath = FilePathConstant.TEXT + UUIDUitl.taskName() + "." + fileType;
downloadFileFromUrl(url, localFilePath);
}
try {
......@@ -919,7 +919,7 @@ public class FileUtils {
return null;
}
// 下载文件
String downloadPath = FilePathConst.DOWNLOAD_PATH + UUIDUitl.generateString(32) + "." + fileType;
String downloadPath = FilePathConstant.DOWNLOAD + UUIDUitl.generateString(32) + "." + fileType;
FileUtils.downloadFileFromUrl(url, downloadPath);
// 剪切文件
String cutPath = clipByPercent(new File(downloadPath), percent);
......@@ -969,7 +969,7 @@ public class FileUtils {
throw new FileException(FileException.FILE_READ_FAILURE, "剪切的文件必须大于1KB");
}
// 输出文件路径
String outFilePath = FilePathConst.CUT_PATH + UUIDUitl.generateString(12) + "_" + inputFile.getName();
String outFilePath = FilePathConstant.CUT + UUIDUitl.generateString(12) + "_" + inputFile.getName();
creatFiles(outFilePath);
// 剪切长度
cutLength = cutLength > inputFile.length() ? inputFile.length() : cutLength;
......
......@@ -11,16 +11,12 @@ import java.math.BigDecimal;
import javax.imageio.ImageIO;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.itextpdf.text.Image;
import com.pcloud.common.constant.AliyunConstant;
import com.pcloud.common.constant.FilePathConst;
import com.pcloud.common.constant.ImageConstant;
import com.pcloud.common.entity.UploadResultInfo;
import com.pcloud.common.enums.ImageEnum;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.FileException;
......@@ -738,37 +734,32 @@ public class ImageUtils {
* @param fileUrl
* @return
*/
// public static UploadResultInfo transcodeToWebp(String fileUrl, int quality) {
// LOGGER.info("【IMAGE API】image transcode to webp.<START>.[fileUrl]=" + fileUrl
// + ",[quality]=" + quality);
// String fileNameAll = FileUtils.getFileNameAll(fileUrl);
// String localFilePath = FilePathConst.DOWNLOAD_PATH + fileNameAll;
// FileUtils.downloadFileFromUrl(fileUrl, localFilePath);
// String outputFilePath = FilePathConst.IMAGE_PATH + "webp/" + fileNameAll +
// ".webp";
// FileUtils.creatFiles(outputFilePath);
// UploadResultInfo uploadResultInfo = null;
// try {
// String os = System.getProperty("os.name");
// if (os.toLowerCase().startsWith("win")) {
// executeCwebp4Win(localFilePath, outputFilePath, quality);
// } else {
// executeCwebp4Linux(localFilePath, outputFilePath, quality);
// }
// uploadResultInfo = OssUtils.uploadLocalFile4Child(outputFilePath, fileUrl);
// } catch (Exception e) {
// LOGGER.error("An error happend when convert to webp. Img is: " +
// e.getMessage(), e);
// throw new FileException(FileException.FILE_CONVERT_FAIL, "transcode to webp
// is fail!");
// } finally {
// FileUtils.deleteFile(localFilePath);
// FileUtils.deleteFile(outputFilePath);
// }
// LOGGER.info("【IMAGE API】image transcode to webp.<START>.[uploadResultInfo]="
// + uploadResultInfo);
// return uploadResultInfo;
// }
// public static UploadResultInfo transcodeToWebp(String fileUrl, int quality) {
// LOGGER.info("【IMAGE API】image transcode to webp.<START>.[fileUrl]=" + fileUrl + ",[quality]=" + quality);
// String fileNameAll = FileUtils.getFileNameAll(fileUrl);
// String localFilePath = FilePathConstant.DOWNLOAD_PATH + fileNameAll;
// FileUtils.downloadFileFromUrl(fileUrl, localFilePath);
// String outputFilePath = FilePathConstant.IMAGE_PATH + "webp/" + fileNameAll + ".webp";
// FileUtils.creatFiles(outputFilePath);
// UploadResultInfo uploadResultInfo = null;
// try {
// String os = System.getProperty("os.name");
// if (os.toLowerCase().startsWith("win")) {
// executeCwebp4Win(localFilePath, outputFilePath, quality);
// } else {
// executeCwebp4Linux(localFilePath, outputFilePath, quality);
// }
// uploadResultInfo = OssUtils.uploadLocalFile4Child(outputFilePath, fileUrl);
// } catch (Exception e) {
// LOGGER.error("An error happend when convert to webp. Img is: " + e.getMessage(), e);
// throw new FileException(FileException.FILE_CONVERT_FAIL, "transcode to webp is fail!");
// } finally {
// FileUtils.deleteFile(localFilePath);
// FileUtils.deleteFile(outputFilePath);
// }
// LOGGER.info("【IMAGE API】image transcode to webp.<START>.[uploadResultInfo]=" + uploadResultInfo);
// return uploadResultInfo;
// }
/**
* execute cwebp command:cwebp [options] input_file -o output_file.webp
......@@ -778,15 +769,13 @@ public class ImageUtils {
* @param quality
* @throws Exception
*/
// private static void executeCwebp4Win(String inputFilePath, String
// outputFilePath, int quality) throws Exception {
// Process process = new ProcessBuilder("cwebp", "-q", (quality == 0 ? 80 :
// quality) + "", inputFilePath, "-o",
// outputFilePath).redirectErrorStream(true).start();
// if (0 != process.waitFor()) {
// throw new Exception("process wait for fail!");
// }
// }
// private static void executeCwebp4Win(String inputFilePath, String outputFilePath, int quality) throws Exception {
// Process process = new ProcessBuilder("cwebp", "-q", (quality == 0 ? 80 : quality) + "", inputFilePath, "-o",
// outputFilePath).redirectErrorStream(true).start();
// if (0 != process.waitFor()) {
// throw new Exception("process wait for fail!");
// }
// }
/**
* execute cwebp command:cwebp [options] input_file -o output_file.webp
......@@ -796,47 +785,12 @@ public class ImageUtils {
* @param quality
* @throws Exception
*/
// private static void executeCwebp4Linux(String inputFilePath, String
// outputFilePath, int quality) throws Exception {
// Process process = new ProcessBuilder("/usr/local/bin/cwebp", "-q", (quality
// == 0 ? 80 : quality) + "",
// inputFilePath, "-o", outputFilePath).redirectErrorStream(true).start();
// if (0 != process.waitFor()) {
// throw new Exception("process wait for fail!");
// }
// }
/**
* 上传的图片转换成webpO
*
* @param localFilePath
* 源文件的本地路径
* @param httpUrl
* 源文件上传后的路径,主要用于子文件上传时对应http文件路径
*/
public static UploadResultInfo toWebp(String fileUrl) {
// String fileNameAll = FileUtils.getFileNameAll(fileUrl);
// String localFilePath = FilePathConst.DOWNLOAD_PATH + fileNameAll;
// FileUtils.downloadFileFromUrl(fileUrl, localFilePath);
// String tragetPath = null;
// try {
// tragetPath = com.dcg.util.ImageUtils.transcodeToWebp(localFilePath, 80);
// } catch (Exception e) {
// LOGGER.error("【IMAGE】图片转换成webp失败:" + e.getMessage(), e);
// return null;
// }
// if (StringUtils.isEmpty(tragetPath)) {
// return null;
// private static void executeCwebp4Linux(String inputFilePath, String outputFilePath, int quality) throws Exception {
// Process process = new ProcessBuilder("/usr/local/bin/cwebp", "-q", (quality == 0 ? 80 : quality) + "",
// inputFilePath, "-o", outputFilePath).redirectErrorStream(true).start();
// if (0 != process.waitFor()) {
// throw new Exception("process wait for fail!");
// }
// try {
// return OssUtils.uploadLocalFile4Child(tragetPath, fileUrl);
// } catch (Exception e) {
// LOGGER.error("【IMAGE】图片转换成webp,上传失败:" + e.getMessage(), e);
// } finally {
// FileUtils.deleteFile(localFilePath);
// FileUtils.deleteFile(tragetPath);
// }
return null;
}
// }
}
package com.pcloud.common.utils;/**
* Created by ${user} on ${date}
*/
import com.alibaba.fastjson.JSON;
import com.pcloud.common.entity.UploadResultInfo;
import com.pcloud.common.enums.ImageTypeEnum;
import com.pcloud.common.utils.aliyun.OssUtils;
import com.pcloud.common.utils.httpclient.SimpleHttpUtils;
import com.pcloud.common.utils.json.JSONUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author TianChao
* @date 2018/10/13 15:02
*/
public class PictureUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(PictureUtil.class);
private static Color defaultColor = new Color(252, 252, 252);
private static Color borderColor = new Color(221, 221, 221);
private static String playPic = "https://file.5rs.me/oss/uploadfe/png/3c687bffac4d885ecfff8517d6c3f9c2.png";
private static String defaultBackgroundPic = "https://oss.5rs.me/oss/uploadfe/png/3003b8978e85052f96ababdf7d46f70a.png";
public static Color getImagePixel(BufferedImage bi) {
if(bi.getWidth()*bi.getHeight()>500000) {
BufferedImage pic1 = new BufferedImage(157, 224, BufferedImage.SCALE_SMOOTH);
Graphics graphics = pic1.getGraphics();
graphics.drawImage(bi.getScaledInstance(157,224,Image.SCALE_SMOOTH),0,0,null);
graphics.dispose();
bi = pic1;
}
int width = bi.getWidth();
int height = bi.getHeight();
int sum=width*height;
int minx = bi.getMinX();
int miny = bi.getMinY();
int R = 0;
int G = 0;
int B = 0;
List<String> list=new ArrayList<>();
for (int i = minx; i < width; i++) {
for (int j = miny; j < height; j++) {
int pixel = bi.getRGB(i, j);
if(pixel==Color.white.getRGB() || pixel==Color.black.getRGB()){
continue;
}
R =(pixel & 0xff0000) >> 16;
G =(pixel & 0xff00) >> 8;
B =(pixel & 0xff);
if((R>230&&G>230&&B>230) ||(R<30&&G<30&&B<30)){
continue;
}
list.add(R+"-"+G+"-"+B);
}
}
// R = R/sum;
// G = G/sum;
// B = B/sum;
// return new Color(R,G,B);
return getMaxCount(list);
}
public static Color getMaxCount(List<String> s) {
List<String> list = s;
Map<String, Integer> map = new HashMap<String, Integer>();
for (String c : list) {
Integer l = map.get(c);
if (l == null)
l = 1;
else
l++;
map.put(c, l);
}
String max = null;
long num = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer temp = entry.getValue();
if (max == null || temp > num) {
max = key;
num = temp;
}
}
String str[] = max.split("\\-");
if (str.length == 3) {
return new Color(Integer.parseInt(str[0]), Integer.parseInt(str[1]),
Integer.parseInt(str[2]));
}
return Color.gray;
}
public static String getB16(int R,int G,int B){
String[] h=new String[256];
h[0]="00";h[1]="01";h[2]="02";h[3]="03";h[4]="04";h[5]="05";
h[6]="06";h[7]="07";h[8]="08";h[9]="09";h[10]="0A";h[11]="0B";
h[12]="0C";h[13]="0D";h[14]="0E";h[15]="0F";h[16]="10";h[17]="11";
h[18]="12";h[19]="13";h[20]="14";h[21]="15";h[22]="16";h[23]="17";
h[24]="18";h[25]="19";h[26]="1A";h[27]="1B";h[28]="1C";h[29]="1D";
h[30]="1E";h[31]="1F";h[32]="20";h[33]="21";h[34]="22";h[35]="23";
h[36]="24";h[37]="25";h[38]="26";h[39]="27";h[40]="28";h[41]="29";
h[42]="2A";h[43]="2B";h[44]="2C";h[45]="2D";h[46]="2E";h[47]="2F";
h[48]="30";h[49]="31";h[50]="32";h[51]="33";h[52]="34";h[53]="35";
h[54]="36";h[55]="37";h[56]="38";h[57]="39";h[58]="3A";h[59]="3B";
h[60]="3C";h[61]="3D";h[62]="3E";h[63]="3F";h[64]="40";h[65]="41";
h[66]="42";h[67]="43";h[68]="44";h[69]="45";h[70]="46";h[71]="47";
h[72]="48";h[73]="49";h[74]="4A";h[75]="4B";h[76]="4C";h[77]="4D";
h[78]="4E";h[79]="4F";h[80]="50";h[81]="51";h[82]="52";h[83]="53";
h[84]="54";h[85]="55";h[86]="56";h[87]="57";h[88]="58";h[89]="59";
h[90]="5A";h[91]="5B";h[92]="5C";h[93]="5D";h[94]="5E";h[95]="6F";
h[96]="60";h[97]="61";h[98]="62";h[99]="63";h[100]="64";h[101]="65";
h[102]="66";h[103]="67";h[104]="68";h[105]="69";h[106]="6A";h[107]="6B";
h[108]="6C";h[109]="6D";h[110]="6E";h[111]="6F";h[112]="70";h[113]="71";
h[114]="72";h[115]="73";h[116]="74";h[117]="75";h[118]="76";h[119]="77";
h[120]="78";h[121]="79";h[122]="7A";h[123]="7B";h[124]="7C";h[125]="7D";
h[126]="7E";h[127]="7F";h[128]="80";h[129]="81";h[130]="82";h[131]="83";
h[132]="84";h[133]="85";h[134]="86";h[135]="87";h[136]="88";h[137]="89";
h[138]="8A";h[139]="8B";h[140]="8C";h[141]="8D";h[142]="8E";h[143]="8F";
h[144]="90";h[145]="91";h[146]="92";h[147]="93";h[148]="94";h[149]="95";
h[150]="96";h[151]="97";h[152]="98";h[153]="99";h[154]="9A";h[155]="9B";
h[156]="9C";h[157]="9D";h[158]="9E";h[159]="9F";h[160]="A0";h[161]="A1";
h[162]="A2";h[163]="A3";h[164]="A4";h[165]="A5";h[166]="A6";h[167]="A7";
h[168]="A8";h[169]="A9";h[170]="AA";h[171]="AB";h[172]="AC";h[173]="AD";
h[174]="AE";h[175]="AF";h[176]="B0";h[177]="B1";h[178]="B2";h[179]="B3";
h[180]="B4";h[181]="B5";h[182]="B6";h[183]="B7";h[184]="B8";h[185]="B9";
h[186]="BA";h[187]="BB";h[188]="BC";h[189]="BD";h[190]="BE";h[191]="BF";
h[192]="C0";h[193]="C1";h[194]="C2";h[195]="C3";h[196]="C4";h[197]="C5";
h[198]="C6";h[199]="C7";h[200]="C8";h[201]="C9";h[202]="CA";h[203]="CB";
h[204]="CC";h[205]="CD";h[206]="CE";h[207]="CF";h[208]="D0";h[209]="D1";
h[210]="D2";h[211]="D3";h[212]="D4";h[213]="D5";h[214]="D6";h[215]="D7";
h[216]="D8";h[217]="D9";h[218]="DA";h[219]="DB";h[220]="DC";h[221]="DD";
h[222]="DE";h[223]="DF";h[224]="E0";h[225]="E1";h[226]="E2";h[227]="E3";
h[228]="E4";h[229]="E5";h[230]="E6";h[231]="E7";h[232]="E8";h[233]="E9";
h[234]="EA";h[235]="EB";h[236]="EC";h[237]="ED";h[238]="EE";h[239]="EF";
h[240]="F0";h[241]="F1";h[242]="F2";h[243]="F3";h[244]="F4";h[245]="F5";
h[246]="F6";h[247]="F7";h[248]="F8";h[249]="F9";h[250]="FA";h[251]="FB";
h[252]="FC";h[253]="FD";h[254]="FE";h[255]="FF";
return "#"+h[R] + h[G] + h[B];
}
public static Color getImagePixel(String imgFile) {
BufferedImage bi = null;
Color imagePixel;
try {
if(imgFile.contains("http")){
bi = ImageIO.read(new URL(imgFile));
}else{
bi = ImageIO.read(new File(imgFile));
}
imagePixel = getImagePixel(bi);
} catch (Exception e) {
imagePixel = Color.gray;
LOGGER.warn("生成图片失败,图片="+imgFile+","+e.getMessage(),e);
}
return imagePixel;
}
public static String toBrowserHexValue(int number) {
StringBuilder builder = new StringBuilder(
Integer.toHexString(number & 0xff));
while (builder.length() < 2) {
builder =new StringBuilder("0").append(builder);
}
return builder.toString().toUpperCase();
}
public static Color toColorFromString(String colorStr){
colorStr = colorStr.substring(2);
Color color = new Color(Integer.parseInt(colorStr, 16)) ;
return color;
}
private static BufferedImage subPicByWhite(BufferedImage picImage){
return picImage.getSubimage(9, 9, 699, 300);
}
public static String getQrCover(String bookPic,boolean isDefault){
String resultPath = "";
try {
Color color = null;
try {
color = getImagePixel(bookPic);
}catch (Exception e){
color = Color.gray;
}
String lightIcon = "https://oss.5rs.me/oss/uploadfe/png/12dcbc38528d926912c444765d786a9a.png";
String deepIcon = "https://oss.5rs.me/oss/uploadfe/png/60612a7415bdac8533568ae0c21a94b6.png";
String icon;
if(color!=null && (color.getRed()<180||color.getBlue()<180||color.getGreen()<180)){
icon = lightIcon;
}else{
icon = deepIcon;
}
String html = "<div style = \"position: relative;width: 700px;height: 300px;border: 0px solid green;background-color: #fcfcfc;text-align: center;\"> <div style = \"position: absolute;width: 100%;height: 66%;background-color: rgb("+color.getRed()+","+color.getGreen()+","+color.getBlue()+");overflow: hidden;\"> <div style = \"position: absolute;top: 20px;right: -20px;background-image: url('"+icon+"');background-size: 100%;width: 219px;height: 149px;\"> </div> </div><div style=\"position: relative;display: inline-block;width: 158px;height: 225px;box-shadow: 0px 4px 14px 2px rgba(14, 47, 70, 0.2);border-radius: 4px;border: solid 1px #ddd; margin-top: 35px;background: url('"+bookPic+"') no-repeat;background-size: cover;background-position: center;\"></div></div>";
Map<String,String>header = new HashMap<>();
header.put("Content-Type", "application/json");
Map<String,String>param = new HashMap<>();
param.put("htmlCode",html);
String postResult = HttpKit.post("http://192.168.1.7:8216/transcode/htm2img/jpg", JSON.toJSONString(param));
Map map = JSONUtils.jsonToMap(postResult, String.class, String.class);
String pic = (String)map.get("data");
BufferedImage bookPicImage = ImageIO.read(new URL(pic));
BufferedImage bufferedImage = subPicByWhite(bookPicImage);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, ImageTypeEnum.JPG.value, os);
UploadResultInfo uploadResultInfo = OssUtils.uploadFileByte(os.toByteArray(), UUIDUitl.taskName(), ImageTypeEnum.JPG.value);
os.close();
resultPath = uploadResultInfo == null ? null : uploadResultInfo.getUrl();
} catch (Exception e) {
LOGGER.error("生成合成图失败,url="+bookPic+"====="+e.getMessage(),e);
}
return resultPath;
}
public static void main(String[] args) {
// String bookPic = "https://file.5rs.me/oss/upload/image/jpg/c2c7f0b85f9f4eb683cd86a2945bc5e5.jpg";
String bookPic = "https://oss.5rs.me/oss/uploadfe/jpg/e88c2f608fe4365f5c0efd7dda0eb59e.jpg";
Color color;
if(bookPic.contains("/oss/")){
String s = SimpleHttpUtils.httpGet(bookPic + "?x-oss-process=image/average-hue", null);
System.out.println(s);
Map map = JSONUtils.jsonToMap(s, String.class, String.class);
String rgb = (String)map.get("RGB");
color = toColorFromString(rgb);
}else{
color = getImagePixel(bookPic);
}
String lightIcon = "https://oss.5rs.me/oss/uploadfe/png/12dcbc38528d926912c444765d786a9a.png";
String deepIcon = "https://oss.5rs.me/oss/uploadfe/png/60612a7415bdac8533568ae0c21a94b6.png";
String icon;
if(color!=null && (color.getRed()<180||color.getBlue()<180||color.getGreen()<180)){
icon = lightIcon;
}else{
icon = deepIcon;
}
String html = "<div style = \"position: relative;width: 700px;height: 300px;border: 0px solid green;background-color: #fcfcfc;text-align: center;\"> <div style = \"position: absolute;width: 100%;height: 66%;background-color: rgb("+color.getRed()+","+color.getGreen()+","+color.getBlue()+");overflow: hidden;\"> <div style = \"position: absolute;top: 20px;right: -20px;background-image: url('"+icon+"');background-size: 100%;width: 219px;height: 149px;\"> </div> </div><div style=\"position: relative;display: inline-block;width: 158px;height: 225px;box-shadow: 0px 4px 14px 2px rgba(14, 47, 70, 0.2);border-radius: 4px;border: solid 1px #ddd; margin-top: 35px;background: url('"+bookPic+"') no-repeat;background-size: cover;background-position: center;\"></div></div>";
Map<String,String>header = new HashMap<>();
header.put("Content-Type", "application/json");
Map<String,String>param = new HashMap<>();
param.put("htmlCode",html);
String postResult = HttpKit.post("http://192.168.92.111:8214/transcode/htm2img/jpg", JSON.toJSONString(param));
// String s = SimpleHttpUtils.httpRequest("http://localhost:8214/transcode/htm2img/jpg", param,"POST","utf-8",header);
Map map = JSONUtils.jsonToMap(postResult, String.class, String.class);
String pic = (String)map.get("data");
System.out.println(pic);
try {
BufferedImage bookPicImage = ImageIO.read(new URL(pic));
BufferedImage bufferedImage = subPicByWhite(bookPicImage);
OutputStream os = new FileOutputStream("C:\\Users\\LiHao\\Desktop\\封面图\\result.jpg");
ImageIO.write(bufferedImage, ImageTypeEnum.JPG.value, os);
os.close();
} catch (IOException e) {
e.printStackTrace();
}
// String bookPic = "C:\\Users\\LiHao\\Desktop\\封面图\\aa.jpg";
// String playPic = "C:\\Users\\LiHao\\Desktop\\封面图\\播放按钮.png";
// String defaultBackgroundPic = "C:\\Users\\LiHao\\Desktop\\封面图\\默认图背景.png";
// String resultPath = "C:\\Users\\LiHao\\Desktop\\封面图\\result.jpg";
// Boolean isDefalut = false;
// try {
// //取书封面和播放按钮图
// BufferedImage bookPicImage;
// BufferedImage playPicImage;
// BufferedImage defaultBackgroudImage;
// if(bookPic.contains("https:")){
// bookPicImage = ImageIO.read(new URL(bookPic));
// playPicImage = ImageIO.read(new URL(playPic));
// defaultBackgroudImage = ImageIO.read(new URL(defaultBackgroundPic));
// }else{
// bookPicImage = ImageIO.read(new File(bookPic));
// playPicImage = ImageIO.read(new File(playPic));
// defaultBackgroudImage = ImageIO.read(new File(defaultBackgroundPic));
// }
//
// //画一个空的背景
// BufferedImage bg = new BufferedImage(702, 299, BufferedImage.TYPE_3BYTE_BGR);
// Graphics2D g = bg.createGraphics();
// //获取主题色
// Color c = getImagePixel(bookPic);
//
//
// //画纯色的背景或者默认背景图
// g.setColor(c);
// if(isDefalut){
// g.drawImage(defaultBackgroudImage.getScaledInstance(702,196, Image.SCALE_DEFAULT), 0, 0, null);
// }else {
// g.fillRect(0, 0, 702, 196);
// }
// g.setColor(new Color(252, 252, 252));
// g.fillRect(0, 196, 702, 102);
//
// g.setColor(new Color(221, 221, 221));
// //插入书籍图和播放按钮
// g.drawImage(bookPicImage.getScaledInstance(172,238, Image.SCALE_DEFAULT), 265, 30, null);
// g.drawImage(playPicImage.getScaledInstance(80,80, Image.SCALE_DEFAULT), 306, 105, null);
// g.drawRect(265,30,172,238);
//
// for(int i=0;i<3;i++){
//
// }
//
// //保存图片
// if(bookPic.contains("https:")) {
// ByteArrayOutputStream os = new ByteArrayOutputStream();
// ImageIO.write(bg, ImageTypeEnum.JPG.value, os);
// UploadResultInfo uploadResultInfo = OssUtils.uploadFileByte(os.toByteArray(), UUIDUitl.taskName(), ImageTypeEnum.JPG.value);
// os.close();
// s = uploadResultInfo == null ? null : uploadResultInfo.getUrl();
// }else{
// OutputStream os = new FileOutputStream(resultPath);
// ImageIO.write(bg, ImageTypeEnum.JPG.value, os);
// os.close();
// }
// System.out.println(s);
// } catch (Exception e) {
// System.out.println(e.getMessage());
// }
}
}
package com.pcloud.common.utils;/**
* Created by ${user} on ${date}
*/
import com.alibaba.fastjson.JSON;
import com.pcloud.common.entity.UploadResultInfo;
import com.pcloud.common.enums.ImageTypeEnum;
import com.pcloud.common.utils.aliyun.OssUtils;
import com.pcloud.common.utils.httpclient.SimpleHttpUtils;
import com.pcloud.common.utils.json.JSONUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author TianChao
* @date 2018/10/13 15:02
*/
public class PictureUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(PictureUtil.class);
private static Color defaultColor = new Color(252, 252, 252);
private static Color borderColor = new Color(221, 221, 221);
private static String playPic = "https://file.5rs.me/oss/uploadfe/png/3c687bffac4d885ecfff8517d6c3f9c2.png";
private static String defaultBackgroundPic = "https://oss.5rs.me/oss/uploadfe/png/3003b8978e85052f96ababdf7d46f70a.png";
public static Color getImagePixel(BufferedImage bi) {
if(bi.getWidth()*bi.getHeight()>500000) {
BufferedImage pic1 = new BufferedImage(157, 224, BufferedImage.SCALE_SMOOTH);
Graphics graphics = pic1.getGraphics();
graphics.drawImage(bi.getScaledInstance(157,224,Image.SCALE_SMOOTH),0,0,null);
graphics.dispose();
bi = pic1;
}
int width = bi.getWidth();
int height = bi.getHeight();
int sum=width*height;
int minx = bi.getMinX();
int miny = bi.getMinY();
int R = 0;
int G = 0;
int B = 0;
List<String> list=new ArrayList<>();
for (int i = minx; i < width; i++) {
for (int j = miny; j < height; j++) {
int pixel = bi.getRGB(i, j);
if(pixel==Color.white.getRGB() || pixel==Color.black.getRGB()){
continue;
}
R =(pixel & 0xff0000) >> 16;
G =(pixel & 0xff00) >> 8;
B =(pixel & 0xff);
if((R>230&&G>230&&B>230) ||(R<30&&G<30&&B<30)){
continue;
}
list.add(R+"-"+G+"-"+B);
}
}
return getMaxCount(list);
}
public static Color getMaxCount(List<String> s) {
List<String> list = s;
Map<String, Integer> map = new HashMap<String, Integer>();
for (String c : list) {
Integer l = map.get(c);
if (l == null)
l = 1;
else
l++;
map.put(c, l);
}
String max = null;
long num = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer temp = entry.getValue();
if (max == null || temp > num) {
max = key;
num = temp;
}
}
String str[] = max.split("\\-");
if (str.length == 3) {
return new Color(Integer.parseInt(str[0]), Integer.parseInt(str[1]),
Integer.parseInt(str[2]));
}
return Color.gray;
}
public static String getB16(int R,int G,int B){
String[] h=new String[256];
h[0]="00";h[1]="01";h[2]="02";h[3]="03";h[4]="04";h[5]="05";
h[6]="06";h[7]="07";h[8]="08";h[9]="09";h[10]="0A";h[11]="0B";
h[12]="0C";h[13]="0D";h[14]="0E";h[15]="0F";h[16]="10";h[17]="11";
h[18]="12";h[19]="13";h[20]="14";h[21]="15";h[22]="16";h[23]="17";
h[24]="18";h[25]="19";h[26]="1A";h[27]="1B";h[28]="1C";h[29]="1D";
h[30]="1E";h[31]="1F";h[32]="20";h[33]="21";h[34]="22";h[35]="23";
h[36]="24";h[37]="25";h[38]="26";h[39]="27";h[40]="28";h[41]="29";
h[42]="2A";h[43]="2B";h[44]="2C";h[45]="2D";h[46]="2E";h[47]="2F";
h[48]="30";h[49]="31";h[50]="32";h[51]="33";h[52]="34";h[53]="35";
h[54]="36";h[55]="37";h[56]="38";h[57]="39";h[58]="3A";h[59]="3B";
h[60]="3C";h[61]="3D";h[62]="3E";h[63]="3F";h[64]="40";h[65]="41";
h[66]="42";h[67]="43";h[68]="44";h[69]="45";h[70]="46";h[71]="47";
h[72]="48";h[73]="49";h[74]="4A";h[75]="4B";h[76]="4C";h[77]="4D";
h[78]="4E";h[79]="4F";h[80]="50";h[81]="51";h[82]="52";h[83]="53";
h[84]="54";h[85]="55";h[86]="56";h[87]="57";h[88]="58";h[89]="59";
h[90]="5A";h[91]="5B";h[92]="5C";h[93]="5D";h[94]="5E";h[95]="6F";
h[96]="60";h[97]="61";h[98]="62";h[99]="63";h[100]="64";h[101]="65";
h[102]="66";h[103]="67";h[104]="68";h[105]="69";h[106]="6A";h[107]="6B";
h[108]="6C";h[109]="6D";h[110]="6E";h[111]="6F";h[112]="70";h[113]="71";
h[114]="72";h[115]="73";h[116]="74";h[117]="75";h[118]="76";h[119]="77";
h[120]="78";h[121]="79";h[122]="7A";h[123]="7B";h[124]="7C";h[125]="7D";
h[126]="7E";h[127]="7F";h[128]="80";h[129]="81";h[130]="82";h[131]="83";
h[132]="84";h[133]="85";h[134]="86";h[135]="87";h[136]="88";h[137]="89";
h[138]="8A";h[139]="8B";h[140]="8C";h[141]="8D";h[142]="8E";h[143]="8F";
h[144]="90";h[145]="91";h[146]="92";h[147]="93";h[148]="94";h[149]="95";
h[150]="96";h[151]="97";h[152]="98";h[153]="99";h[154]="9A";h[155]="9B";
h[156]="9C";h[157]="9D";h[158]="9E";h[159]="9F";h[160]="A0";h[161]="A1";
h[162]="A2";h[163]="A3";h[164]="A4";h[165]="A5";h[166]="A6";h[167]="A7";
h[168]="A8";h[169]="A9";h[170]="AA";h[171]="AB";h[172]="AC";h[173]="AD";
h[174]="AE";h[175]="AF";h[176]="B0";h[177]="B1";h[178]="B2";h[179]="B3";
h[180]="B4";h[181]="B5";h[182]="B6";h[183]="B7";h[184]="B8";h[185]="B9";
h[186]="BA";h[187]="BB";h[188]="BC";h[189]="BD";h[190]="BE";h[191]="BF";
h[192]="C0";h[193]="C1";h[194]="C2";h[195]="C3";h[196]="C4";h[197]="C5";
h[198]="C6";h[199]="C7";h[200]="C8";h[201]="C9";h[202]="CA";h[203]="CB";
h[204]="CC";h[205]="CD";h[206]="CE";h[207]="CF";h[208]="D0";h[209]="D1";
h[210]="D2";h[211]="D3";h[212]="D4";h[213]="D5";h[214]="D6";h[215]="D7";
h[216]="D8";h[217]="D9";h[218]="DA";h[219]="DB";h[220]="DC";h[221]="DD";
h[222]="DE";h[223]="DF";h[224]="E0";h[225]="E1";h[226]="E2";h[227]="E3";
h[228]="E4";h[229]="E5";h[230]="E6";h[231]="E7";h[232]="E8";h[233]="E9";
h[234]="EA";h[235]="EB";h[236]="EC";h[237]="ED";h[238]="EE";h[239]="EF";
h[240]="F0";h[241]="F1";h[242]="F2";h[243]="F3";h[244]="F4";h[245]="F5";
h[246]="F6";h[247]="F7";h[248]="F8";h[249]="F9";h[250]="FA";h[251]="FB";
h[252]="FC";h[253]="FD";h[254]="FE";h[255]="FF";
return "#"+h[R] + h[G] + h[B];
}
public static Color getImagePixel(String imgFile) {
BufferedImage bi = null;
Color imagePixel;
try {
if(imgFile.contains("http")){
bi = ImageIO.read(new URL(imgFile));
}else{
bi = ImageIO.read(new File(imgFile));
}
imagePixel = getImagePixel(bi);
} catch (Exception e) {
imagePixel = Color.gray;
LOGGER.warn("生成图片失败,图片="+imgFile+","+e.getMessage(),e);
}
return imagePixel;
}
public static String toBrowserHexValue(int number) {
StringBuilder builder = new StringBuilder(
Integer.toHexString(number & 0xff));
while (builder.length() < 2) {
builder =new StringBuilder("0").append(builder);
}
return builder.toString().toUpperCase();
}
public static Color toColorFromString(String colorStr){
colorStr = colorStr.substring(2);
Color color = new Color(Integer.parseInt(colorStr, 16)) ;
return color;
}
private static BufferedImage subPicByWhite(BufferedImage picImage){
return picImage.getSubimage(9, 9, 699, 300);
}
public static String getQrCover(String bookPic,boolean isDefault){
String resultPath = "";
try {
Color color = null;
try {
color = getImagePixel(bookPic);
}catch (Exception e){
color = Color.gray;
}
String lightIcon = "https://oss.5rs.me/oss/uploadfe/png/12dcbc38528d926912c444765d786a9a.png";
String deepIcon = "https://oss.5rs.me/oss/uploadfe/png/60612a7415bdac8533568ae0c21a94b6.png";
String icon;
if(color!=null && (color.getRed()<180||color.getBlue()<180||color.getGreen()<180)){
icon = lightIcon;
}else{
icon = deepIcon;
}
String html = "<div style = \"position: relative;width: 700px;height: 300px;border: 0px solid green;background-color: #fcfcfc;text-align: center;\"> <div style = \"position: absolute;width: 100%;height: 66%;background-color: rgb("+color.getRed()+","+color.getGreen()+","+color.getBlue()+");overflow: hidden;\"> <div style = \"position: absolute;top: 20px;right: -20px;background-image: url('"+icon+"');background-size: 100%;width: 219px;height: 149px;\"> </div> </div><div style=\"position: relative;display: inline-block;width: 158px;height: 225px;box-shadow: 0px 4px 14px 2px rgba(14, 47, 70, 0.2);border-radius: 4px;border: solid 1px #ddd; margin-top: 35px;background: url('"+bookPic+"') no-repeat;background-size: cover;background-position: center;\"></div></div>";
Map<String,String>header = new HashMap<>();
header.put("Content-Type", "application/json");
Map<String,String>param = new HashMap<>();
param.put("htmlCode",html);
String postResult = HttpKit.post("http://192.168.1.7:8216/transcode/htm2img/jpg", JSON.toJSONString(param));
Map map = JSONUtils.jsonToMap(postResult, String.class, String.class);
String pic = (String)map.get("data");
BufferedImage bookPicImage = ImageIO.read(new URL(pic));
BufferedImage bufferedImage = subPicByWhite(bookPicImage);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, ImageTypeEnum.JPG.value, os);
UploadResultInfo uploadResultInfo = OssUtils.uploadFileByte(os.toByteArray(), UUIDUitl.taskName(), ImageTypeEnum.JPG.value);
os.close();
resultPath = uploadResultInfo == null ? null : uploadResultInfo.getUrl();
} catch (Exception e) {
LOGGER.error("生成合成图失败,url="+bookPic+"====="+e.getMessage(),e);
}
return resultPath;
}
public static void main(String[] args) {
// String bookPic = "https://file.5rs.me/oss/upload/image/jpg/c2c7f0b85f9f4eb683cd86a2945bc5e5.jpg";
String bookPic = "https://oss.5rs.me/oss/uploadfe/jpg/e88c2f608fe4365f5c0efd7dda0eb59e.jpg";
Color color;
if(bookPic.contains("/oss/")){
String s = SimpleHttpUtils.httpGet(bookPic + "?x-oss-process=image/average-hue", null);
System.out.println(s);
Map map = JSONUtils.jsonToMap(s, String.class, String.class);
String rgb = (String)map.get("RGB");
color = toColorFromString(rgb);
}else{
color = getImagePixel(bookPic);
}
String lightIcon = "https://oss.5rs.me/oss/uploadfe/png/12dcbc38528d926912c444765d786a9a.png";
String deepIcon = "https://oss.5rs.me/oss/uploadfe/png/60612a7415bdac8533568ae0c21a94b6.png";
String icon;
if(color!=null && (color.getRed()<180||color.getBlue()<180||color.getGreen()<180)){
icon = lightIcon;
}else{
icon = deepIcon;
}
String html = "<div style = \"position: relative;width: 700px;height: 300px;border: 0px solid green;background-color: #fcfcfc;text-align: center;\"> <div style = \"position: absolute;width: 100%;height: 66%;background-color: rgb("+color.getRed()+","+color.getGreen()+","+color.getBlue()+");overflow: hidden;\"> <div style = \"position: absolute;top: 20px;right: -20px;background-image: url('"+icon+"');background-size: 100%;width: 219px;height: 149px;\"> </div> </div><div style=\"position: relative;display: inline-block;width: 158px;height: 225px;box-shadow: 0px 4px 14px 2px rgba(14, 47, 70, 0.2);border-radius: 4px;border: solid 1px #ddd; margin-top: 35px;background: url('"+bookPic+"') no-repeat;background-size: cover;background-position: center;\"></div></div>";
Map<String,String>header = new HashMap<>();
header.put("Content-Type", "application/json");
Map<String,String>param = new HashMap<>();
param.put("htmlCode",html);
String postResult = HttpKit.post("http://192.168.92.111:8214/transcode/htm2img/jpg", JSON.toJSONString(param));
// String s = SimpleHttpUtils.httpRequest("http://localhost:8214/transcode/htm2img/jpg", param,"POST","utf-8",header);
Map map = JSONUtils.jsonToMap(postResult, String.class, String.class);
String pic = (String)map.get("data");
System.out.println(pic);
try {
BufferedImage bookPicImage = ImageIO.read(new URL(pic));
BufferedImage bufferedImage = subPicByWhite(bookPicImage);
OutputStream os = new FileOutputStream("C:\\Users\\LiHao\\Desktop\\封面图\\result.jpg");
ImageIO.write(bufferedImage, ImageTypeEnum.JPG.value, os);
os.close();
} catch (IOException e) {
e.printStackTrace();
}
// String bookPic = "C:\\Users\\LiHao\\Desktop\\封面图\\aa.jpg";
// String playPic = "C:\\Users\\LiHao\\Desktop\\封面图\\播放按钮.png";
// String defaultBackgroundPic = "C:\\Users\\LiHao\\Desktop\\封面图\\默认图背景.png";
// String resultPath = "C:\\Users\\LiHao\\Desktop\\封面图\\result.jpg";
// Boolean isDefalut = false;
// try {
// //取书封面和播放按钮图
// BufferedImage bookPicImage;
// BufferedImage playPicImage;
// BufferedImage defaultBackgroudImage;
// if(bookPic.contains("https:")){
// bookPicImage = ImageIO.read(new URL(bookPic));
// playPicImage = ImageIO.read(new URL(playPic));
// defaultBackgroudImage = ImageIO.read(new URL(defaultBackgroundPic));
// }else{
// bookPicImage = ImageIO.read(new File(bookPic));
// playPicImage = ImageIO.read(new File(playPic));
// defaultBackgroudImage = ImageIO.read(new File(defaultBackgroundPic));
// }
//
// //画一个空的背景
// BufferedImage bg = new BufferedImage(702, 299, BufferedImage.TYPE_3BYTE_BGR);
// Graphics2D g = bg.createGraphics();
// //获取主题色
// Color c = getImagePixel(bookPic);
//
//
// //画纯色的背景或者默认背景图
// g.setColor(c);
// if(isDefalut){
// g.drawImage(defaultBackgroudImage.getScaledInstance(702,196, Image.SCALE_DEFAULT), 0, 0, null);
// }else {
// g.fillRect(0, 0, 702, 196);
// }
// g.setColor(new Color(252, 252, 252));
// g.fillRect(0, 196, 702, 102);
//
// g.setColor(new Color(221, 221, 221));
// //插入书籍图和播放按钮
// g.drawImage(bookPicImage.getScaledInstance(172,238, Image.SCALE_DEFAULT), 265, 30, null);
// g.drawImage(playPicImage.getScaledInstance(80,80, Image.SCALE_DEFAULT), 306, 105, null);
// g.drawRect(265,30,172,238);
//
// for(int i=0;i<3;i++){
//
// }
//
// //保存图片
// if(bookPic.contains("https:")) {
// ByteArrayOutputStream os = new ByteArrayOutputStream();
// ImageIO.write(bg, ImageTypeEnum.JPG.value, os);
// UploadResultInfo uploadResultInfo = OssUtils.uploadFileByte(os.toByteArray(), UUIDUitl.taskName(), ImageTypeEnum.JPG.value);
// os.close();
// s = uploadResultInfo == null ? null : uploadResultInfo.getUrl();
// }else{
// OutputStream os = new FileOutputStream(resultPath);
// ImageIO.write(bg, ImageTypeEnum.JPG.value, os);
// os.close();
// }
// System.out.println(s);
// } catch (Exception e) {
// System.out.println(e.getMessage());
// }
}
}
......@@ -40,7 +40,7 @@ import com.aliyuncs.mts.model.v20140618.SubmitSnapshotJobRequest;
import com.aliyuncs.mts.model.v20140618.SubmitSnapshotJobResponse.SnapshotJob;
import com.aliyuncs.profile.DefaultProfile;
import com.pcloud.common.constant.AliyunConstant;
import com.pcloud.common.constant.FilePathConst;
import com.pcloud.common.constant.FilePathConstant;
import com.pcloud.common.constant.UrlConstant;
import com.pcloud.common.dto.OssImageCropDTO;
import com.pcloud.common.dto.OssImageDTO;
......@@ -1600,7 +1600,7 @@ public class OssUtils {
// 创建OSSClient实例
OSSClient ossClient = getOSSClient(bucketName);
// 生成新的图片地址
String localPath = FilePathConst.IMAGE_PATH + UUIDUitl.generateString(32) + "." + fileType;
String localPath = FilePathConstant.IMAGE + UUIDUitl.generateString(32) + "." + fileType;
FileUtils.creatFiles(localPath);
try {
ossClient.getObject(request, new File(localPath));
......@@ -1720,7 +1720,7 @@ public class OssUtils {
// 创建OSSClient实例
OSSClient ossClient = getOSSClient(bucketName);
// 生成带水印的本地图片地址
String localPath = FilePathConst.IMAGE_WATERMARK_PATH + fileName + "_" + LocalDateUtils.getYmdhmss() + "."
String localPath = FilePathConstant.IMAGE_WATERMARK + fileName + "_" + LocalDateUtils.getYmdhmss() + "."
+ fileType;
FileUtils.creatFiles(localPath);
ossClient.getObject(request, new File(localPath));
......
......@@ -14,7 +14,6 @@ import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.pcloud.common.utils.rsa.MD5;
import com.pcloud.common.utils.string.StringUtil;
......@@ -25,17 +24,9 @@ import com.pcloud.common.utils.string.StringUtil;
*/
public class UrlUtils {
/**
*
*/
private static final Logger LOGGER = LoggerFactory.getLogger(UrlUtils.class);
/**
* 请求地址(新郎接口)
*/
private static final String REQUEST_URL = "https://api.weibo.com/2/short_url/shorten.json?source=1681459862&url_long=";
/**
* 请求地址(OWN)
*/
private static final String REQUEST_URL2 = "https://rays.5rs.me/convert/v1.0/url/shorten";
......@@ -51,20 +42,13 @@ public class UrlUtils {
public static final String PRIVATE_KEY = "lgsc1205";
/**
* 获取短链接(新浪)
* 获取短链接
*
* @param long_url
* @return
*/
public static String getShortUrl(String long_url) {
String result = callHttp(REQUEST_URL + long_url);
if (StringUtil.isEmpty(result)) {
return null;
}
JSONObject resultObject = JSONObject.parseObject(result);
JSONArray array = resultObject.getJSONArray("urls");
JSONObject object = array.getJSONObject(0);
return object.getString("url_short");
return getShortUrl4Own(long_url);
}
/**
......
......@@ -29,7 +29,7 @@ import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import com.pcloud.common.constant.FilePathConst;
import com.pcloud.common.constant.FilePathConstant;
import com.pcloud.common.entity.UploadResultInfo;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.FileException;
......@@ -105,7 +105,7 @@ public class PdfUtils {
*/
private static String pdfConvert(byte[] b, String fileName, String prefix, String format) throws FileException {
// 解析PDF文件
String outPath = FilePathConst.PDF_PATH + fileName + "_" + UUIDUitl.generateString(12);
String outPath = FilePathConstant.PDF + fileName + "_" + UUIDUitl.generateString(12);
File fi = new File(outPath);
if (!fi.exists()) {
fi.mkdirs();
......@@ -161,7 +161,7 @@ public class PdfUtils {
/**
* 创建PDF
*
* @param pdfChunkDOs
* @param pdfPOs
* @return
* @throws Exception
*/
......@@ -176,7 +176,7 @@ public class PdfUtils {
OutputStream os = null;
try {
// 输出路径
outPath = FilePathConst.PDF_PATH + UUIDUitl.taskName() + ".pdf";
outPath = FilePathConstant.PDF + UUIDUitl.taskName() + ".pdf";
FileUtils.creatFiles(outPath);
// 创建输出流
os = new FileOutputStream(new File(outPath));
......@@ -358,10 +358,8 @@ public class PdfUtils {
/**
* 加水印(字符串)
*
* @param inputFile
* @param filePath
* 需要加水印的PDF路径
* @param outputFile
* 输出生成PDF的路径
* @param waterMarkName
* 水印字符
*/
......
......@@ -590,5 +590,20 @@ public class StringUtil extends StringUtilParent {
}
return false;
}
/**
* 过滤HTML标签
*
* @param str
* @return
*/
public static String replaceHtml(String str) {
if (StringUtil.isEmpty(str)) {
return "";
}
Pattern p_html = Pattern.compile("<[^>]+>", Pattern.CASE_INSENSITIVE);
Matcher m_html = p_html.matcher(str);
return m_html.replaceAll("").replaceAll("&nbsp;", "");
}
}
package com.pcloud.common.utils.word;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.util.List;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.util.Units;
import org.apache.poi.wp.usermodel.HeaderFooterType;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFooter;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pcloud.common.constant.FilePathConst;
import com.pcloud.common.constant.WordConstant;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.FileException;
import com.pcloud.common.utils.FileUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.UUIDUitl;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.word.dto.ParagraphDTO;
import com.pcloud.common.utils.word.dto.RunDTO;
import com.pcloud.common.utils.word.dto.RunImageDTO;
import com.pcloud.common.utils.word.dto.RunTableDTO;
import com.pcloud.common.utils.word.dto.RunTextDTO;
import com.pcloud.common.utils.word.dto.WordDTO;
import com.pcloud.common.utils.word.enums.ParagraphType;
/**
* 重新定义word工具类
*
* @author:songx
* @date:2019/5/27,10:06
*/
public class WordNewUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(WordNewUtils.class);
// public static void main(String[] args) {
// List<ParagraphDTO> paragraphDTOS = new ArrayList<>();
// // 页眉
// paragraphDTOS.add(getHeader1());
// paragraphDTOS.add(getHeader2());
// // 标题
// paragraphDTOS.add(getParagraph1());
// // 内容
// paragraphDTOS.add(getParagraph2());
// paragraphDTOS.add(getParagraph3());
// paragraphDTOS.add(getParagraph4());
// paragraphDTOS.add(getParagraph4());
// // 页脚
// paragraphDTOS.add(getFooter1());
// try {
// System.out.println(create(paragraphDTOS));
// } catch (Exception e) {
// LOGGER.error(e.getMessage(), e);
// }
// System.out.println("Game over!");
// }
//
// private static ParagraphDTO getHeader1() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("?????的个人专属错题本 共40道错题", 9, "微软雅黑");
// return ParagraphDTO.newHeader(ParagraphType.text, runTextDTO);
// }
//
// private static ParagraphDTO getHeader2() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("来源《书名书名书名书名书名书名书名书书名书名书名书书名书名书名书》", 9, "微软雅黑");
// return ParagraphDTO.newHeader(ParagraphType.text, runTextDTO);
// }
//
// private static ParagraphDTO getParagraph1() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("个人专属错题本", 18, "微软雅黑", true);
// return ParagraphDTO.newParagraph(ParagraphType.text, ParagraphAlignment.CENTER, runTextDTO, 1);
// }
//
// private static ParagraphDTO getParagraph2() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("完成下面错题练习,扫描二维码核对答案,并记录练习结果:", 11, "微软雅黑", true);
// return ParagraphDTO.newParagraph(ParagraphType.text, runTextDTO, 1);
// }
//
// private static ParagraphDTO getParagraph3() {
// RunImageDTO runImageDTO = RunImageDTO
// .newImage("I:\\TEST\\image\\02.jpg", 80, 80, null, listAfterTexts3(11, "微软雅黑"));
// return ParagraphDTO.newParagraph(ParagraphType.image, TextAlignment.TOP, runImageDTO, 1);
// }
//
// private static ParagraphDTO getParagraph4() {
// RunImageDTO runImageDTO = RunImageDTO
// .newImage("I:\\TEST\\image\\2.jpg", 200, 500);
// return ParagraphDTO.newParagraph(ParagraphType.image, runImageDTO, 3);
// }
//
// private static ParagraphDTO getFooter1() {
// RunTextDTO runTextDTO = RunTextDTO.newText("反复练习,攻克错题", 11, "微软雅黑");
// return ParagraphDTO.newFooter(ParagraphType.text, ParagraphAlignment.CENTER, runTextDTO);
// }
//
// /**
// * 组装图片后面的文字
// *
// * @param fontSize
// * @param fontFamily
// * @return
// */
// private static List<RunTextDTO> listAfterTexts3(int fontSize, String fontFamily) {
// List<RunTextDTO> afterRuns = Lists.newArrayList();
// afterRuns.add(RunTextDTO.newText(" 答对", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" 10 ", fontSize, fontFamily, UnderlinePatterns.SINGLE));
// afterRuns.add(RunTextDTO.newText("道题,答错", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" 11 ", fontSize, fontFamily, UnderlinePatterns.SINGLE));
// afterRuns.add(RunTextDTO.newText("道题,日期", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" " + LocalDateUtils.getDateNow() + " ", fontSize, fontFamily,
// UnderlinePatterns.SINGLE));
// return afterRuns;
// }
/**
* 创建WORD
*
* @param wordDTO
* @return
* @throws Exception
*/
public static String create(WordDTO wordDTO) throws FileException {
LOGGER.info("【WORD】创建WORD文档,<START>");
if (wordDTO == null || ListUtils.isEmpty(wordDTO.getParagraphs())) {
return null;
}
String wordTemplate = null;
String outPath = null;
CustomXWPFDocument document = null;
FileOutputStream fos = null;
try {
wordTemplate = FilePathConst.WORD_PATH + UUIDUitl.taskName() + ".docx";
FileUtils.downloadFileFromUrl(WordConstant.TEMPLATE_URL, wordTemplate);
OPCPackage pack = POIXMLDocument.openPackage(wordTemplate);
document = new CustomXWPFDocument(pack);
// 添加内容到文档中
addParagraphs(wordDTO, document);
// 生成目标word
outPath = FilePathConst.WORD_PATH + UUIDUitl.taskName() + ".docx";
fos = new FileOutputStream(outPath);
document.write(fos);
fos.flush();
} catch (Exception e) {
LOGGER.error("【WORD】创建WORD文档失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_CONTENT_ERROR, e.getMessage());
} finally {
close(document, fos);
FileUtils.deleteFile(wordTemplate);
}
LOGGER.info("【WORD】创建WORD文档,<END>.[outPath]=" + outPath);
return outPath;
}
/**
* 添加内容到WORD中
*
* @param wordDTO
* @param document
* @throws BizException
*/
private static void addParagraphs(WordDTO wordDTO, CustomXWPFDocument document) {
List<ParagraphDTO> paragraphDTOS = wordDTO.getParagraphs();
for (ParagraphDTO paragraphDTO : paragraphDTOS) {
ParagraphType paragraphType = paragraphDTO.getParagraphType();
if (ParagraphType.table.equals(paragraphType)) {
addTable(paragraphDTO, document);
} else if (ParagraphType.image.equals(paragraphType)) {
addImage(wordDTO, paragraphDTO, document);
} else if (ParagraphType.text.equals(paragraphType)) {
addText(wordDTO, paragraphDTO, document);
}
}
}
/**
* 获取段落
*
* @param paragraphDTO
* @param document
* @return
*/
private static XWPFParagraph getParagraph(ParagraphDTO paragraphDTO, CustomXWPFDocument document) {
if (paragraphDTO.isHeader()) {
XWPFHeader xwpfHeader = document.createHeader(HeaderFooterType.DEFAULT);
return xwpfHeader.createParagraph();
} else if (paragraphDTO.isFooter()) {
XWPFFooter xwpfFooter = document.createFooter(HeaderFooterType.DEFAULT);
return xwpfFooter.createParagraph();
} else {
return document.createParagraph();
}
}
/**
* 添加文本块
*
* @param wordDTO
* @param paragraphDTO
* @throws BizException
*/
private static void addText(WordDTO wordDTO, ParagraphDTO paragraphDTO, CustomXWPFDocument document)
throws BizException {
XWPFParagraph paragraph = getParagraph(paragraphDTO, document);
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 设置段落块样式
if (paragraphDTO.getRun() != null) {
setTextStyle(wordDTO, (RunTextDTO) paragraphDTO.getRun(), paragraph);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
setTextStyle(wordDTO, (RunTextDTO) runDTO, paragraph);
}
}
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 添加空行
*
* @param afterEmpty
* @param document
* @throws BizException
*/
private static void addEmptyText(int afterEmpty, CustomXWPFDocument document) throws BizException {
for (int i = 0; i < afterEmpty; i++) {
setTextStyle(null, RunTextDTO.newEmpty(), document.createParagraph());
}
}
/**
* 设置段落样式
*
* @param paragraphDTO
* @param paragraph
*/
private static void setParagraphStyle(ParagraphDTO paragraphDTO, XWPFParagraph paragraph) {
// 与前一行的间距
if (paragraphDTO.getSpacingBefore() > 0) {
paragraph.setSpacingBeforeLines(paragraphDTO.getSpacingBefore());
}
// 与下一行的间距
if (paragraphDTO.getSpacingAfter() > 0) {
paragraph.setSpacingAfterLines(paragraphDTO.getSpacingAfter());
}
// 对齐
if (paragraphDTO.getParagraphAlignment() != null) {
paragraph.setFontAlignment(paragraphDTO.getParagraphAlignment().getValue());
}
// 水平居中
if (paragraphDTO.getTextAlignment() != null) {
paragraph.setVerticalAlignment(paragraphDTO.getTextAlignment());
}
}
/**
* 设置文本样式
*
* @param wordDTO
* @param runTextDTO
* @param paragraph
*/
private static void setTextStyle(WordDTO wordDTO, RunTextDTO runTextDTO, XWPFParagraph paragraph) {
XWPFRun xwpfRun = paragraph.createRun();
xwpfRun.setText(runTextDTO.getText());
// 是否加粗
xwpfRun.setBold(runTextDTO.isBold());
// 字体大小
if (runTextDTO.getFontSize() > 0) {
xwpfRun.setFontSize(runTextDTO.getFontSize());
} else if (wordDTO != null && wordDTO.getFontSize() > 0) {
xwpfRun.setFontSize(wordDTO.getFontSize());
}
// 字体
if (runTextDTO.getFontFamily() != null) {
xwpfRun.setFontFamily(runTextDTO.getFontFamily());
} else if (wordDTO != null && wordDTO.getFontFamily() != null) {
xwpfRun.setFontFamily(wordDTO.getFontFamily());
}
// 下划线
if (runTextDTO.getUnderlinePatterns() != null) {
xwpfRun.setUnderline(runTextDTO.getUnderlinePatterns());
}
}
/**
* 添加表格
*
* @param paragraphDTO
* @throws BizException
*/
private static void addTable(ParagraphDTO paragraphDTO, CustomXWPFDocument document) throws BizException {
XWPFParagraph paragraph = document.createParagraph();
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 创建表格
if (paragraphDTO.getRun() != null) {
createTable((RunTableDTO) paragraphDTO.getRun(), document);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createTable((RunTableDTO) runDTO, document);
}
}
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 创建表格
*
* @param runTableDTO
* @param document
*/
private static void createTable(RunTableDTO runTableDTO, CustomXWPFDocument document) {
String[][] contents = runTableDTO.getContents();
if (contents == null || contents.length < 1) {
return;
}
int rowNum = contents.length; // 总行数
int colNum = runTableDTO.getColumnWidths().length; // 总列数
if (colNum < 1) {
throw new FileException(FileException.FILE_CONTENT_ERROR, "表格列数与内容列数不一致");
}
// 创建表格
XWPFTable ComTable = document.createTable();
// 列宽自动分割
CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();
comTableWidth.setType(STTblWidth.DXA);
comTableWidth.setW(BigInteger.valueOf(9072));
// 设置行和列
for (int i = 0; i < rowNum; i++) {
String[] cols = contents[i];
// 创建行
XWPFTableRow comTableRow = i == 0 ? ComTable.getRow(0) : ComTable.createRow();
for (int j = 0; j < colNum; j++) {
String text = (j >= cols.length || StringUtil.isEmpty(cols[j])) ? "" : cols[j];
// 填充单元格内容
XWPFTableCell cell = null;
if (i == 0) {
cell = j == 0 ? comTableRow.getCell(0) : comTableRow.addNewTableCell();
} else {
cell = comTableRow.getCell(j);
}
cell.setText(text);
cell.setVerticalAlignment(runTableDTO.getVertAlign());
}
// 行高
if (runTableDTO.getHeight() > 0) {
comTableRow.setHeight(runTableDTO.getHeight());
}
}
}
/**
* 添加图片和文本
*
* @param paragraphDTO
* @param document
*/
private static void addImage(WordDTO wordDTO, ParagraphDTO paragraphDTO, CustomXWPFDocument document) {
XWPFParagraph paragraph = null;
if (paragraphDTO.isHeader()) {
XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
paragraph = header.createParagraph();
addImageHeader(wordDTO, paragraphDTO, paragraph, header);
} else {
paragraph = document.createParagraph();
addImageContent(wordDTO, paragraphDTO, paragraph, document);
}
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 页眉中插入图片
*
* @param wordDTO
* @param paragraphDTO
* @param paragraph
* @param header
*/
private static void addImageHeader(WordDTO wordDTO, ParagraphDTO paragraphDTO, XWPFParagraph paragraph,
XWPFHeader header) {
// 创建图片
if (paragraphDTO.getRun() != null) {
createImageHeader(wordDTO, (RunImageDTO) paragraphDTO.getRun(), paragraph, header);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createImageHeader(wordDTO, (RunImageDTO) runDTO, paragraph, header);
}
}
}
/**
* 内容中插入图片
*
* @param wordDTO
* @param paragraphDTO
* @param paragraph
* @param document
*/
private static void addImageContent(WordDTO wordDTO, ParagraphDTO paragraphDTO, XWPFParagraph paragraph,
CustomXWPFDocument document) {
// 创建图片
if (paragraphDTO.getRun() != null) {
createImageContent(wordDTO, (RunImageDTO) paragraphDTO.getRun(), paragraph, document);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createImageContent(wordDTO, (RunImageDTO) runDTO, paragraph, document);
}
}
}
/**
* 创建图片和文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
* @param document
*/
private static void createImageContent(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph,
CustomXWPFDocument document) {
// 前置文本
addImageBefore(wordDTO, runImageDTO, paragraph);
try {
// 图片
String relationId = addPictureContent(runImageDTO, document);
if (!StringUtil.isEmpty(relationId)) {
int id = document.getAllPictures().size() - 1;
document.createPicture(paragraph, relationId, id, runImageDTO.getWidth(), runImageDTO.getHeight());
}
} catch (Exception e) {
LOGGER.error("【WORD】创建WORD文档失败:" + e.getMessage(), e);
}
// 后置文本
addImageAfter(wordDTO, runImageDTO, paragraph);
}
/**
* 创建图片
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
* @param header
*/
private static void createImageHeader(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph,
XWPFHeader header) {
// 前置文本
addImageBefore(wordDTO, runImageDTO, paragraph);
// 图片
addPictureHeader(runImageDTO, paragraph, header);
// 后置文本
addImageAfter(wordDTO, runImageDTO, paragraph);
}
/**
* 图片前置文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
*/
private static void addImageBefore(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph) {
List<RunTextDTO> beforeTexts = runImageDTO.getBeforeTexts();
if (!ListUtils.isEmpty(beforeTexts)) {
for (RunTextDTO runTextDTO : beforeTexts) {
setTextStyle(wordDTO, runTextDTO, paragraph);
}
}
}
/**
* 图片后置文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
*/
private static void addImageAfter(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph) {
List<RunTextDTO> afterTexts = runImageDTO.getAfterTexts();
if (!ListUtils.isEmpty(afterTexts)) {
for (RunTextDTO runTextDTO : afterTexts) {
setTextStyle(wordDTO, runTextDTO, paragraph);
}
}
}
/**
* 添加页眉图片
*
* @param runImageDTO
* @param paragraph
* @param header
*/
private static void addPictureHeader(RunImageDTO runImageDTO, XWPFParagraph paragraph, XWPFHeader header) {
InputStream is = null;
String imageUrl = runImageDTO.getImageUrl();
if (!StringUtil.isEmpty(imageUrl)) {
if (imageUrl.startsWith("http")) {
is = new ByteArrayInputStream(FileUtils.downloadByteFromUrl(imageUrl));
} else {
is = new ByteArrayInputStream(FileUtils.file2byte(imageUrl));
}
} else if (runImageDTO.getImageByte() != null) {
is = new ByteArrayInputStream(runImageDTO.getImageByte());
}
XWPFRun run = paragraph.createRun();
try {
XWPFPicture picture = run
.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, "123", Units.toEMU(runImageDTO.getWidth()),
Units.toEMU(runImageDTO.getHeight()));
//这段必须有,不然打开的logo图片不显示
String blipID = "";
for (XWPFPictureData picturedata : header.getAllPackagePictures()) {
blipID = header.getRelationId(picturedata);
}
picture.getCTPicture().getBlipFill().getBlip().setEmbed(blipID);
run.addTab();
} catch (Exception e) {
LOGGER.error("【WORD】WORD页眉图片生成失败:" + e.getMessage(), e);
} finally {
try {
if (is != null) {
is.close();
is = null;
}
} catch (Exception e) {
}
}
}
/**
* 添加图片数据
*
* @param runImageDTO
* @param document
* @return
* @throws InvalidFormatException
*/
private static String addPictureContent(RunImageDTO runImageDTO, CustomXWPFDocument document)
throws InvalidFormatException {
String relationId = null;
String imageUrl = runImageDTO.getImageUrl();
if (!StringUtil.isEmpty(imageUrl)) {
if (imageUrl.startsWith("http")) {
relationId = document.addPictureData(FileUtils.downloadByteFromUrl(imageUrl),
XWPFDocument.PICTURE_TYPE_JPEG);
} else {
relationId = document.addPictureData(FileUtils.file2byte(imageUrl),
XWPFDocument.PICTURE_TYPE_JPEG);
}
} else if (runImageDTO.getImageByte() != null) {
relationId = document.addPictureData(runImageDTO.getImageByte(), XWPFDocument.PICTURE_TYPE_JPEG);
}
return relationId;
}
/**
* 根据图片类型获取对应的图片类型代码
*
* @param picType
* @return
*/
public static int getPictureType(String picType) {
int res = CustomXWPFDocument.PICTURE_TYPE_PICT;
if (picType != null) {
if (picType.equalsIgnoreCase("png")) {
res = CustomXWPFDocument.PICTURE_TYPE_PNG;
} else if (picType.equalsIgnoreCase("dib")) {
res = CustomXWPFDocument.PICTURE_TYPE_DIB;
} else if (picType.equalsIgnoreCase("emf")) {
res = CustomXWPFDocument.PICTURE_TYPE_EMF;
} else if (picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")) {
res = CustomXWPFDocument.PICTURE_TYPE_JPEG;
} else if (picType.equalsIgnoreCase("wmf")) {
res = CustomXWPFDocument.PICTURE_TYPE_WMF;
}
}
return res;
}
/**
* 结束关闭文件流
*
* @param document
* @param os
*/
public static void close(CustomXWPFDocument document, OutputStream os) {
try {
if (document != null) {
document.close();
document = null;
}
if (os != null) {
os.close();
os = null;
}
} catch (Exception e) {
LOGGER.error("【WORD】WORD文件流关闭失败:" + e.getMessage(), e);
}
}
}
package com.pcloud.common.utils.word;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.util.List;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.util.Units;
import org.apache.poi.wp.usermodel.HeaderFooterType;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFooter;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pcloud.common.constant.FilePathConstant;
import com.pcloud.common.constant.WordConstant;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.FileException;
import com.pcloud.common.utils.FileUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.UUIDUitl;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.word.dto.ParagraphDTO;
import com.pcloud.common.utils.word.dto.RunDTO;
import com.pcloud.common.utils.word.dto.RunImageDTO;
import com.pcloud.common.utils.word.dto.RunTableDTO;
import com.pcloud.common.utils.word.dto.RunTextDTO;
import com.pcloud.common.utils.word.dto.WordDTO;
import com.pcloud.common.utils.word.enums.ParagraphType;
/**
* 重新定义word工具类
*
* @author:songx
* @date:2019/5/27,10:06
*/
public class WordNewUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(WordNewUtils.class);
// public static void main(String[] args) {
// List<ParagraphDTO> paragraphDTOS = new ArrayList<>();
// // 页眉
// paragraphDTOS.add(getHeader1());
// paragraphDTOS.add(getHeader2());
// // 标题
// paragraphDTOS.add(getParagraph1());
// // 内容
// paragraphDTOS.add(getParagraph2());
// paragraphDTOS.add(getParagraph3());
// paragraphDTOS.add(getParagraph4());
// paragraphDTOS.add(getParagraph4());
// // 页脚
// paragraphDTOS.add(getFooter1());
// try {
// System.out.println(create(paragraphDTOS));
// } catch (Exception e) {
// LOGGER.error(e.getMessage(), e);
// }
// System.out.println("Game over!");
// }
//
// private static ParagraphDTO getHeader1() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("?????的个人专属错题本 共40道错题", 9, "微软雅黑");
// return ParagraphDTO.newHeader(ParagraphType.text, runTextDTO);
// }
//
// private static ParagraphDTO getHeader2() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("来源《书名书名书名书名书名书名书名书书名书名书名书书名书名书名书》", 9, "微软雅黑");
// return ParagraphDTO.newHeader(ParagraphType.text, runTextDTO);
// }
//
// private static ParagraphDTO getParagraph1() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("个人专属错题本", 18, "微软雅黑", true);
// return ParagraphDTO.newParagraph(ParagraphType.text, ParagraphAlignment.CENTER, runTextDTO, 1);
// }
//
// private static ParagraphDTO getParagraph2() {
// RunTextDTO runTextDTO = RunTextDTO
// .newText("完成下面错题练习,扫描二维码核对答案,并记录练习结果:", 11, "微软雅黑", true);
// return ParagraphDTO.newParagraph(ParagraphType.text, runTextDTO, 1);
// }
//
// private static ParagraphDTO getParagraph3() {
// RunImageDTO runImageDTO = RunImageDTO
// .newImage("I:\\TEST\\image\\02.jpg", 80, 80, null, listAfterTexts3(11, "微软雅黑"));
// return ParagraphDTO.newParagraph(ParagraphType.image, TextAlignment.TOP, runImageDTO, 1);
// }
//
// private static ParagraphDTO getParagraph4() {
// RunImageDTO runImageDTO = RunImageDTO
// .newImage("I:\\TEST\\image\\2.jpg", 200, 500);
// return ParagraphDTO.newParagraph(ParagraphType.image, runImageDTO, 3);
// }
//
// private static ParagraphDTO getFooter1() {
// RunTextDTO runTextDTO = RunTextDTO.newText("反复练习,攻克错题", 11, "微软雅黑");
// return ParagraphDTO.newFooter(ParagraphType.text, ParagraphAlignment.CENTER, runTextDTO);
// }
//
// /**
// * 组装图片后面的文字
// *
// * @param fontSize
// * @param fontFamily
// * @return
// */
// private static List<RunTextDTO> listAfterTexts3(int fontSize, String fontFamily) {
// List<RunTextDTO> afterRuns = Lists.newArrayList();
// afterRuns.add(RunTextDTO.newText(" 答对", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" 10 ", fontSize, fontFamily, UnderlinePatterns.SINGLE));
// afterRuns.add(RunTextDTO.newText("道题,答错", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" 11 ", fontSize, fontFamily, UnderlinePatterns.SINGLE));
// afterRuns.add(RunTextDTO.newText("道题,日期", fontSize, fontFamily));
// afterRuns.add(RunTextDTO.newText(" " + LocalDateUtils.getDateNow() + " ", fontSize, fontFamily,
// UnderlinePatterns.SINGLE));
// return afterRuns;
// }
/**
* 创建WORD
*
* @param wordDTO
* @return
* @throws Exception
*/
public static String create(WordDTO wordDTO) throws FileException {
LOGGER.info("【WORD】创建WORD文档,<START>");
if (wordDTO == null || ListUtils.isEmpty(wordDTO.getParagraphs())) {
return null;
}
String wordTemplate = null;
String outPath = null;
CustomXWPFDocument document = null;
FileOutputStream fos = null;
try {
wordTemplate = FilePathConstant.WORD + UUIDUitl.taskName() + ".docx";
FileUtils.downloadFileFromUrl(WordConstant.TEMPLATE_URL, wordTemplate);
OPCPackage pack = POIXMLDocument.openPackage(wordTemplate);
document = new CustomXWPFDocument(pack);
// 添加内容到文档中
addParagraphs(wordDTO, document);
// 生成目标word
outPath = FilePathConstant.WORD + UUIDUitl.taskName() + ".docx";
fos = new FileOutputStream(outPath);
document.write(fos);
fos.flush();
} catch (Exception e) {
LOGGER.error("【WORD】创建WORD文档失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_CONTENT_ERROR, e.getMessage());
} finally {
close(document, fos);
FileUtils.deleteFile(wordTemplate);
}
LOGGER.info("【WORD】创建WORD文档,<END>.[outPath]=" + outPath);
return outPath;
}
/**
* 添加内容到WORD中
*
* @param wordDTO
* @param document
* @throws BizException
*/
private static void addParagraphs(WordDTO wordDTO, CustomXWPFDocument document) {
List<ParagraphDTO> paragraphDTOS = wordDTO.getParagraphs();
for (ParagraphDTO paragraphDTO : paragraphDTOS) {
ParagraphType paragraphType = paragraphDTO.getParagraphType();
if (ParagraphType.table.equals(paragraphType)) {
addTable(paragraphDTO, document);
} else if (ParagraphType.image.equals(paragraphType)) {
addImage(wordDTO, paragraphDTO, document);
} else if (ParagraphType.text.equals(paragraphType)) {
addText(wordDTO, paragraphDTO, document);
}
}
}
/**
* 获取段落
*
* @param paragraphDTO
* @param document
* @return
*/
private static XWPFParagraph getParagraph(ParagraphDTO paragraphDTO, CustomXWPFDocument document) {
if (paragraphDTO.isHeader()) {
XWPFHeader xwpfHeader = document.createHeader(HeaderFooterType.DEFAULT);
return xwpfHeader.createParagraph();
} else if (paragraphDTO.isFooter()) {
XWPFFooter xwpfFooter = document.createFooter(HeaderFooterType.DEFAULT);
return xwpfFooter.createParagraph();
} else {
return document.createParagraph();
}
}
/**
* 添加文本块
*
* @param wordDTO
* @param paragraphDTO
* @throws BizException
*/
private static void addText(WordDTO wordDTO, ParagraphDTO paragraphDTO, CustomXWPFDocument document)
throws BizException {
XWPFParagraph paragraph = getParagraph(paragraphDTO, document);
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 设置段落块样式
if (paragraphDTO.getRun() != null) {
setTextStyle(wordDTO, (RunTextDTO) paragraphDTO.getRun(), paragraph);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
setTextStyle(wordDTO, (RunTextDTO) runDTO, paragraph);
}
}
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 添加空行
*
* @param afterEmpty
* @param document
* @throws BizException
*/
private static void addEmptyText(int afterEmpty, CustomXWPFDocument document) throws BizException {
for (int i = 0; i < afterEmpty; i++) {
setTextStyle(null, RunTextDTO.newEmpty(), document.createParagraph());
}
}
/**
* 设置段落样式
*
* @param paragraphDTO
* @param paragraph
*/
private static void setParagraphStyle(ParagraphDTO paragraphDTO, XWPFParagraph paragraph) {
// 与前一行的间距
if (paragraphDTO.getSpacingBefore() > 0) {
paragraph.setSpacingBeforeLines(paragraphDTO.getSpacingBefore());
}
// 与下一行的间距
if (paragraphDTO.getSpacingAfter() > 0) {
paragraph.setSpacingAfterLines(paragraphDTO.getSpacingAfter());
}
// 对齐
if (paragraphDTO.getParagraphAlignment() != null) {
paragraph.setFontAlignment(paragraphDTO.getParagraphAlignment().getValue());
}
// 水平居中
if (paragraphDTO.getTextAlignment() != null) {
paragraph.setVerticalAlignment(paragraphDTO.getTextAlignment());
}
}
/**
* 设置文本样式
*
* @param wordDTO
* @param runTextDTO
* @param paragraph
*/
private static void setTextStyle(WordDTO wordDTO, RunTextDTO runTextDTO, XWPFParagraph paragraph) {
XWPFRun xwpfRun = paragraph.createRun();
xwpfRun.setText(runTextDTO.getText());
// 是否加粗
xwpfRun.setBold(runTextDTO.isBold());
// 字体大小
if (runTextDTO.getFontSize() > 0) {
xwpfRun.setFontSize(runTextDTO.getFontSize());
} else if (wordDTO != null && wordDTO.getFontSize() > 0) {
xwpfRun.setFontSize(wordDTO.getFontSize());
}
// 字体
if (runTextDTO.getFontFamily() != null) {
xwpfRun.setFontFamily(runTextDTO.getFontFamily());
} else if (wordDTO != null && wordDTO.getFontFamily() != null) {
xwpfRun.setFontFamily(wordDTO.getFontFamily());
}
// 下划线
if (runTextDTO.getUnderlinePatterns() != null) {
xwpfRun.setUnderline(runTextDTO.getUnderlinePatterns());
}
}
/**
* 添加表格
*
* @param paragraphDTO
* @throws BizException
*/
private static void addTable(ParagraphDTO paragraphDTO, CustomXWPFDocument document) throws BizException {
XWPFParagraph paragraph = document.createParagraph();
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 创建表格
if (paragraphDTO.getRun() != null) {
createTable((RunTableDTO) paragraphDTO.getRun(), document);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createTable((RunTableDTO) runDTO, document);
}
}
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 创建表格
*
* @param runTableDTO
* @param document
*/
private static void createTable(RunTableDTO runTableDTO, CustomXWPFDocument document) {
String[][] contents = runTableDTO.getContents();
if (contents == null || contents.length < 1) {
return;
}
int rowNum = contents.length; // 总行数
int colNum = runTableDTO.getColumnWidths().length; // 总列数
if (colNum < 1) {
throw new FileException(FileException.FILE_CONTENT_ERROR, "表格列数与内容列数不一致");
}
// 创建表格
XWPFTable ComTable = document.createTable();
// 列宽自动分割
CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();
comTableWidth.setType(STTblWidth.DXA);
comTableWidth.setW(BigInteger.valueOf(9072));
// 设置行和列
for (int i = 0; i < rowNum; i++) {
String[] cols = contents[i];
// 创建行
XWPFTableRow comTableRow = i == 0 ? ComTable.getRow(0) : ComTable.createRow();
for (int j = 0; j < colNum; j++) {
String text = (j >= cols.length || StringUtil.isEmpty(cols[j])) ? "" : cols[j];
// 填充单元格内容
XWPFTableCell cell = null;
if (i == 0) {
cell = j == 0 ? comTableRow.getCell(0) : comTableRow.addNewTableCell();
} else {
cell = comTableRow.getCell(j);
}
cell.setText(text);
cell.setVerticalAlignment(runTableDTO.getVertAlign());
}
// 行高
if (runTableDTO.getHeight() > 0) {
comTableRow.setHeight(runTableDTO.getHeight());
}
}
}
/**
* 添加图片和文本
*
* @param paragraphDTO
* @param document
*/
private static void addImage(WordDTO wordDTO, ParagraphDTO paragraphDTO, CustomXWPFDocument document) {
XWPFParagraph paragraph = null;
if (paragraphDTO.isHeader()) {
XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
paragraph = header.createParagraph();
addImageHeader(wordDTO, paragraphDTO, paragraph, header);
} else {
paragraph = document.createParagraph();
addImageContent(wordDTO, paragraphDTO, paragraph, document);
}
// 设置段落样式
setParagraphStyle(paragraphDTO, paragraph);
// 添加空行
addEmptyText(paragraphDTO.getAfterEmpty(), document);
}
/**
* 页眉中插入图片
*
* @param wordDTO
* @param paragraphDTO
* @param paragraph
* @param header
*/
private static void addImageHeader(WordDTO wordDTO, ParagraphDTO paragraphDTO, XWPFParagraph paragraph,
XWPFHeader header) {
// 创建图片
if (paragraphDTO.getRun() != null) {
createImageHeader(wordDTO, (RunImageDTO) paragraphDTO.getRun(), paragraph, header);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createImageHeader(wordDTO, (RunImageDTO) runDTO, paragraph, header);
}
}
}
/**
* 内容中插入图片
*
* @param wordDTO
* @param paragraphDTO
* @param paragraph
* @param document
*/
private static void addImageContent(WordDTO wordDTO, ParagraphDTO paragraphDTO, XWPFParagraph paragraph,
CustomXWPFDocument document) {
// 创建图片
if (paragraphDTO.getRun() != null) {
createImageContent(wordDTO, (RunImageDTO) paragraphDTO.getRun(), paragraph, document);
} else if (!ListUtils.isEmpty(paragraphDTO.getRuns())) {
for (RunDTO runDTO : paragraphDTO.getRuns()) {
createImageContent(wordDTO, (RunImageDTO) runDTO, paragraph, document);
}
}
}
/**
* 创建图片和文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
* @param document
*/
private static void createImageContent(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph,
CustomXWPFDocument document) {
// 前置文本
addImageBefore(wordDTO, runImageDTO, paragraph);
try {
// 图片
String relationId = addPictureContent(runImageDTO, document);
if (!StringUtil.isEmpty(relationId)) {
int id = document.getAllPictures().size() - 1;
document.createPicture(paragraph, relationId, id, runImageDTO.getWidth(), runImageDTO.getHeight());
}
} catch (Exception e) {
LOGGER.error("【WORD】创建WORD文档失败:" + e.getMessage(), e);
}
// 后置文本
addImageAfter(wordDTO, runImageDTO, paragraph);
}
/**
* 创建图片
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
* @param header
*/
private static void createImageHeader(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph,
XWPFHeader header) {
// 前置文本
addImageBefore(wordDTO, runImageDTO, paragraph);
// 图片
addPictureHeader(runImageDTO, paragraph, header);
// 后置文本
addImageAfter(wordDTO, runImageDTO, paragraph);
}
/**
* 图片前置文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
*/
private static void addImageBefore(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph) {
List<RunTextDTO> beforeTexts = runImageDTO.getBeforeTexts();
if (!ListUtils.isEmpty(beforeTexts)) {
for (RunTextDTO runTextDTO : beforeTexts) {
setTextStyle(wordDTO, runTextDTO, paragraph);
}
}
}
/**
* 图片后置文本
*
* @param wordDTO
* @param runImageDTO
* @param paragraph
*/
private static void addImageAfter(WordDTO wordDTO, RunImageDTO runImageDTO, XWPFParagraph paragraph) {
List<RunTextDTO> afterTexts = runImageDTO.getAfterTexts();
if (!ListUtils.isEmpty(afterTexts)) {
for (RunTextDTO runTextDTO : afterTexts) {
setTextStyle(wordDTO, runTextDTO, paragraph);
}
}
}
/**
* 添加页眉图片
*
* @param runImageDTO
* @param paragraph
* @param header
*/
private static void addPictureHeader(RunImageDTO runImageDTO, XWPFParagraph paragraph, XWPFHeader header) {
InputStream is = null;
String imageUrl = runImageDTO.getImageUrl();
if (!StringUtil.isEmpty(imageUrl)) {
if (imageUrl.startsWith("http")) {
is = new ByteArrayInputStream(FileUtils.downloadByteFromUrl(imageUrl));
} else {
is = new ByteArrayInputStream(FileUtils.file2byte(imageUrl));
}
} else if (runImageDTO.getImageByte() != null) {
is = new ByteArrayInputStream(runImageDTO.getImageByte());
}
XWPFRun run = paragraph.createRun();
try {
XWPFPicture picture = run
.addPicture(is, XWPFDocument.PICTURE_TYPE_JPEG, "123", Units.toEMU(runImageDTO.getWidth()),
Units.toEMU(runImageDTO.getHeight()));
//这段必须有,不然打开的logo图片不显示
String blipID = "";
for (XWPFPictureData picturedata : header.getAllPackagePictures()) {
blipID = header.getRelationId(picturedata);
}
picture.getCTPicture().getBlipFill().getBlip().setEmbed(blipID);
run.addTab();
} catch (Exception e) {
LOGGER.error("【WORD】WORD页眉图片生成失败:" + e.getMessage(), e);
} finally {
try {
if (is != null) {
is.close();
is = null;
}
} catch (Exception e) {
}
}
}
/**
* 添加图片数据
*
* @param runImageDTO
* @param document
* @return
* @throws InvalidFormatException
*/
private static String addPictureContent(RunImageDTO runImageDTO, CustomXWPFDocument document)
throws InvalidFormatException {
String relationId = null;
String imageUrl = runImageDTO.getImageUrl();
if (!StringUtil.isEmpty(imageUrl)) {
if (imageUrl.startsWith("http")) {
relationId = document.addPictureData(FileUtils.downloadByteFromUrl(imageUrl),
XWPFDocument.PICTURE_TYPE_JPEG);
} else {
relationId = document.addPictureData(FileUtils.file2byte(imageUrl),
XWPFDocument.PICTURE_TYPE_JPEG);
}
} else if (runImageDTO.getImageByte() != null) {
relationId = document.addPictureData(runImageDTO.getImageByte(), XWPFDocument.PICTURE_TYPE_JPEG);
}
return relationId;
}
/**
* 根据图片类型获取对应的图片类型代码
*
* @param picType
* @return
*/
public static int getPictureType(String picType) {
int res = CustomXWPFDocument.PICTURE_TYPE_PICT;
if (picType != null) {
if (picType.equalsIgnoreCase("png")) {
res = CustomXWPFDocument.PICTURE_TYPE_PNG;
} else if (picType.equalsIgnoreCase("dib")) {
res = CustomXWPFDocument.PICTURE_TYPE_DIB;
} else if (picType.equalsIgnoreCase("emf")) {
res = CustomXWPFDocument.PICTURE_TYPE_EMF;
} else if (picType.equalsIgnoreCase("jpg") || picType.equalsIgnoreCase("jpeg")) {
res = CustomXWPFDocument.PICTURE_TYPE_JPEG;
} else if (picType.equalsIgnoreCase("wmf")) {
res = CustomXWPFDocument.PICTURE_TYPE_WMF;
}
}
return res;
}
/**
* 结束关闭文件流
*
* @param document
* @param os
*/
public static void close(CustomXWPFDocument document, OutputStream os) {
try {
if (document != null) {
document.close();
document = null;
}
if (os != null) {
os.close();
os = null;
}
} catch (Exception e) {
LOGGER.error("【WORD】WORD文件流关闭失败:" + e.getMessage(), e);
}
}
}
......@@ -41,7 +41,7 @@ import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Table;
import com.lowagie.text.rtf.RtfWriter2;
import com.pcloud.common.constant.FilePathConst;
import com.pcloud.common.constant.FilePathConstant;
import com.pcloud.common.constant.WordConstant;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.FileException;
......@@ -84,7 +84,7 @@ public class WordUtils {
RtfWriter2 rtfWriter2 = null;
try {
// 输出路径
outPath = FilePathConst.WORD_PATH + UUIDUitl.taskName() + ".doc";
outPath = FilePathConstant.WORD + UUIDUitl.taskName() + ".doc";
FileUtils.creatFiles(outPath);
// 创建输出流
os = new FileOutputStream(new File(outPath));
......@@ -302,14 +302,14 @@ public class WordUtils {
CustomXWPFDocument document = null;
FileOutputStream fos = null;
try {
wordTemplate = FilePathConst.WORD_PATH + UUIDUitl.taskName() + ".docx";
wordTemplate = FilePathConstant.WORD + UUIDUitl.taskName() + ".docx";
FileUtils.downloadFileFromUrl(WordConstant.TEMPLATE_URL, wordTemplate);
OPCPackage pack = POIXMLDocument.openPackage(wordTemplate);
document = new CustomXWPFDocument(pack);
// 添加内容到文档中
addChunks(wordPOs, document);
// 生成目标word
outPath = FilePathConst.WORD_PATH + UUIDUitl.taskName() + ".docx";
outPath = FilePathConstant.WORD + UUIDUitl.taskName() + ".docx";
fos = new FileOutputStream(outPath);
document.write(fos);
fos.flush();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment