打印PDF文件生成压缩包上传至oss
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try{
ZipOutputStream zip;
ByteArrayInputStream input;
Document doc;
List<String,byte[]> maps = new ArrayList<>();
byte[] data;
try{
for(Long id:ids){
doc = new Document(PageSize.A4.rotate(),5,5,180,15);
PdfWriter.getInstance(doc,bos);
doc.open();
//生成PDF代码 使用itext的pdfpTable
//generatePdf();
doc.close();
map = new LinkHashMap<>();
data = bos.toByteArray();
map.put(user.getName(),data);
map.put("code",user.getCode().getBytes());
maps.add(map);
}
}catch(Exception e){
e.printStackTrace();
}finally{
zip = new ZipOutputStream(bos);
for(int i=0;i<maps.size();i++){
map=maps.get(i);
String name = map.keySet().iterator().next();
input = new ByteArrayInputStream(map.get(name));
byte[] codeByte = map.get("code");
String code = new String(codeByte);
zip.putNextEntry(new ZipEntry(name+code+".pdf"));
int temp=0;
while((temp=input.read()) != -1){
zip.write(temp);
}
input.close();
}
zip.flush();
zip.close();
bos.close();
//上传至oss返回地址 在上传oss之前必须关闭流
uploadToOSS(new ByteArrayInputStream(bos).toByteArray()),""," oss address");
}
}
上传Zip至oss
String prefixKey = fileAdress;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String name = fileName+user.getName()+sdf.format(new DSate());
OSS oss = new OSSClientBuilder().build(endPoint,accessKeyId,accessKeySecret);
boolean exist = oss.doesObjectExist(bucketName,prefixKey);
if (exist) {
oss.deleteObject(bucketName, prefixKey);
}
Date ex = new Date(System.currentTimeMillis()+Long.valueOf("1800000"));
Url url = oss.generatePresignedUrl(bucketName,prefixKey,ex);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("application/zip");
try{
oss.putObject(new PutObjectRequest(bucketName,prefixKey,inputStream,metaData));
}finally{
oss.shutdown();
}
return url.toString();
可扩展为当选中单条记录直接打印为PDF格式,需要判断再设置metadata.setContentType(“application/pdf”),当选中多条记录把多个PDF文件打成Zip,然后再上传至oss。