zoukankan      html  css  js  c++  java
  • 下载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;



    }

     

  • 相关阅读:
    索尼MT27i Android2.3.7 线刷Android4.04
    如何在三分钟内要到陌生女孩的电话
    闲情逸致小说嫉妒
    LINQ查询返回DataTable类型
    30个Oracle语句优化规则详解(1)
    .net session超时设置 sessionState的相关属性
    Socket请求和Http请求的各自特点、区别及适用场景
    在Oracle触发器中调用webService 或者java程序
    vs2010中使用log4net的方法
    Oracle 记录操作时长
  • 原文地址:https://www.cnblogs.com/wanghongwei123/p/7098325.html
Copyright © 2011-2022 走看看