Browse Source

Merge remote-tracking branch 'origin/master'

master
yxt_njy 1 year ago
parent
commit
1958d3486f
  1. 32
      yxt-common/yxt-common-base/pom.xml
  2. 15
      yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/config/component/DocPdfComponent.java
  3. 3
      yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/config/component/FileUploadComponent.java
  4. 1
      yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/config/web/FileController.java
  5. 34
      yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/JPushServer.java
  6. 200
      yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/TransformMoney.java
  7. 140
      yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/WordConvertUtils.java
  8. 89
      yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/WordUtils.java
  9. 1
      yxt-common/yxt-common-core/src/main/java/com/yxt/common/core/domain/BaseEntity.java
  10. 100
      yxt-parent/pom.xml

32
yxt-common/yxt-common-base/pom.xml

@ -120,12 +120,6 @@
<artifactId>javase</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
@ -165,17 +159,11 @@
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
@ -196,6 +184,26 @@
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.25</version>
</dependency>
</dependencies>
<distributionManagement>

15
yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/config/component/DocPdfComponent.java

@ -35,6 +35,12 @@ public class DocPdfComponent {
@Value("${templateUrl.prefixUrl:http://127.0.0.1:8080/template/}")
private String prefixTemplateUrl;
/* @Value("${templateUrl.uploadPdfUrl:http://127.0.0.1:8080/template/pdf/}")
private String uploadPdfUrl;
@Value("${templateUrl.prefixPdfUrl:http://127.0.0.1:8080/template/pdf/}")
private String prefixPdfUrl;*/
/**
* 根据ftl模板生成word
*
@ -44,7 +50,6 @@ public class DocPdfComponent {
* @return 返回word文件路径和链接路径
*/
public Map<String, String> creatWord(Map<String, Object> map, String typeName, String fileName) {
// String dateStr = DateUtils.dateConvertStr(new Date(), "yyyyMMdd");
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
String targetPath = uploadTemplateUrl + dateStr;
try {
@ -171,4 +176,12 @@ public class DocPdfComponent {
public String getPrefixTemplateUrl() {
return prefixTemplateUrl;
}
/* public String getUploadPdfUrl() {
return uploadPdfUrl;
}
public String getPrefixPdfUrl() {
return prefixPdfUrl;
}*/
}

3
yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/config/component/FileUploadComponent.java

@ -87,7 +87,8 @@ public class FileUploadComponent {
//2021.10.16 截取文件后缀名以外的名字
String prefixName = fileName.substring(0, fileName.indexOf("."));
// 新文件名:文件原名称 + ‘-’ + 生成的时间戳 2021.10.16
String filePath = prefixName + "_" + dateFileName() + suffixName;
// String filePath = prefixName + "_" + dateFileName() + suffixName;
String filePath = dateFileName() + suffixName;
if (hasDateDir) {
String dateStr = DateUtil.format(new Date(), "yyyyMMdd");
// 增加日期目录

1
yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/config/web/FileController.java

@ -100,7 +100,6 @@ public class FileController {
@GetMapping("/download")
public ResultBean download(@RequestParam(value = "filePath") String filePath, @RequestParam(value = "outFileName") String outFileName) {
ResultBean rb = ResultBean.fireFail();
File file = fileUploadComponent.findFileByPath(filePath);
if (file == null)
return rb.setMsg("文件不存在");

34
yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/JPushServer.java

@ -141,6 +141,40 @@ public class JPushServer {
}
}
/**
* 待阅消息推送(使用别名)
* @param title 标题
* @param content 内容
* @param msg_type 消息类别
*/
public static void sendPushAliass(String title, String content, String state, String name, String... alias) {
Map<String, String> extras = new HashMap<>();
extras.put("class_name", "com.anrui.android.activity.ReadActivity");
extras.put("state", "0");
extras.put("name", name);
ClientConfig clientConfig = ClientConfig.getInstance();
final JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY, null, clientConfig);
final PushPayload payload = buildPushObject_android_and_iosAlias(title, content, "com.anrui.android.activity.ReadActivity", extras, alias);
try {
PushResult result = jpushClient.sendPush(payload);
System.out.println("Got result - " + result);
// 如果使用 NettyHttpClient,需要手动调用 close 方法退出进程
// jpushClient.close();
} catch (APIConnectionException e) {
System.out.println("Connection error. Should retry later. "+e);
System.out.println("Sendno: " + payload.getSendno());
} catch (APIRequestException e) {
System.out.println("Error response from JPush server. Should review and fix it. "+ e);
System.out.println("HTTP Status: " + e.getStatus());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Msg ID: " + e.getMsgId());
System.out.println("Sendno: " + payload.getSendno());
}
}
/**
* (广播)
* @param title 标题

200
yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/TransformMoney.java

@ -0,0 +1,200 @@
package com.yxt.common.base.utils;
import java.math.BigDecimal;
/**
* @Author dimengzhe
* @Date 2022/11/8 19:10
* @Description
*/
public class TransformMoney {
/*
以下摘自百度百科http://baike.baidu.com/view/359995.htm
大写数字规则
中文大写金额数字应用正楷或行书填写如壹亿等字样不得用一廿或0填写不得自造简化字如果金额数字书写中使用繁体字如贰亿圆的也可
中文大写金额数字到"元"为止的"元"之后应写"整""正""角"之后可以不写"整""正"大写金额数字有"分""分"后面不写"整""正"
中文大写金额数字前应标明"人民币"字样大写金额数字有"分""分"后面不写"整""正"
中文大写金额数字前应标明"人民币"字样大写金额数字应紧接"人民币"字样填写不得留有空白大写金额数字前未印"人民币"字样的应加填"人民币"三字在票据和结算凭证大写金额栏内不得预印固定的"仟、佰、拾、万、仟、佰、拾、元、角、分"字样
阿拉伯数字小写金额数字中有"0"中文大写应按照汉语语言规律金额数字构成和防止涂改的要求进行书写举例如下
阿拉伯数字中间有"0"中文大写要写"零"1409.50应写成人民币壹仟肆佰零玖元伍角
阿拉伯数字中间连续有几个"0"中文大写金额中间可以只写一个"零"6007.14应写成人民币陆仟零柒元壹角肆分
阿拉伯金额数字万位和元位是"0"或者数字中间连续有几个"0"万位元位也是"0"但千位角位不是"0"中文大写金额中可以只写一个零字也可以不写"零"1680.32应写成人民币壹仟陆佰捌拾元零叁角贰分或者写成人民币壹仟陆佰捌拾元叁角贰分又如107000.53应写成人民币壹拾万柒仟元零伍角叁分或者写成人民币壹拾万零柒仟元伍角叁分
阿拉伯金额数字角位是"0"而分位不是"0"中文大写金额"元"后面应写"零"16409.02应写成人民币壹万陆仟肆佰零玖元零贰分又如325.04应写成人民币叁佰贰拾伍元零肆分
*/
static final String big = "零壹贰叁肆伍陆柒捌玖"; //大写
static final String[] units = {"仟佰拾", "角分"}; //单位
/**
* 双精度浮点数转换成字符串
*
* 1如果直接用String.toString(double d)方法超大数额会出现科学计数法的字符串
* 2如果整数部分超过15位数低位部分可能出现误差所以不支持超过15位整数的数值
* 一般数据库设计金额字段时都不会超过15位整数如oracle用Number(18,3)的类型表示整数部分最多15位小数点后保留3位有效数字
*/
public static String getDecimalStr(double d) {
//设置小数点后的精度,保留两位
/*四舍五入结果参考:
0.005,//0.01入
0.015,//0.01舍
0.025,//0.03入
0.035,//0.04入
0.045,//0.04舍
0.055,//0.06入(前一位是5则入)
*/
String str = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
/*
//经过测试,以下三种方法都是可以用的:
//或1:
String str = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString();
//或2:
DecimalFormat format = new DecimalFormat();
format.applyPattern("#################0.00");
String str = format.format(d);
//或3:
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setMinimumFractionDigits(2);
decimalFormat.setMaximumFractionDigits(2);
decimalFormat.setGroupingUsed(false);
decimalFormat.setMaximumIntegerDigits(15);
decimalFormat.setMinimumIntegerDigits(15);
str=decimalFormat.format(d);
*/
//如果结果是整数,则去掉尾巴
if (str.endsWith(".00")) {
str = str.replace(".00", "");
}
return str;
}
/**
* 金额是double类型的要先转换成字符串
*
* @param money 金额
*/
public static String transform(double money) {
String moneyStr = getDecimalStr(money);
return transform(moneyStr);
}
/**
* 金额转换成大字
* 我的思路
* 1double数值转换成数值字符串
* 2处理整数部分
* 填充到16位不足16位则前面补'0'然后右起分成四组每组根据"x仟x佰x拾x"的规则转换成大写若该组为"0000"则结果是"零"
* 对这四组结果从高位到低位拼接起来规则[组4][组3]亿[组2][组1]
* 3处理小数部分不多说
*/
public static String transform(String moneyStr) {
String[] parts = moneyStr.split("\\."); //区别整数、小数部分
String result = "";
//处理整数部分
int length = parts[0].length(); //整数部分的位数
if (length > 15) {
return "金额太大,不能处理整数部分超过15位的金额!";
}
String intPart = parts[0];
//填充到16位,因为是分4组,每组4个数字
while (intPart.length() < 16) {
intPart = '0' + intPart;
}
//共分四组,右起四位一组,例如:0001,2003,0030,3400
String[] groups = new String[4];
for (int i = 0; i < groups.length; i++) {
int start = intPart.length() - (i + 1) * 4; //开始位置
int end = intPart.length() - i * 4; //结束位置
groups[i] = intPart.substring(start, end);
groups[i] = transformGroup(groups[i]); //当前组的四位数字转换成大写
}
//对这四组结果从高位到低位拼接起来,规则:[组4]万[组3]亿[组2]万[组1]圆
for (int i = groups.length - 1; i >= 0; i--) {
if (i == 3) { //第四组:万亿级
if (!"零".equals(groups[i])) {
result += groups[i] + "万";
}
} else if (i == 2) { //第三组:亿级
if (!"零".equals(groups[i])) {
result += groups[i] + "亿";
} else {
if (result.length() > 0) {
result += "亿";
}
}
} else if (i == 1) { //第二组:万级
if (!"零".equals(groups[i])) {
result += groups[i] + "万";
} else if (!groups[i].startsWith("零")) {
result += groups[i];
}
} else { //第一组:千级
if (!"零".equals(groups[i]) || result.length() == 0) {
result += groups[i];
}
result += "元";
}
}
if (!"零元".equals(result) && result.startsWith("零")) {
result = result.substring(1, result.length()); //最前面的可能出现的“零”去掉
}
//处理小数部分
if (parts.length == 2) {
String decimalPart = parts[1]; //小数部分
if ("0".equals(decimalPart)){//小数为零,则加上“整”
result += "整";
}else {
for (int i = 0; i < decimalPart.length(); i++) {
int num = Integer.valueOf(decimalPart.charAt(i) + ""); //提取数字,左起
result += big.charAt(num) + "" + units[1].charAt(i); //数字变大写加上单位
}
result = result.replace("零角", "零"); //去掉"零角"的"角"
result = result.replace("零分", ""); //去掉"零分"
}
} else {
result += "整"; //没有小数部分,则加上“整”
}
return result;
}
/**
* 处理整数部分的组右起每四位是一组
*
* @param group 四位数字字符串
*/
public static String transformGroup(String group) {
String result = "";
int length = group.length();
for (int i = 0; i < length; i++) {
int digit = Integer.valueOf(group.charAt(i) + ""); //单个数字,左起
String unit = ""; //单位
if (i != length - 1) {
unit = units[0].charAt(i) + "";
}
result += big.charAt(digit) + unit; //数字变大写加上单位
}
result = result.replace("零仟", "零");
result = result.replace("零佰", "零");
result = result.replace("零拾", "零");
while (result.contains("零零")) {
result = result.replace("零零", "零"); //如果有“零零”则变成一个“零”
}
if (!"零".equals(result) && result.endsWith("零")) {
result = result.substring(0, result.length() - 1); //最未尾的可能出现的“零”去掉
}
return result;
}
}

140
yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/WordConvertUtils.java

@ -1,14 +1,20 @@
package com.yxt.common.base.utils;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import org.apache.pdfbox.io.MemoryUsageSetting;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import java.io.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
@ -22,13 +28,11 @@ public class WordConvertUtils {
* 根据ftl模板生成word
*
* @param map 数据
* @param typeName 模板名称
* @param sourcePath 模板路径
* @param targetPath 保存目标路径
* @param fileName 文件名
*/
public static void creatWord(Map<String, Object> map, File file, String targetPath, String fileName, String dir) {
String curDate = DateUtils.dateConvertStr(new Date(), "yyyy年MM月dd日");
// String curDate = DateUtils.dateConvertStr(new Date(), "yyyy年MM月dd日");
try {
//Configuration 用于读取ftl文件
Configuration configuration = new Configuration(new Version("2.3.0"));
@ -46,12 +50,57 @@ public class WordConvertUtils {
Template template = configuration.getTemplate(file.getName(), "utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
template.process(map, out);
file.delete();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void creatWord1(Map<String, Object> map, File file, String targetPath, String fileName, File dir) {
// String curDate = DateUtils.dateConvertStr(new Date(), "yyyy年MM月dd日");
try {
//Configuration 用于读取ftl文件
Configuration configuration = new Configuration(new Version("2.3.0"));
configuration.setDefaultEncoding("utf-8");
//指定路径的第二种方式
configuration.setDirectoryForTemplateLoading(dir);
//输出文档路径及名称
File targetFile = new File(targetPath);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
targetPath = targetPath + fileName;
File outFile = new File(targetPath);
//以utf-8的编码读取ftl文件
Template template = configuration.getTemplate(file.getName(), "utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
template.process(map, out);
file.delete();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void inputStreamToFile(InputStream ins, File file) {
OutputStream os = null;
try {
os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* word转换为pdf
*
@ -95,7 +144,90 @@ public class WordConvertUtils {
System.out.println("关闭文档");
// 如果没有这句话,winword.exe进程将不会关闭
ComThread.Release();
new File(wordFile).delete();
}
}
/**
* @param inputFile 源文件全路径你的PDF文件地址
* @param outputFile 输出全路径添加水印后生成PDF存放的地址
* @param outDir 添加水印后生成PDF存放的目录
* @param waterMarkName 你的水印
* @return 注意源文件全路径和输出全路径最好不要写同一样的不然有可能会报java.io.FileNotFoundException:请求的操作无法在使用用户映射区域打开的文件上执行的错误
*/
public static boolean waterMark(String inputFile, String outputFile, String outDir, String waterMarkName) {
try {
File targetFile = new File(outDir);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
// 这里的字体设置比较关键,这个设置是支持中文的写法
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体
int total = reader.getNumberOfPages() + 1;
PdfContentByte under;
Rectangle pageRect = null;
for (int i = 1; i < total; i++) {
pageRect = stamper.getReader().getPageSizeWithRotation(i);
// 计算水印X,Y坐标
// float x = pageRect.getWidth() / 10;
// float y = pageRect.getHeight() / 10 - 10;
float x = 290;
float y = 400;
// 获得PDF最顶层
under = stamper.getOverContent(i);
under.saveState();
// set Transparency
PdfGState gs = new PdfGState();
// 设置透明度为0.2
// gs.setFillOpacity(1.f);
gs.setFillOpacity(0.3f);
under.setGState(gs);
under.restoreState();
under.beginText();
under.setFontAndSize(base, 35);
// under.setColorFill(BaseColor.ORANGE);
under.setColorFill(BaseColor.BLACK);
// 水印文字成45度角倾斜
under.showTextAligned(Element.ALIGN_CENTER, waterMarkName, x, y, 45);
// 添加水印文字
under.endText();
under.setLineWidth(1f);
under.stroke();
}
stamper.close();
reader.close();
new File(inputFile).delete();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* pdf合并
*
* @param files 源文件的相对路径
* @param targetPath 输出的pdf的路径
* @return
* @throws Exception
*/
public static File mulFile2One(List<File> files, String targetPath) throws Exception {
PDFMergerUtility mergePdf = new PDFMergerUtility();
for (File f : files) {
if (f.exists() && f.isFile()) {
// 循环添加要合并的pdf
mergePdf.addSource(f);
}
}
// 设置合并生成pdf文件名称
mergePdf.setDestinationFileName(targetPath);
// 合并pdf
mergePdf.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
//ToDo:根据需求实现是否要删除源文件
return new File(targetPath);
}
}

89
yxt-common/yxt-common-base/src/main/java/com/yxt/common/base/utils/WordUtils.java

@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
@ -84,6 +85,18 @@ public class WordUtils {
* @param pdfName pdf名称
*/
public static void doc2pdf(String wordFile, String pdfPath, String pdfName) {
doc2pdf( wordFile, pdfPath, pdfName,"");
}
/**
* word转换为pdf
*
* @param wordFile word的路径
* @param pdfPath pdf的路径
* @param pdfName pdf名称
* @param mark 水印
*/
public static void doc2pdf(String wordFile, String pdfPath, String pdfName,String mark) {
ActiveXComponent app = null;
System.out.println("开始转换...");
long start = System.currentTimeMillis();
@ -97,6 +110,10 @@ public class WordUtils {
// 打开文档
document = Dispatch.call(documents, "Open", wordFile, false, true).toDispatch();
// 如果文件存在的话,不会覆盖,会直接报错,所以我们需要判断文件是否存在
if (StringUtils.isNotBlank(mark)){
addWatermark(app,documents,document,wordFile,wordFile,mark);
}
//setWaterMark(app,mark);
File targetFile = new File(pdfPath);
if (!targetFile.exists()) {
targetFile.mkdirs();
@ -125,15 +142,81 @@ public class WordUtils {
}
public static void addWatermark(ActiveXComponent wordApp, Dispatch documents,Dispatch doc,String src, String des, String text) throws Exception {
ComThread.InitMTA();
// 文档隐藏时进行应用操作
wordApp.setProperty("Visible", new Variant(false));
// 实例化模板Workbooks对象
//打开文件
Dispatch docSelect = Dispatch.get(wordApp, "Selection").toDispatch();
//取得活动窗体对象
Dispatch activeDoc = wordApp.getProperty("ActiveWindow").toDispatch();
try {
//添加水印,多个水印
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
//取得活动窗体对象
Dispatch activePan = Dispatch.get(activeDoc, "ActivePane").toDispatch();
//取得视窗对象
Dispatch view = Dispatch.get(activePan, "View").toDispatch();
//打开页眉
Dispatch.put(view, "SeekView", new Variant(1));
//获取页眉和页脚
Dispatch headfooter = Dispatch.get(docSelect, "HeaderFooter")
.toDispatch();
//取得图形对象
Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch();
/**插入文字并转为图片
* 操作对象方法艺术字格式水印内容字体字体大小字体是否粗体字体是否斜体左边距上边距
*/
Dispatch selection = Dispatch.call(shapes, "AddTextEffect",
new Variant(9), text, "宋体", new Variant(10),
new Variant(false), new Variant(false), new Variant(0),
new Variant(0)).toDispatch();
//选中当前文档水印
Dispatch.call(selection, "Select");
Dispatch shapeRange = Dispatch.get(docSelect, "ShapeRange")
.toDispatch();
Dispatch textEffect = Dispatch.get(shapeRange, "TextEffect")
.toDispatch();
Dispatch.put(textEffect, "NormalizedHeight", new Boolean(false));
Dispatch line = Dispatch.get(shapeRange, "Line").toDispatch();
Dispatch.put(line, "Visible", new Boolean(false));
Dispatch fill = Dispatch.get(shapeRange, "Fill").toDispatch();
Dispatch.put(fill, "Visible", new Boolean(true));
// 设置水印透明度
Dispatch.put(fill, "Transparency", new Variant(0.1));
Dispatch foreColor = Dispatch.get(fill, "ForeColor").toDispatch();
//设置水印颜色
Dispatch.put(foreColor, "RGB", new Variant(16711620));
Dispatch.call(fill, "Solid");
// 设置水印旋转
Dispatch.put(shapeRange, "Rotation", new Variant(315));
Dispatch.put(shapeRange, "LockAspectRatio", new Boolean(true));
//设置水印宽高
Dispatch.put(shapeRange, "Height", new Variant(2.2));
Dispatch.put(shapeRange, "Width", new Variant(18));
//设置水印位置,相对左上角
Dispatch.put(shapeRange, "Left", new Variant(j * 120 - 60));
Dispatch.put(shapeRange, "Top", new Variant(i * 270));
//恢复视图
Dispatch.put(view, "SeekView", new Variant(0));
}
}
//另存为目标文件
Dispatch.call(doc, "SaveAS",des,new Variant(true) );
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("关闭文档");
}
}
public static void main(String[] args) {
Map<String, Object> dataMap = new HashMap<String, Object>();
String curDate = DateUtils.dateConvertStr(new Date(), "yyyy年MM月dd日");
dataMap.put("partyA", "甲方卖出方");
dataMap.put("partyB", "乙方买受方");
// 图片
// dataMap.put("imgStr1", getImageStr("D:\\fileTest\\name.png"));
// dataMap.put("imgStr2", getImageStr("D:\\fileTest\\zhang.png"));
// 列表
Car car1 = new Car("奔驰", "1001", "v10");
Car car2 = new Car("宝马", "1002", "v10");

1
yxt-common/yxt-common-core/src/main/java/com/yxt/common/core/domain/BaseEntity.java

@ -130,7 +130,6 @@ public class BaseEntity extends EntityWithId {
@ApiModelProperty("字符型编号")
private String sid = UUID.randomUUID().toString();
// @Version
@ApiModelProperty("记录版本,锁")
private Integer lockVersion = 0;

100
yxt-parent/pom.xml

@ -77,6 +77,8 @@
<poi.version>4.1.2</poi.version>
<flowable.version>6.5.0</flowable.version>
<pdfbox.version>2.0.25</pdfbox.version>
</properties>
<!-- 依赖声明 -->
@ -401,56 +403,62 @@
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>${pdfbox.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
</dependencies>
<!-- <repositories>-->
<!-- <repository>-->
<!-- <id>aliyun-central</id>-->
<!-- <url>https://maven.aliyun.com/repository/central</url>-->
<!-- </repository>-->
<!-- <repository>-->
<!-- <id>aliyun-public</id>-->
<!-- <url>https://maven.aliyun.com/repository/public</url>-->
<!-- </repository>-->
<!-- <repository>-->
<!-- <id>aliyun-google</id>-->
<!-- <url>https://maven.aliyun.com/repository/google</url>-->
<!-- </repository>-->
<!-- <repository>-->
<!-- <id>aliyun-spring</id>-->
<!-- <url>https://maven.aliyun.com/repository/spring</url>-->
<!-- </repository>-->
<!-- </repositories>-->
<!-- <pluginRepositories>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-central</id>-->
<!-- <url>https://maven.aliyun.com/repository/central</url>-->
<!-- </pluginRepository>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-public</id>-->
<!-- <url>https://maven.aliyun.com/repository/public</url>-->
<!-- </pluginRepository>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-google</id>-->
<!-- <url>https://maven.aliyun.com/repository/google</url>-->
<!-- </pluginRepository>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-spring</id>-->
<!-- <url>https://maven.aliyun.com/repository/spring</url>-->
<!-- </pluginRepository>-->
<!-- </pluginRepositories>-->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://nexus3.yyundong.com/repository/yxt-mvn-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://nexus3.yyundong.com/repository/yxt-mvn-snapshot/</url>
</snapshotRepository>
</distributionManagement>
<!-- <repositories>-->
<!-- <repository>-->
<!-- <id>aliyun-central</id>-->
<!-- <url>https://maven.aliyun.com/repository/central</url>-->
<!-- </repository>-->
<!-- <repository>-->
<!-- <id>aliyun-public</id>-->
<!-- <url>https://maven.aliyun.com/repository/public</url>-->
<!-- </repository>-->
<!-- <repository>-->
<!-- <id>aliyun-google</id>-->
<!-- <url>https://maven.aliyun.com/repository/google</url>-->
<!-- </repository>-->
<!-- <repository>-->
<!-- <id>aliyun-spring</id>-->
<!-- <url>https://maven.aliyun.com/repository/spring</url>-->
<!-- </repository>-->
<!-- </repositories>-->
<!-- <pluginRepositories>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-central</id>-->
<!-- <url>https://maven.aliyun.com/repository/central</url>-->
<!-- </pluginRepository>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-public</id>-->
<!-- <url>https://maven.aliyun.com/repository/public</url>-->
<!-- </pluginRepository>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-google</id>-->
<!-- <url>https://maven.aliyun.com/repository/google</url>-->
<!-- </pluginRepository>-->
<!-- <pluginRepository>-->
<!-- <id>aliyun-spring</id>-->
<!-- <url>https://maven.aliyun.com/repository/spring</url>-->
<!-- </pluginRepository>-->
<!-- </pluginRepositories>-->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://nexus3.yyundong.com/repository/yxt-mvn-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://nexus3.yyundong.com/repository/yxt-mvn-snapshot/</url>
</snapshotRepository>
</distributionManagement>
</project>
Loading…
Cancel
Save