下载pdf文件 并有分页

import javax.imageio.ImageIO;
import org.apache.commons.lang.StringUtils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
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.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;

public String downloadZkzPdf() throws IOException, DocumentException {

List<KsScoreListVO> list=zsglService.getZkz(vo);

String TemplatePDF=servletRequest.getSession()
.getServletContext().getRealPath("/")
+ "/pages/osta/kwgl/zkz.pdf";
String url = TemplatePDF.replaceAll("\\", "/");

ByteArrayOutputStream fos = new ByteArrayOutputStream();//需要生成PDF

try {


int page=list.size();

ByteArrayOutputStream baos[] = new ByteArrayOutputStream[page];//用于存储每页生成PDF流
// 使用中文字体
BaseFont bf = BaseFont.createFont(servletRequest.getSession()
.getServletContext().getRealPath("/")+"/resource/ttf/STSONG.TTF",
BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
fontList.add(bf);


for (int i = 0; i < list.size(); i++) {
baos[i] = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(url);
PdfStamper ps = new PdfStamper(reader, baos[i]);
AcroFields s = ps.getAcroFields();
s.setSubstitutionFonts(fontList);
PdfContentByte over = ps.getOverContent(1);// 设置在第几页打印印章
try {
if(StringUtils.isBlank(list.get(i).getPhoto())){
s.setField("fill_9", "暂无考生照片");
}else{
//sftp下载文件
InputStream is=SftpUtils.download(list.get(i).getLj()+list.get(i).getSsmc());
//InputStream is=SftpUtils.download("/home/"+"test/2017051100000210/"+"231084199112202211.jpg");
ByteArrayOutputStream bs = new ByteArrayOutputStream(2048*3);
for(int len;(len=is.read())!=-1;){
bs.write(len);
}


Image img = Image.getInstance(bs.toByteArray());
float p = img.getWidth() / img.getHeight();
img.setAbsolutePosition(318.0F, 350.0F);
img.scaleAbsolute(90.0F, 90.0F / p);
over.addImage(img);



bs.flush();
bs.close();
is.close();
}

} catch (Exception e) {
s.setField("fill_9", "暂无考生照片");
//e.printStackTrace();
}

try {
String content=
list.get(i).getZkznum()+","+list.get(i).getStuname()+","+list.get(i).getSex()+","+list.get(i).getEducation()
+","+list.get(i).getCredennum()+","+list.get(i).getJdjh();
byte[] b;
//生成二维码
b = getQRCode(content);
Image img2 = Image.getInstance(b);

img2.setAbsolutePosition(38.0F, 239.0F);
img2.scaleAbsolute(78.0F, 78.0F);

over.addImage(img2);
} catch (Exception e) {
e.printStackTrace();
}


/* if(StringUtils.isBlank(list.get(i).getWjmc())){
s.setField("fill_9", "暂无考生照片");
}*/
s.setField("fill_1", list.get(i).getZkznum());
s.setField("fill_2", list.get(i).getStuname());
s.setField("fill_3", list.get(i).getSex());
s.setField("fill_4", list.get(i).getEducation());
s.setField("fill_5", "["+list.get(i).getCredentype()+"]"+list.get(i).getCredennum());
s.setField("fill_6", list.get(i).getWorkunit());



ps.setFormFlattening(true);
ps.close();
//reader.close();
//baos[i].close();

}
Document doc = new Document();
PdfCopy pdfCopy = new PdfCopy(doc, fos);
doc.open();
PdfImportedPage impPage = null;

/**取出之前保存的每页内容*/
for (int i = 0; i < page; i++) {
impPage = pdfCopy.getImportedPage(new PdfReader(baos[i]
.toByteArray()), 1);

pdfCopy.addPage(impPage);
}
doc.close();//当文件拷贝 记得关闭doc


servletRequest.setAttribute("pdfStream",new ByteArrayInputStream(fos.toByteArray()));
servletRequest.setAttribute("filename", list.get(0).getZkznum()+".pdf");//设置文件名

} catch (Exception e) {
e.printStackTrace();
}finally{

fos.close();
}


return SUCCESS;



}

 

原文地址:https://www.cnblogs.com/wanghongwei123/p/7098325.html