Commit 59ae5c0b by Simon Cheng

'电子印章功能'

parent bf328037
package com.yd.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Desc:properties文件获取工具类
* Created by hafiz.zhang on 2016/9/15.
*/
public class PDFConfiguration {
private static final Logger logger = LoggerFactory.getLogger(PDFConfiguration.class);
private static Properties props;
static{
loadProps();
}
synchronized static private void loadProps(){
logger.info("开始加载properties文件内容.......");
props = new Properties();
InputStream in = null;
try
{
in = PDFConfiguration.class.getClassLoader().getResourceAsStream("PDFConfiguration.properties");
props.load(in);
} catch (FileNotFoundException e) {
logger.error("jdbc.properties文件未找到");
} catch (IOException e) {
logger.error("出现IOException");
} finally {
try {
if(null != in) {
in.close();
}
} catch (IOException e) {
logger.error("jdbc.properties文件流关闭出现异常");
}
}
logger.info("加载properties文件内容完成...........");
logger.info("properties文件内容:" + props);
}
public static String getProperty(String key){
if(null == props) {
loadProps();
}
return props.getProperty(key);
}
public static String getProperty(String key, String defaultValue) {
if(null == props) {
loadProps();
}
return props.getProperty(key, defaultValue);
}
}
\ No newline at end of file
pdf.template=/opt/tomcat8/conf/ydpdf/pdfres/templatePractitionerContract.pdf
pdf.signImage=/opt/tomcat8/conf/ydpdf/pdfres/上海银盾保险经纪有限公司.png
pdf.keyStorePath=/opt/tomcat8/conf/ydpdf/pdfres/4929078_m.zuihuibi.cn.pfx
pdf.keyPasswordFile=/opt/tomcat8/conf/ydpdf/pdfres/pfx-password.txt
pdf.check=/opt/tomcat8/conf/ydpdf/pdfres/check.png
pdf.uncheck=/opt/tomcat8/conf/ydpdf/pdfres/uncheck.png
pdf.temp.path=/opt/tomcat8/temp/
pdf.position.x=450
pdf.position.y=150
......@@ -183,14 +183,94 @@
<artifactId>aliyun-java-sdk-dm</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.60</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.60</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.libs.pdf</groupId>
<artifactId>com-libs-pdf</artifactId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${basedir}/lib/com-libs-pdf-0.0.1.jar</systemPath>
</dependency>
</dependencies>
<build>
<finalName>ydapi</finalName>
<resources>
<resource>
<!--<targetPath>/WEB-INF/classes</targetPath>-->
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>compile</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
<includeScope>system</includeScope>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
......
package com.yd.api.practitioner;
import com.yd.api.practitioner.service.PractitionerHiringService;
import com.yd.api.practitioner.vo.hiring.*;
import com.yd.api.result.JsonResult;
......@@ -224,6 +223,11 @@ public class PractitionerHiringController {
@RequestMapping("/hiringApprove")
public Object hiringApprove(@RequestBody HiringApproveRequestVO requestVO){
JsonResult result = new JsonResult();
try {
PractitionerPDFTest.main(null);
} catch (Exception e) {
e.printStackTrace();
}
HiringApproveResponseVO responseVO = practitionerHiringService.hiringApprove(requestVO);
result.addResult(responseVO);
result.setData(responseVO);
......
package com.yd.api.practitioner.service;
import java.util.Map;
public interface PractitionerHiringContractService {
String generatePractitionerContract(Long hiringBasicInfoId);
Map<String, String> initHiringBasicInfoData(Long hiringBasicInfoId);
Map<String, String> initHiringImageInfoData(Long hiringBasicInfoId);
String generatePractitionerPDF(String practitionerNO,Map<String, String> initDatas,Map<String, String> initImages);
}
\ No newline at end of file
package com.yd.api.practitioner.service.impl;
import com.yd.api.practitioner.service.PractitionerHiringContractService;
import com.yd.dal.entity.practitioner.hiring.HiringBasicInfo;
import com.yd.dal.entity.practitioner.hiring.HiringMemberShip;
import com.yd.dal.entity.practitioner.hiring.HiringPersonalStatements;
import com.yd.dal.entity.practitioner.hiring.HiringWorkingExperience;
import com.yd.dal.mapper.customer.AclPractitionerHiringBasicInfoMapper;
import com.yd.dal.mapper.customer.AclPractitionerHiringMembershipMapper;
import com.yd.dal.mapper.customer.AclPractitionerHiringPersonalStatementsMapper;
import com.yd.dal.mapper.customer.AclPractitionerHiringWorkingExperienceMapper;
import com.yd.dal.mapper.practitioner.PractitionerHiringMapper;
import com.yd.libs.pdf.PDFSign;
import com.yd.libs.pdf.PDFTemplate;
import com.yd.rmi.ali.oss.service.OssService;
import com.yd.util.CommonUtil;
import com.yd.util.PDFConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service("PractitionerHiringContractService")
public class PractitionerHiringContractServiceImpl implements PractitionerHiringContractService {
@Autowired
private OssService ossService;
@Resource
private PractitionerHiringMapper practitionerHiringMapper;
/**
* 申请经纪人的ID,生成电子合同,在经纪人表中自动生成记录
* @param hiringBasicInfoId
* @return
*/
@Override
public String generatePractitionerContract(Long hiringBasicInfoId) {
//1、从DB中按照hiringBasicInfoId,获取经纪人的文字信息
Map<String, String> initDatas = new HashMap<String, String>();
initDatas = initHiringBasicInfoData(hiringBasicInfoId);
//2、从DB中按照hiringBasicInfoId,从oss上获取经纪人上传的图片信息,需存本地临时文件
Map<String, String> initImages = new HashMap<String, String>();
initImages = initHiringImageInfoData(hiringBasicInfoId);
//ag_acl_practitioner.employee_no
String practitionerNO = "YDSH00009";
String contractNO = "CTSH00009";
//3、PDF模板生成合同文件,存本地临时文件后,上传oss
String contractFile = generatePractitionerPDF(practitionerNO,initDatas,initImages);
//上传至oss ossService
String contractFileOSS = contractFile;
//4、经纪人表生成经纪人记录ag_acl_practitioner,ag_acl_practitioner.contract_oss_path
// 经纪人经纪人类型级别定义表ag_acl_practitioner_setting
return contractFileOSS;
}
/**
* 申请ID的数据列表
* @param hiringBasicInfoId
* @return
*/
@Override
public Map<String, String> initHiringBasicInfoData(Long hiringBasicInfoId) {
//PDF模板中定义的文字key,和值的集合
Map<String, String> data = new HashMap<String, String>();
HiringBasicInfo hiringBasicInfo = practitionerHiringMapper.findHiringBasicInfo(hiringBasicInfoId);
//模板文件生成零时文件
//甲方
String firstParty = PDFConfiguration.getProperty("pdf.firstParty");
//甲方负责人
String firstPartyResponser = PDFConfiguration.getProperty("pdf.firstPartyResponser");
//甲方地址
String firstPartyAddress = PDFConfiguration.getProperty("pdf.firstPartyAddress");
return data;
}
/**
* 申请ID的图片列表,本地地址。从oss上拉到本地
* @param hiringBasicInfoId
* @return
*/
@Override
public Map<String, String> initHiringImageInfoData(Long hiringBasicInfoId) {
//PDF模板中定义的文字key,和值的集合
Map<String, String> images = new HashMap<String, String>();
//选中
String check = PDFConfiguration.getProperty("pdf.check");
//未选中
String uncheck = PDFConfiguration.getProperty("pdf.uncheck");
return images;
}
/**
* 用采集过来的经纪人数据、图片,生成该经纪人的电子合同
* @param initDatas
* @param initImages
* @return
*/
@Override
public String generatePractitionerPDF(String practitionerNO,Map<String, String> initDatas,Map<String, String> initImages) {
String templatePDF = "D:\\pcs12\\templatePractitionerContract.pdf";
templatePDF = PDFConfiguration.getProperty("pdf.template");
//模板文件生成零时文件
String tmpPathPDF = PDFConfiguration.getProperty("pdf.temp.path");
//PDF模板输出结果文件
String templateResultPDF = tmpPathPDF + practitionerNO + "-template.pdf";
//按模板填充数据生成结果PDF
PDFTemplate.generatePDF(templatePDF,templateResultPDF,initDatas,initImages);
//加盖电子印章结果文件
String signResultPDF = "D:\\pcs12\\signedYD.pdf";
signResultPDF = tmpPathPDF + practitionerNO + "-signedYD.pdf";
String password="UC645YlB";
password = CommonUtil.readFileTxt(PDFConfiguration.getProperty("pdf.keyPasswordFile"));
String keyStorePath="D:\\pcs12\\4929078_m.zuihuibi.cn.pfx";
keyStorePath = PDFConfiguration.getProperty("pdf.keyStorePath");;
//准备加盖电子印章的源文件
String signSourcePDF = templateResultPDF;
//电子印章文件
String signImage="D:\\pcs12\\上海银盾保险经纪有限公司.png";
signImage = PDFConfiguration.getProperty("pdf.signImage");
float x = 450;
float y = 150;
x = Float.parseFloat(PDFConfiguration.getProperty("pdf.position.x"));
y = Float.parseFloat(PDFConfiguration.getProperty("pdf.position.y"));
try {
PDFSign.sign(signResultPDF,password,keyStorePath,signSourcePDF,signImage,x,y);
} catch (Exception e) {
e.printStackTrace();
}
return signResultPDF;
}
}
package com.yd.api.practitioner.vo;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.yd.libs.pdf.*;
public class PDFHiringTest {
/**
* 填充数据源
* 其中data存放的key值与pdf模板中的文本域值相对应
*/
public static Map<String, String> initData() {
String secondSignature = "张亮";
String secondPartyIDNo = "330127199611154184";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String secondSignatureDate = format.format(new Date());
Map<String, String> data = new HashMap<String, String>();
//1页
data.put("contactNo", "C-SH-0001");
data.put("practitionerNo", "YDSH00127");
data.put("subsystem", "抱一");
data.put("practitioner", secondSignature);
data.put("idNo", secondPartyIDNo);
data.put("residentAddress", "上海市浦东新区张杨路560号中融恒瑞国际西楼1706室");
data.put("mobileNo", "13661741633");
//7页
data.put("firstParty", "上海银盾保险经纪有限公司");
data.put("firstPartyResponer", "上海银盾保险经纪有限公司");
data.put("firstPartyAddress", "上海市浦东新区张杨路560号中融恒瑞国际西楼1706室");
data.put("secondParty", secondSignature);
data.put("secondPartyIDNo", secondPartyIDNo);
data.put("secondPartyAddress", "上海市浦东新区张杨路560号中融恒瑞国际西楼1706室");
data.put("secondMobileNo", "1366668888");
data.put("secondSubsystemOwner", "陈欢欢");
data.put("secondSubsystemSignature", "陈欢欢");
data.put("secondSubsystemIDNo", "330127199611156403");
data.put("secondSubsystemAddress", "上海市浦东新区张杨路560号中融恒瑞国际西楼1706室");
data.put("secondSubsystemMobileNo", "1366668888");
data.put("secondMentor", "陈欢欢");
data.put("secondMentorIDNo", "330127199611158003");
data.put("secondMentorAddress", "上海市浦东新区张杨路560号中融恒瑞国际西楼1706室");
data.put("secondMentorMobileNo", "1366668888");
data.put("contactYear", "2120");
data.put("contactMonth", "12");
data.put("contactDay", "16");
//8页
data.put("secondParty801", secondSignature);
data.put("secondBirthYear801", "1989");
data.put("secondBirthMonth801", "10");
data.put("secondBirthDay801", "09");
data.put("secondPartyIDNo801", secondPartyIDNo);
data.put("secondPartyPermanentResidenceAddress", "上海市浦东新区张杨路560号中融恒瑞国际西楼1706室");
data.put("secondPartyAddress801", "上海市浦东新区张杨路560号中融恒瑞国际西楼1706室");
data.put("secondMobileNo801", "1366668888");
data.put("secondPractitionerRegNo", "26961531000080062020000314");
data.put("secondEmail", "2120@163.com");
data.put("secondWorkingExperience1", "嫦娥5号登月");
data.put("secondWorkingPosition1", "项目总工");
data.put("secondWorkingPeriod1", "2016.12~至今");
data.put("secondWorkingExperience2", "嫦娥4号登月");
data.put("secondWorkingPosition2", "姿态调整工程师");
data.put("secondWorkingPeriod2", "2014.11~2016.10");
data.put("secondWorkingExperience3", "嫦娥3号登月");
data.put("secondWorkingPosition3", "动力工程执掌");
data.put("secondWorkingPeriod3", "2012.03~2014.10");
data.put("secondWorkingExperience4", "嫦娥2号登月");
data.put("secondWorkingPosition4", "固态燃料冷凌技师");
data.put("secondWorkingPeriod4", "2010.07~2012.01");
data.put("secondBankAccount", secondSignature);
data.put("secondBankAccountOpening", "上海市工商银行齐齐哈尔路支行");
data.put("secondBankAccountID", "6222001001234567890");
data.put("secondMentor802", "陈欢欢");
data.put("secondIntroducer", "陈欢欢");
data.put("secondMentorIDNo801", "330127199611151346");
data.put("secondIntroducerIDNo", "330127199611156403");
data.put("secondEffectiveYear", "2120");
data.put("secondEffectiveMonth", "12");
data.put("secondEffectiveDay", "30");
data.put("secondParty802", secondSignature);
data.put("secondMentor801", "陈欢欢");
data.put("secondSubsystem", "抱一");
data.put("secondSubsystemNo", "HUGONE");
data.put("secondSubsystemManager", "陈欢欢");
data.put("secondSubsystemMaster", "陈欢欢");
data.put("secondBranchManager", "王子帷");
data.put("secondBranchMaster", "王子帷");
data.put("secondCenterHr", "EVEN");
data.put("secondCenterCEO", "SHARON");
//9页
//10页
data.put("secondSignatureDate1001", secondSignatureDate);
//12页
data.put("secondParty1201", secondSignature);
data.put("secondSignatureDate1201", secondSignatureDate);
//14页
data.put("secondParty1401", secondSignature);
data.put("secondSignatureDate1401", secondSignatureDate);
//16页
data.put("secondParty1601", secondSignature);
data.put("secondPartyIDNo1601", secondPartyIDNo);
data.put("secondSignatureDate1601", secondSignatureDate);
return data;
}
public static Map<String, String> initImage() {
Map<String, String> images = new HashMap<String, String>();
//公司印章,需配置
String yindunESignature = "D:\\pcs12\\上海银盾保险经纪有限公司.png";
images.put("yindunESignature1001", "D:\\pcs12\\上海银盾保险经纪有限公司.png");
images.put("yindunESignature1201", "D:\\pcs12\\上海银盾保险经纪有限公司.png");
images.put("yindunESignature1401", "D:\\pcs12\\上海银盾保险经纪有限公司.png");
//五张图是动态的,根据DB里面记录的OSS Path,先从阿里云下载到本地作为临时文件,处理模板需要本地文件
//经纪人个人照片
String secondPersonerPicture = "D:\\pcs12\\secondPersonerPicture.png";
images.put("secondPersonerPicture", secondPersonerPicture);
//经纪人个人手写签名图
String secondSignature = "D:\\pcs12\\signature.png";
images.put("secondSignature1001", secondSignature);
images.put("secondSignature1201", secondSignature);
images.put("secondSignature1401", secondSignature);
images.put("secondSignature1601", secondSignature);
//经纪人个人身份证正面图
String secondIDFrontPageImage = "D:\\pcs12\\IDFront.jpg";
images.put("secondIDFrontPageImage", secondIDFrontPageImage);
//经纪人个人身份证背面图
String secondIDBackPageImage = "D:\\pcs12\\IDback.jpg";
images.put("secondIDBackPageImage", secondIDBackPageImage);
//经纪人个人银行卡正面图
String secondBankCardImage = "D:\\pcs12\\bank.jpg";
images.put("secondBankCardImage", secondBankCardImage);
//选中或未选中2张图,需配置
//PDF模板文件中4种身份证件类型
images.put("secondIDType1", "D:\\pcs12\\checked.png");
images.put("secondIDType2", "D:\\pcs12\\uncheck.png");
images.put("secondIDType3", "D:\\pcs12\\uncheck.png");
images.put("secondIDType4", "D:\\pcs12\\uncheck.png");
//个人申明中的6个选项,从左到右,从上到下
images.put("secondPersonalStatement1", "D:\\pcs12\\checked.png");
images.put("secondPersonalStatement2", "D:\\pcs12\\uncheck.png");
images.put("secondPersonalStatement3", "D:\\pcs12\\uncheck.png");
images.put("secondPersonalStatement4", "D:\\pcs12\\uncheck.png");
images.put("secondPersonalStatement5", "D:\\pcs12\\uncheck.png");
images.put("secondPersonalStatement5", "D:\\pcs12\\checked.png");
//个人签约职称中的6个选项,从左到右,从上到下
images.put("secondPosition1", "D:\\pcs12\\checked.png");
images.put("secondPosition2", "D:\\pcs12\\uncheck.png");
images.put("secondPosition3", "D:\\pcs12\\uncheck.png");
images.put("secondPosition4", "D:\\pcs12\\uncheck.png");
images.put("secondPosition5", "D:\\pcs12\\uncheck.png");
images.put("secondPosition6", "D:\\pcs12\\uncheck.png");
return images;
}
public static void main(String[] args) throws Exception {
//PDF模板文件,需配置
String templatePDF = "D:\\pcs12\\templatePractitionerContract.pdf";
//PDF模板输出结果文件
String templateResultPDF = "D:\\pcs12\\resultData.pdf";
//初始化模板数据
Map<String, String> dt = initData();
Map<String, String> img = initImage();
//按模板填充数据生成结果PDF
PDFTemplate.generatePDF(templatePDF, templateResultPDF, dt, img);
//准备加盖电子印章的源文件
String signSourcePDF = templateResultPDF;
//电子印章文件,需配置
String signImage = "D:\\pcs12\\上海银盾保险经纪有限公司.png";
//加盖电子印章结果文件
String signResultPDF = "D:\\pcs12\\signedYD.pdf";
String password = "UC645YlB";
//CA证书文件,需配置
String keyStorePath = "D:\\pcs12\\4929078_m.zuihuibi.cn.pfx";
float x = 450;
float y = 150;
PDFSign.sign(signResultPDF, password, keyStorePath, signSourcePDF, signImage, x, y);
}
}
......@@ -1502,5 +1502,39 @@ public class CommonUtil {
}
return sumDay;
}
public static String getApproveStatusByStepSeq(Integer stepSeq){
switch (stepSeq) {
case 1 :
return "-2";
case 2 :
return "1";
case 3 :
return "2";
case 4 :
return "3";
case 5 :
return "4";
}
return null;
}
public static String readFileTxt(String filePath) {
String line = null;
try
{
FileReader fr=new FileReader(filePath);
//为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象的构造函数
BufferedReader bufr=new BufferedReader(fr);
while((line=bufr.readLine())!=null)
{
System.out.println(line);
}
bufr.close();//close()中已经包含了flush
} catch (IOException e) {
e.printStackTrace();
}
return line;
}
}
package com.yd.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
/**
* HttpDownload文件下载工具类
* Created by Simon Cheng on 202021/1/18.
*/
public class HttpDownload {
public static final int cache = 10 * 1024;
public static final boolean isWindows;
public static final String splash;
public static final String root;
static {
if (System.getProperty("os.name") != null && System.getProperty("os.name").toLowerCase().contains("windows")) {
isWindows = true;
splash = "\\";
root="D:";
} else {
isWindows = false;
splash = "/";
root="/opt/tomcat8/temp";
}
}
/**
* 根据url下载文件,文件名从response header头中获取
* @param url
* @return
*/
public static String download(String url) {
return download(url, null);
}
/**
* 根据url下载文件,保存到filepath中
* @param url
* @param filepath
* @return
*/
public static String download(String url, String filepath) {
try {
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = client.execute(httpget);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
if (filepath == null) {
filepath = getFilePath(response);
}
File file = new File(filepath);
file.getParentFile().mkdirs();
FileOutputStream fileout = new FileOutputStream(file);
/**
* 根据实际运行效果 设置缓冲区大小
*/
byte[] buffer=new byte[cache];
int ch = 0;
while ((ch = is.read(buffer)) != -1) {
fileout.write(buffer,0,ch);
}
is.close();
fileout.flush();
fileout.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取response要下载的文件的默认路径
* @param response
* @return
*/
public static String getFilePath(HttpResponse response) {
String filepath = root + splash;
String filename = getFileName(response);
if (filename != null) {
filepath += filename;
} else {
filepath += getRandomFileName();
}
return filepath;
}
/**
* 获取response header中Content-Disposition中的filename值
* @param response
* @return
*/
public static String getFileName(HttpResponse response) {
Header contentHeader = response.getFirstHeader("Content-Disposition");
String filename = null;
if (contentHeader != null) {
HeaderElement[] values = contentHeader.getElements();
if (values.length == 1) {
NameValuePair param = values[0].getParameterByName("filename");
if (param != null) {
try {
filename = param.getValue();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return filename;
}
/**
* 获取随机文件名
* @return
*/
public static String getRandomFileName() {
return String.valueOf(System.currentTimeMillis());
}
public static void outHeaders(HttpResponse response) {
Header[] headers = response.getAllHeaders();
for (int i = 0; i < headers.length; i++) {
System.out.println(headers[i]);
}
}
public static void main(String[] args) {
String url="https://dev-yindun-store.oss-cn-shanghai-finance-1-pub.aliyuncs.com/brokerHiring/38/7210115.jpg";
String filepath = "D:\\test\\a.jpg";
HttpDownload.download(url, filepath);
}
}
package com.yd.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.Properties;
/**
* Desc:properties文件获取工具类
* Created by Simon Cheng on 202021/1/18.
*/
public class PDFConfiguration {
private static final Logger logger = LoggerFactory.getLogger(PDFConfiguration.class);
private static Properties props;
static{
loadProps();
}
synchronized static private void loadProps(){
logger.info("开始加载properties文件内容.......");
props = new Properties();
InputStream in = null;
try
{
in = PDFConfiguration.class.getClassLoader().getResourceAsStream("pdfconfiguration.properties");
props.load(in);
} catch (FileNotFoundException e) {
logger.error("pdfconfiguration.properties文件未找到");
} catch (IOException e) {
logger.error("出现IOException");
} finally {
try {
if(null != in) {
in.close();
}
} catch (IOException e) {
logger.error("pdfconfiguration.properties文件流关闭出现异常");
}
}
logger.info("加载properties文件内容完成...........");
logger.info("properties文件内容:" + props);
}
public static String getProperty(String key){
if(null == props) {
loadProps();
}
return props.getProperty(key);
}
public static String getProperty(String key, String defaultValue) {
if(null == props) {
loadProps();
}
return props.getProperty(key, defaultValue);
}
}
\ No newline at end of file
......@@ -53,3 +53,13 @@ enable.datasecurity:false
#存量数据接口开关
prod.checkavailable:
pdf.template=/opt/tomcat8/conf/ydpdf/pdfres/templatePractitionerContract.pdf
pdf.signImage=/opt/tomcat8/conf/ydpdf/pdfres/上海银盾保险经纪有限公司.png
pdf.keyStorePath=/opt/tomcat8/conf/ydpdf/pdfres/4929078_m.zuihuibi.cn.pfx
pdf.keyPasswordFile=/opt/tomcat8/conf/ydpdf/pdfres/pfx-password.txt
pdf.position.x=450
pdf.position.y=150
pdf.check=/opt/tomcat8/conf/ydpdf/pdfres/check.png
pdf.uncheck=/opt/tomcat8/conf/ydpdf/pdfres/uncheck.png
pdf.template=/opt/tomcat8/conf/ydpdf/pdfres/templatePractitionerContract.pdf
pdf.signImage=/opt/tomcat8/conf/ydpdf/pdfres/上海银盾保险经纪有限公司.png
pdf.keyStorePath=/opt/tomcat8/conf/ydpdf/pdfres/4929078_m.zuihuibi.cn.pfx
pdf.keyPasswordFile=/opt/tomcat8/conf/ydpdf/pdfres/pfx-password.txt
pdf.check=/opt/tomcat8/conf/ydpdf/pdfres/check.png
pdf.uncheck=/opt/tomcat8/conf/ydpdf/pdfres/uncheck.png
pdf.temp.path=/opt/tomcat8/temp/
pdf.firstParty=上海银盾保险经纪有限公司
pdf.firstPartyResponser=Sharon Wan
pdf.firstPartyAddress=上海市浦东新区张杨路560号中融恒瑞国际西楼1706室
pdf.position.x=450
pdf.position.y=150
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