import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfPCell;
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 net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
/**
* 这个功能的设计思路是先读取模板,往里面填值,填完以后输出为新的PDF,再读取新的PDF文件,往里面添加表格。表格的位置由new document的参数决定,具体位置多调试
*
* @author Jinh
*
*/
public class MCTransferMsgQueryServiceImpl extends MCQueryService<MCTransferMsgQueryRequest, MCTransferMsgQueryResponse>
implements MCTransferMsgQueryService {
private SendMailService routerService;
private static final String fontPath = "楷体_GB2312.ttf";
private String templatePath;
private String newPDFPath;
private String from;
private String smtpHost;
private String userName;
private String password;
private String outPath;
private String finalPath;
private EAccountService eaccountService;
private EAccountQueryService eaccountQueryService;
private PActMsgQryService actrouterService;
private AccountQueryService accountQueryService;
private OtpSmsService otpSmsService;
public OtpSmsService getOtpSmsService() {
return otpSmsService;
}
public void setOtpSmsService(OtpSmsService otpSmsService) {
this.otpSmsService = otpSmsService;
}
public SendMailService getRouterService() {
return routerService;
}
public void setRouterService(SendMailService routerService) {
this.routerService = routerService;
}
public String getTemplatePath() {
return templatePath;
}
public void setTemplatePath(String templatePath) {
this.templatePath = templatePath;
}
public String getNewPDFPath() {
return newPDFPath;
}
public void setNewPDFPath(String newPDFPath) {
this.newPDFPath = newPDFPath;
}
public String getSmtpHost() {
return smtpHost;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public void setSmtpHost(String smtpHost) {
this.smtpHost = smtpHost;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public static String getFontpath() {
return fontPath;
}
public String getOutPath() {
return outPath;
}
public void setOutPath(String outPath) {
this.outPath = outPath;
}
public EAccountQueryService getEaccountQueryService() {
return eaccountQueryService;
}
public void setEaccountQueryService(EAccountQueryService eaccountQueryService) {
this.eaccountQueryService = eaccountQueryService;
}
public PActMsgQryService getActrouterService() {
return actrouterService;
}
public void setActrouterService(PActMsgQryService actrouterService) {
this.actrouterService = actrouterService;
}
public String getFinalPath() {
return finalPath;
}
public void setFinalPath(String finalPath) {
this.finalPath = finalPath;
}
public AccountQueryService getAccountQueryService() {
return accountQueryService;
}
public void setAccountQueryService(AccountQueryService accountQueryService) {
this.accountQueryService = accountQueryService;
}
public EAccountService getEaccountService() {
return eaccountService;
}
public void setEaccountService(EAccountService eaccountService) {
this.eaccountService = eaccountService;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public MCTransferMsgQueryResponse query(MCTransferMsgQueryRequest request) {
routerService.setRequestContext(this.getRequestContext());// 从上下文取requestContext
eaccountQueryService.setRequestContext(this.getRequestContext());
actrouterService.setRequestContext(this.getRequestContext());
eaccountService.setRequestContext(this.getRequestContext());
accountQueryService.setRequestContext(this.getRequestContext());
otpSmsService.setRequestContext(this.getRequestContext());
String MChannel = this.getRequestContext().getRequestMChannelId();
List<Map> pdflist =null;
Map pdfmap =null;
/*查询交易明细取List*/
if("PEAC".equals(request.getBankAcType())){
Map param =new HashMap();
param.put("AcNo", request.getAcNo());
param.put("TrsPassword", request.getTrsPassword());
eaccountService.validateEAcPassWord(param);
if(!eaccountService.getResponseContext().getResponseRejCode().equals(ResponseContext.SUCCESS)){