关于根据模板生成pdf文档,差入图片和加密
Posted lijianli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于根据模板生成pdf文档,差入图片和加密相关的知识,希望对你有一定的参考价值。
import com.alibaba.fastjson.JSONObject; import com.aliyun.oss.OSSClient; import com.itextpdf.text.pdf.*; import com.swetake.util.Qrcode; import com.titifootball.common.base.BaseController; import com.titifootball.presentation.common.constant.PresentationConstants; import com.titifootball.presentation.dao.model.*; import com.titifootball.presentation.rpc.api.UresultAttributeService; import com.titifootball.presentation.rpc.api.UresultPresentationService; import com.titifootball.presentation.rpc.api.UresultTypeService; import io.swagger.annotations.ApiOperation; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.JPEGTranscoder; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; /** * PdfExportController * @author jianhun * @date 2018/08/29 */ @Controller @RequestMapping("/manage/pdf/v1") public class PlayerReportExportController extends BaseController { private final String TEAM_PLAYER_URL="http://localhost:6664/api/v1/upms/team/player/list?teamIds=*"; private final String PLAYER_URL="http://localhost:6664/api/v1/upms/player/list?playerIds=*"; private static final Logger LOGGER = LoggerFactory.getLogger(PlayerReportExportController.class); @Autowired private UresultPresentationService uresultPresentationService; @Autowired private UresultAttributeService uresultAttributeService; @Autowired private UresultTypeService uresultTypeService; @Autowired HttpServletRequest request; String SvgPngPath = ""; String Path = ""; @RequestMapping(value = "/index", method = RequestMethod.GET) public String index() { return "/manage/PDF/index.jsp"; } @ApiOperation(value = "Svg转Png") @RequestMapping(value = "/svgPng", method = RequestMethod.POST) @ResponseBody public Map svgPng(@RequestParam(value = "svg") String svg) throws Exception { Map resultMap=new HashMap(); Boolean flag=false; String msg=""; flag=true; resultMap.put("flag",flag); resultMap.put("message",msg); SvgPng(svg); return resultMap; } public void SvgPng(String svg) throws Exception { String pathSvg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".svg"; String pathPng = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".png"; FileWriter fw = null; File f = new File(pathSvg); try { if (!f.exists()) { f.createNewFile(); } fw = new FileWriter(f); BufferedWriter out = new BufferedWriter(fw); out.write(svg, 0, svg.length()); out.close(); } catch (IOException e) { e.printStackTrace(); } changeSvgToJpg(pathPng, pathSvg); } private void changeSvgToJpg(String pistrPngFile, String pistrSvgPath) { Date date = new Date(); long timeBegin = date.getTime(); String strSvgURI;// svg文件路径 OutputStream ostream = null; File fileSvg = null; try { fileSvg = new File(pistrSvgPath); URI uri = fileSvg.toURI();// 构造一个表示此抽象路径名的 file:URI URL url = uri.toURL();// 根据此 URI 构造一个 URL strSvgURI = url.toString(); TranscoderInput input = new TranscoderInput(strSvgURI);// 定义一个通用的转码器的输入 ostream = new FileOutputStream(pistrPngFile); TranscoderOutput output = new TranscoderOutput(ostream);// 定义单路输出的转码器 JPEGTranscoder transcoder = new JPEGTranscoder();// 构造一个新的转码器,产生JPEG图像 transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(0.8));// 设置一个转码过程,JPEGTranscoder.KEY_QUALITY设置输出png的画质精度,0-1之间 transcoder.transcode(input, output);// 转换svg文件为png } catch (MalformedURLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (TranscoderException e) { e.printStackTrace(); } finally { try { ostream.flush(); ostream.close(); } catch (IOException e) { e.printStackTrace(); } } request.getSession().setAttribute("png",pistrPngFile); fileSvg.delete();// 删除svg文件 } @RequestMapping(value = "/exportPdf", method = RequestMethod.GET) @ResponseBody public Map exportPdf(@RequestParam(value = "assessPlayerId") Long assessPlayerId, HttpServletRequest request) throws Exception { Map resultMap=new HashMap(); Boolean flag=false; String msg=""; Map<String, String> reportData = new HashMap<>(16); Long teamId=0L; Long playerId=0L; try { HttpGet requestTeamPlayer = new HttpGet(TEAM_PLAYER_URL.replace("*",assessPlayerId.toString())); CloseableHttpResponse response = null; CloseableHttpClient httpClient = HttpClientBuilder.create().build(); response = httpClient.execute(requestTeamPlayer);//执行HttpGet请求 HttpEntity httpEntity = response.getEntity();//获得实体 if (httpEntity != null) { InputStream instreams = httpEntity.getContent(); JSONObject jsonObject=JSONObject.parseObject(convertStreamToString(instreams)); if(jsonObject.getInteger("code")==1){ teamId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("teamId"); playerId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("playerId"); } } String basePath = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"; String basePathImg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ ".png"; HttpSession session= ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getSession(); getQrCodeImg("titifootball.com",basePathImg); Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd"); String time = sdf.format(date); reportData.put("reportDate",time); reportData.put("reportDate1",time); reportData.put("reportDate2",time); reportData.put("reportDate3",time); reportData.put("reportDate4",time); reportData.put("reportDate5",time); reportData.put("qrcode",basePathImg); reportData.put("qrcode2",basePathImg); reportData.put("qrcode3",basePathImg); reportData.put("qrcode4",basePathImg); reportData.put("qrcode5",basePathImg); reportData.put("qrcode6",basePathImg); reportData.put("PI15","D:\A.jpeg"); reportData.put("Radarchart",(String) session.getAttribute("png")); System.out.println(reportData); List<Long> uresultTypeIdList = new ArrayList<>(); UresultTypeExample uresultTypeExample = new UresultTypeExample(); uresultTypeExample.createCriteria() .andIsDeletedEqualTo(PresentationConstants.NO); uresultTypeExample.setOrderByClause("id desc"); List<UresultType> uresultTypeList = uresultTypeService.selectByExample(uresultTypeExample); if(null != uresultTypeList && uresultTypeList.size() > 0) { for(UresultType uresultType : uresultTypeList) { uresultTypeIdList.add(uresultType.getId()); } UresultPresentationExample uresultPresentationExample = new UresultPresentationExample(); uresultPresentationExample.createCriteria() .andIsDeletedEqualTo(PresentationConstants.NO) .andAssessmentIdEqualTo(1L) .andAssessPlayerIdEqualTo(assessPlayerId) .andTypeIn(uresultTypeIdList) .andStateEqualTo(PresentationConstants.YES); uresultPresentationExample.setOrderByClause("id asc"); List<UresultPresentationDetail> uresultPresentationDetailList = uresultPresentationService.selectUresultPresentationDetailByExampleForOffsetPage( uresultPresentationExample, 0, 10000); for(UresultPresentationDetail uresultPresentationDetail : uresultPresentationDetailList) { UresultAttribute uresultAttribute=uresultPresentationDetail.getUresultAttribute(); if(null!=uresultAttribute){ String key = uresultPresentationDetail.getUresultAttribute().getCode(); String value = uresultPresentationDetail.getAttrValue(); if (null!=value){ value+=" "+(null!=uresultPresentationDetail.getUresultAttribute().getUnit()?uresultPresentationDetail.getUresultAttribute().getUnit():""); } reportData.put(key, value); } } } String Name = "1"; String identification = "2"; for (String key : reportData.keySet()) { Path = reportData.get("qrcode"); SvgPngPath = reportData.get("Radarchart"); Name = reportData.get("PI06"); identification = reportData.get("PI12"); } String newPdfName= /*Name+"-"+identification+*/"1.pdf"; reportData=generalPdf(basePath+"template/pdf-template.pdf",basePath+"data/"+newPdfName,reportData); OSSClient client = new OSSClient(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYID, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYSECRET); String fileUrl="http://"+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME+"."+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT+"/user-report/"+newPdfName; client.putObject(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME, "user-report/"+newPdfName, new File(basePath+"data/"+newPdfName)); client.shutdown(); File pdfFile=new File(basePath+"data/"+newPdfName); if (pdfFile.exists()){ pdfFile.deleteOnExit(); } reportData.put("url",fileUrl); DeleteFile(SvgPngPath,Path); return reportData; }catch (Exception e){ e.printStackTrace(); msg=e.getLocalizedMessage(); } resultMap.put("flag",flag); resultMap.put("message",msg); return resultMap; } public Map generalPdf(String templatePath,String newPdfPath,Map reportData){ Map resultMap=new HashMap(); Boolean flag=false; String msg=""; PdfReader reader; FileOutputStream out; ByteArrayOutputStream bos; PdfStamper stamper; PdfImportedPage importedPage; try { out=new FileOutputStream(newPdfPath); reader=new PdfReader(templatePath); bos=new ByteArrayOutputStream(); stamper=new PdfStamper(reader,bos); AcroFields form=stamper.getAcroFields(); Iterator<String> iterator=form.getFields().keySet().iterator(); while (iterator.hasNext()){ String name=iterator.next().toString(); String value=(!reportData.containsKey(name))?"-":reportData.get(name).toString(); System.out.println(name+"<------->"+value); form.setField(name,value); if(("PI15".equals(name)) || ("Radarchart".equals(name))||("qrcode".equals(name)) || ("qrcode2".equals(name)) ||("qrcode3".equals(name)) || ("qrcode4".equals(name)) || ("qrcode5".equals(name)) || ("qrcode6".equals(name))){ String imgpath = reportData.get(name).toString(); System.out.println(form.getFieldPositions(name)); int pageNo = form.getFieldPositions(name).get(0).page; System.out.println(pageNo); com.itextpdf.text.Rectangle Rectangle = form.getFieldPositions(name).get(0).position; float x = Rectangle.getLeft(); float y = Rectangle.getBottom(); float width = Rectangle.getWidth(); float height = Rectangle.getHeight(); // 读图片 com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(imgpath); // 获取操作的页面 PdfContentByte pdfContentByte = stamper.getOverContent(pageNo); // 根据域的大小缩放图片 image.scaleToFit(width, height); // 添加图片 image.setAbsolutePosition(x, y); pdfContentByte.addImage(image); } } stamper.setFormFlattening(true); stamper.close(); com.itextpdf.text.Document doc=new com.itextpdf.text.Document(); PdfWriter pdfWriter = PdfWriter.getInstance(doc,bos); // 设置用户密码, 所有者密码,用户权限,所有者权限 pdfWriter.setEncryption("123456".getBytes(), "123456".getBytes(), PdfWriter.ALLOW_COPY, PdfWriter.ENCRYPTION_AES_128); PdfCopy copy=new PdfCopy(doc,out); doc.open(); for (Integer i=1;i<=7;i++){ importedPage=copy.getImportedPage(new PdfReader(bos.toByteArray()),i); copy.addPage(importedPage); } doc.close(); flag=true; }catch (Exception e){ e.printStackTrace(); msg=e.getLocalizedMessage(); } resultMap.put("flag",flag); resultMap.put("message",msg); return resultMap; } public static String convertStreamToString(InputStream is){ BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + " "); } } catch (IOException e) { System.out.println("Error=" + e.toString()); } finally { try { is.close(); } catch (IOException e) { System.out.println("Error=" + e.toString()); } } return sb.toString(); } public static void getQrCodeImg(String content, String imgPath) { int width = 80;// 图片宽 int height =80;// 图片高 Qrcode qrcode = new Qrcode();// 实例化一个qrcode对象 qrcode.setQrcodeErrorCorrect(‘M‘);// 设置纠错级别(级别有:L(7%) M(15%) Q(25%) H(30%) ) qrcode.setQrcodeEncodeMode(‘B‘);// 设置编码方式 qrcode.setQrcodeVersion(7);// 设置二维码版本(版本有 1-40个,) BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 开始绘制图片start 1.设置图片大小(BufferedImage.TYPE_INT_RGB:利用三原色绘制二维码) Graphics2D gs = img.createGraphics();// 获取绘图工具start gs.setBackground(Color.WHITE);// 设置背景为白色 gs.clearRect(0, 0, width, height);// 设置一个矩形(四个参数分别为:开始绘图的x坐标,y坐标,图片宽,图片高) gs.setColor(Color.black);// 设置二维码图片的颜色 byte[] bt = null; try { bt = content.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } int py = 2;// 偏移量 boolean[][] code = qrcode.calQrcode(bt);// 开始准备画图 for (int i = 0; i < code.length; i++) { for (int j = 0; j < code.length; j++) { if (code[j][i]) { gs.fillRect(j * 3 + py, i * 3 + py, 3, 3);// 四个参数(画图的起始x和y位置,每个小模块的宽和高(二维码是有一个一个的小模块构成的)); } } } try { ImageIO.write(img, "png", new File(imgPath)); } catch (IOException e) { // TODO Auto-generated catch block System.out.println("二维码异常。。。。。"); e.printStackTrace(); } } public void DeleteFile(String pathPng1,String pathPng2){ File file1 = new File(pathPng1); File file2 = new File(pathPng2); if(file1.exists()){ file1.delete(); } if(file2.exists()){ file2.delete(); } } }
package com.titifootball.presentation.web.controller;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSSClient;
import com.itextpdf.text.pdf.*;
import com.swetake.util.Qrcode;
import com.titifootball.common.base.BaseController;
import com.titifootball.presentation.common.constant.PresentationConstants;
import com.titifootball.presentation.dao.model.*;
import com.titifootball.presentation.rpc.api.UresultAttributeService;
import com.titifootball.presentation.rpc.api.UresultPresentationService;
import com.titifootball.presentation.rpc.api.UresultTypeService;
import io.swagger.annotations.ApiOperation;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
/**
* PdfExportController
* @author jianhun
* @date 2018/08/29
*/
@Controller
@RequestMapping("/manage/pdf/v1")
public class PlayerReportExportController extends BaseController {
private final String TEAM_PLAYER_URL="http://localhost:6664/api/v1/upms/team/player/list?teamIds=*";
private final String PLAYER_URL="http://localhost:6664/api/v1/upms/player/list?playerIds=*";
private static final Logger LOGGER = LoggerFactory.getLogger(PlayerReportExportController.class);
@Autowired
private UresultPresentationService uresultPresentationService;
@Autowired
private UresultAttributeService uresultAttributeService;
@Autowired
private UresultTypeService uresultTypeService;
@Autowired
HttpServletRequest request;
String SvgPngPath = "";
String Path = "";
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index() {
return "/manage/PDF/index.jsp";
}
@ApiOperation(value = "Svg转Png")
@RequestMapping(value = "/svgPng", method = RequestMethod.POST)
@ResponseBody
public Map svgPng(@RequestParam(value = "svg") String svg) throws Exception {
Map resultMap=new HashMap();
Boolean flag=false;
String msg="";
flag=true;
resultMap.put("flag",flag);
resultMap.put("message",msg);
SvgPng(svg);
return resultMap;
}
public void SvgPng(String svg) throws Exception {
String pathSvg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".svg";
String pathPng = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+"Radar"+ ".png";
FileWriter fw = null;
File f = new File(pathSvg);
try {
if (!f.exists()) {
f.createNewFile();
}
fw = new FileWriter(f);
BufferedWriter out = new BufferedWriter(fw);
out.write(svg, 0, svg.length());
out.close();
} catch (IOException e) {
e.printStackTrace();
}
changeSvgToJpg(pathPng, pathSvg);
}
private void changeSvgToJpg(String pistrPngFile, String pistrSvgPath) {
Date date = new Date();
long timeBegin = date.getTime();
String strSvgURI;// svg文件路径
OutputStream ostream = null;
File fileSvg = null;
try {
fileSvg = new File(pistrSvgPath);
URI uri = fileSvg.toURI();// 构造一个表示此抽象路径名的 file:URI
URL url = uri.toURL();// 根据此 URI 构造一个 URL
strSvgURI = url.toString();
TranscoderInput input = new TranscoderInput(strSvgURI);// 定义一个通用的转码器的输入
ostream = new FileOutputStream(pistrPngFile);
TranscoderOutput output = new TranscoderOutput(ostream);// 定义单路输出的转码器
JPEGTranscoder transcoder = new JPEGTranscoder();// 构造一个新的转码器,产生JPEG图像
transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(0.8));// 设置一个转码过程,JPEGTranscoder.KEY_QUALITY设置输出png的画质精度,0-1之间
transcoder.transcode(input, output);// 转换svg文件为png
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (TranscoderException e) {
e.printStackTrace();
} finally {
try {
ostream.flush();
ostream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
request.getSession().setAttribute("png",pistrPngFile);
fileSvg.delete();// 删除svg文件
}
@RequestMapping(value = "/exportPdf", method = RequestMethod.GET)
@ResponseBody
public Map exportPdf(@RequestParam(value = "assessPlayerId") Long assessPlayerId, HttpServletRequest request) throws Exception {
Map resultMap=new HashMap();
Boolean flag=false;
String msg="";
Map<String, String> reportData = new HashMap<>(16);
Long teamId=0L;
Long playerId=0L;
try {
HttpGet requestTeamPlayer = new HttpGet(TEAM_PLAYER_URL.replace("*",assessPlayerId.toString()));
CloseableHttpResponse response = null;
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
response = httpClient.execute(requestTeamPlayer);//执行HttpGet请求
HttpEntity httpEntity = response.getEntity();//获得实体
if (httpEntity != null) {
InputStream instreams = httpEntity.getContent();
JSONObject jsonObject=JSONObject.parseObject(convertStreamToString(instreams));
if(jsonObject.getInteger("code")==1){
teamId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("teamId");
playerId=jsonObject.getJSONArray("data").getJSONObject(0).getLong("playerId");
}
}
String basePath = request.getSession().getServletContext().getRealPath( "/")+"\pdf\";
String basePathImg = request.getSession().getServletContext().getRealPath( "/")+"\pdf\"+"img\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ ".png";
HttpSession session= ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getSession();
getQrCodeImg("titifootball.com",basePathImg);
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd");
String time = sdf.format(date);
reportData.put("reportDate",time);
reportData.put("reportDate1",time);
reportData.put("reportDate2",time);
reportData.put("reportDate3",time);
reportData.put("reportDate4",time);
reportData.put("reportDate5",time);
reportData.put("qrcode",basePathImg);
reportData.put("qrcode2",basePathImg);
reportData.put("qrcode3",basePathImg);
reportData.put("qrcode4",basePathImg);
reportData.put("qrcode5",basePathImg);
reportData.put("qrcode6",basePathImg);
reportData.put("PI15","D:\A.jpeg");
reportData.put("Radarchart",(String) session.getAttribute("png"));
System.out.println(reportData);
List<Long> uresultTypeIdList = new ArrayList<>();
UresultTypeExample uresultTypeExample = new UresultTypeExample();
uresultTypeExample.createCriteria()
.andIsDeletedEqualTo(PresentationConstants.NO);
uresultTypeExample.setOrderByClause("id desc");
List<UresultType> uresultTypeList = uresultTypeService.selectByExample(uresultTypeExample);
if(null != uresultTypeList && uresultTypeList.size() > 0) {
for(UresultType uresultType : uresultTypeList) {
uresultTypeIdList.add(uresultType.getId());
}
UresultPresentationExample uresultPresentationExample = new UresultPresentationExample();
uresultPresentationExample.createCriteria()
.andIsDeletedEqualTo(PresentationConstants.NO)
.andAssessmentIdEqualTo(1L)
.andAssessPlayerIdEqualTo(assessPlayerId)
.andTypeIn(uresultTypeIdList)
.andStateEqualTo(PresentationConstants.YES);
uresultPresentationExample.setOrderByClause("id asc");
List<UresultPresentationDetail> uresultPresentationDetailList =
uresultPresentationService.selectUresultPresentationDetailByExampleForOffsetPage(
uresultPresentationExample, 0, 10000);
for(UresultPresentationDetail uresultPresentationDetail : uresultPresentationDetailList) {
UresultAttribute uresultAttribute=uresultPresentationDetail.getUresultAttribute();
if(null!=uresultAttribute){
String key = uresultPresentationDetail.getUresultAttribute().getCode();
String value = uresultPresentationDetail.getAttrValue();
if (null!=value){
value+=" "+(null!=uresultPresentationDetail.getUresultAttribute().getUnit()?uresultPresentationDetail.getUresultAttribute().getUnit():"");
}
reportData.put(key, value);
}
}
}
String Name = "1";
String identification = "2";
for (String key : reportData.keySet()) {
Path = reportData.get("qrcode");
SvgPngPath = reportData.get("Radarchart");
Name = reportData.get("PI06");
identification = reportData.get("PI12");
}
String newPdfName= /*Name+"-"+identification+*/"1.pdf";
reportData=generalPdf(basePath+"template/pdf-template.pdf",basePath+"data/"+newPdfName,reportData);
OSSClient client = new OSSClient(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYID, com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ACCESSKEYSECRET);
String fileUrl="http://"+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME+"."+ com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_ENDPOINT+"/user-report/"+newPdfName;
client.putObject(com.titifootball.presentation.web.PresentationConstants.ALIYUN_OSS_BUCKNAME, "user-report/"+newPdfName, new File(basePath+"data/"+newPdfName));
client.shutdown();
File pdfFile=new File(basePath+"data/"+newPdfName);
if (pdfFile.exists()){
pdfFile.deleteOnExit();
}
reportData.put("url",fileUrl);
DeleteFile(SvgPngPath,Path);
return reportData;
}catch (Exception e){
e.printStackTrace();
msg=e.getLocalizedMessage();
}
resultMap.put("flag",flag);
resultMap.put("message",msg);
return resultMap;
}
public Map generalPdf(String templatePath,String newPdfPath,Map reportData){
Map resultMap=new HashMap();
Boolean flag=false;
String msg="";
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
PdfImportedPage importedPage;
try {
out=new FileOutputStream(newPdfPath);
reader=new PdfReader(templatePath);
bos=new ByteArrayOutputStream();
stamper=new PdfStamper(reader,bos);
AcroFields form=stamper.getAcroFields();
Iterator<String> iterator=form.getFields().keySet().iterator();
while (iterator.hasNext()){
String name=iterator.next().toString();
String value=(!reportData.containsKey(name))?"-":reportData.get(name).toString();
System.out.println(name+"<------->"+value);
form.setField(name,value);
if(("PI15".equals(name)) || ("Radarchart".equals(name))||("qrcode".equals(name)) || ("qrcode2".equals(name)) ||("qrcode3".equals(name)) || ("qrcode4".equals(name)) || ("qrcode5".equals(name)) || ("qrcode6".equals(name))){
String imgpath = reportData.get(name).toString();
System.out.println(form.getFieldPositions(name));
int pageNo = form.getFieldPositions(name).get(0).page;
System.out.println(pageNo);
com.itextpdf.text.Rectangle Rectangle = form.getFieldPositions(name).get(0).position;
float x = Rectangle.getLeft();
float y = Rectangle.getBottom();
float width = Rectangle.getWidth();
float height = Rectangle.getHeight();
// 读图片
com.itextpdf.text.Image image = com.itextpdf.text.Image.getInstance(imgpath);
// 获取操作的页面
PdfContentByte pdfContentByte = stamper.getOverContent(pageNo);
// 根据域的大小缩放图片
image.scaleToFit(width, height);
// 添加图片
image.setAbsolutePosition(x, y);
pdfContentByte.addImage(image);
}
}
stamper.setFormFlattening(true);
stamper.close();
com.itextpdf.text.Document doc=new com.itextpdf.text.Document();
/* PdfWriter pdfWriter = PdfWriter.getInstance(doc,bos);
// 设置用户密码, 所有者密码,用户权限,所有者权限
pdfWriter.setEncryption("123456".getBytes(), "123456".getBytes(), PdfWriter.ALLOW_COPY, PdfWriter.ENCRYPTION_AES_128);*/
PdfCopy copy=new PdfCopy(doc,out);
doc.open();
for (Integer i=1;i<=7;i++){
importedPage=copy.getImportedPage(new PdfReader(bos.toByteArray()),i);
copy.addPage(importedPage);
}
doc.close();
flag=true;
}catch (Exception e){
e.printStackTrace();
msg=e.getLocalizedMessage();
}
resultMap.put("flag",flag);
resultMap.put("message",msg);
return resultMap;
}
public static String convertStreamToString(InputStream is){
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + " ");
}
} catch (IOException e) {
System.out.println("Error=" + e.toString());
} finally {
try {
is.close();
} catch (IOException e) {
System.out.println("Error=" + e.toString());
}
}
return sb.toString();
}
public static void getQrCodeImg(String content, String imgPath) {
int width = 80;// 图片宽
int height =80;// 图片高
Qrcode qrcode = new Qrcode();// 实例化一个qrcode对象
qrcode.setQrcodeErrorCorrect(‘M‘);// 设置纠错级别(级别有:L(7%) M(15%) Q(25%) H(30%) )
qrcode.setQrcodeEncodeMode(‘B‘);// 设置编码方式
qrcode.setQrcodeVersion(7);// 设置二维码版本(版本有 1-40个,)
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 开始绘制图片start 1.设置图片大小(BufferedImage.TYPE_INT_RGB:利用三原色绘制二维码)
Graphics2D gs = img.createGraphics();// 获取绘图工具start
gs.setBackground(Color.WHITE);// 设置背景为白色
gs.clearRect(0, 0, width, height);// 设置一个矩形(四个参数分别为:开始绘图的x坐标,y坐标,图片宽,图片高)
gs.setColor(Color.black);// 设置二维码图片的颜色
byte[] bt = null;
try {
bt = content.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
int py = 2;// 偏移量
boolean[][] code = qrcode.calQrcode(bt);// 开始准备画图
for (int i = 0; i < code.length; i++) {
for (int j = 0; j < code.length; j++) {
if (code[j][i]) {
gs.fillRect(j * 3 + py, i * 3 + py, 3, 3);// 四个参数(画图的起始x和y位置,每个小模块的宽和高(二维码是有一个一个的小模块构成的));
}
}
}
try {
ImageIO.write(img, "png", new File(imgPath));
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("二维码异常。。。。。");
e.printStackTrace();
}
}
public void DeleteFile(String pathPng1,String pathPng2){
File file1 = new File(pathPng1);
File file2 = new File(pathPng2);
if(file1.exists()){
file1.delete();
}
if(file2.exists()){
file2.delete();
}
}
}
以上是关于关于根据模板生成pdf文档,差入图片和加密的主要内容,如果未能解决你的问题,请参考以下文章