• 使用iText生成带底图的PDF


    package com.wzh.itext;
    
    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.Image;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfWriter;
    import java.io.ByteArrayOutputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    /**
     * @date 2015-3-17 12:48:24
     * @author y
     * @desc 
     */
    public class ItextUtil {
        
        /**
         * 生成带底图的PDF字节流
         * @param swdjz
         * @return 
         */
        public static byte[] createPdfBytes(Swdjz swdjz){
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte []content = null;
            
            
            Document doc = new Document(PageSize.A4.rotate(), 50, 50, 50, 50); //创建文档 ,A4纸,横屏 
            
             try {
                PdfWriter pw = PdfWriter.getInstance(doc, baos);
                doc.open();
                
                //解决中文不显示问题
                BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                //定义字体
                Font fontChinaTitle14 = new Font(bfChinese, 14, Font.BOLD);
                Font fontChina16 = new Font(bfChinese, 16);
                Font fontChina14 = new Font(bfChinese, 14);
                
                //加载电子税务登记证背景图片
                Image imgBg = Image.getInstance(swdjz.getBgPath());
                imgBg.setAbsolutePosition(0, 0); //设置图片位置
                imgBg.scaleAbsolute(842, 595);//设置图片大小
                doc.add(imgBg);
                
                // 空行
                Paragraph blank = new Paragraph(" ");
                doc.add(blank);
                doc.add(blank);
                doc.add(blank);
                doc.add(blank);
                doc.add(blank);
                
                /*右上角信息*/
                //档案号
                Chunk c01 = new Chunk(swdjz.getDanh(), fontChina16);
                Paragraph snoParagraph01 = new Paragraph();
                snoParagraph01.add(c01);
                snoParagraph01.setAlignment(Element.ALIGN_RIGHT);
                snoParagraph01.setIndentationRight(30);
                snoParagraph01.setSpacingBefore(10);
                doc.add(snoParagraph01);
                //纳税人识别号
                Chunk c02 = new Chunk(swdjz.getNsrsbh(), fontChina16);
                Paragraph snoParagraph02 = new Paragraph();
                snoParagraph02.add(c02);
                snoParagraph02.setAlignment(Element.ALIGN_RIGHT);
                snoParagraph02.setIndentationRight(28);
                doc.add(snoParagraph02);
                
                doc.add(blank);
                doc.add(blank);
                
                /*正文*/
                //纳税人名称
                Chunk c03 = new Chunk(swdjz.getNsrmc(), fontChina16);
                Paragraph snoParagraph03 = new Paragraph();
                snoParagraph03.add(c03);
                snoParagraph03.setIndentationLeft(220);
                doc.add(snoParagraph03);
                
                doc.add(blank);
                
                //法定代表人
                Chunk c04 = new Chunk(swdjz.getFddbr(), fontChina16);
                Paragraph snoParagraph04 = new Paragraph();
                snoParagraph04.add(c04);
                snoParagraph04.setIndentationLeft(220);
                doc.add(snoParagraph04);
                
                doc.add(blank);
                
                //地址
                Chunk c05 = new Chunk(swdjz.getDz(), fontChina16);
                Paragraph snoParagraph05 = new Paragraph();
                snoParagraph05.add(c05);
                snoParagraph05.setIndentationLeft(220);
                snoParagraph05.setSpacingBefore(3);
                doc.add(snoParagraph05);
                
                doc.add(blank);
                
                //登记注册类型
                Chunk c06 = new Chunk(swdjz.getDjzclx(), fontChina16);
                Paragraph snoParagraph06 = new Paragraph();
                snoParagraph06.add(c06);
                snoParagraph06.setIndentationLeft(220);
                snoParagraph06.setSpacingBefore(4);
                doc.add(snoParagraph06);
                
                doc.add(blank);
                
                //经营范围
                Chunk c07 = new Chunk(swdjz.getJyfw(), fontChina14);
                Paragraph snoParagraph07 = new Paragraph();
                snoParagraph07.add(c07);
                snoParagraph07.setIndentationLeft(220);
                doc.add(snoParagraph07);
                
                doc.add(blank);
                
                //批准设立机关
                Chunk c08 = new Chunk(swdjz.getPzsljg(), fontChina16);
                Paragraph snoParagraph08 = new Paragraph();
                snoParagraph08.add(c08);
                if(swdjz.getJyfw().length()>37){
                    snoParagraph08.setSpacingBefore(-10);
                }else{
                    snoParagraph08.setSpacingBefore(4);
                }
                snoParagraph08.setIndentationLeft(220);
                doc.add(snoParagraph08);
                
                doc.add(blank);
                
                //扣缴义务
                Chunk c09 = new Chunk(swdjz.getKjyw(), fontChina16);
                Paragraph snoParagraph09 = new Paragraph();
                snoParagraph09.add(c09);
                if(swdjz.getJyfw().length()<38){
                    snoParagraph09.setSpacingBefore(4);
                }
                snoParagraph09.setIndentationLeft(220);
                doc.add(snoParagraph09);
                
                doc.add(blank);
                doc.add(blank);
                doc.add(blank);
                
                /*右下角*/
                //发证日期
                Chunk cYear = new Chunk("一三     ", fontChina16);
                Chunk cMonth = new Chunk("   八   ", fontChina16);
                Chunk cDay = new Chunk("   十二   ", fontChina16);
                
                Paragraph snoParagraph10 = new Paragraph();
                snoParagraph10.add(cYear);
                snoParagraph10.add(cMonth);
                snoParagraph10.add(cDay);
                snoParagraph10.setSpacingBefore(4);
                snoParagraph10.setIndentationRight(45);
                snoParagraph10.setAlignment(Element.ALIGN_RIGHT);
                doc.add(snoParagraph10);
                
                
                doc.close();
                
                content = baos.toByteArray();
                
            } catch (FileNotFoundException ex) {
                Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
            } catch (DocumentException ex) {
                Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
            }finally{
                try {
                    baos.close();
                } catch (IOException ex) {
                    Logger.getLogger(ItextUtil.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
            return content;
        }
        
    }

    Servlet 中:

     response.setContentType("application/pdf");
            
            ServletOutputStream sos = response.getOutputStream();
            
            response.setHeader("Content-Disposition", "attachment;filename="
                            + new String(swdjz.getNsrmc().getBytes(), "iso-8859-1"));
    
            
            byte [] content = ItextUtil.createPdfBytes(swdjz);
            
            BufferedOutputStream bos = new BufferedOutputStream(sos);
            bos.write(content);
            
            bos.close();
  • 相关阅读:
    数学建模(一)层次分析法
    数学建模(二)优劣解距离法Topsis模型部分
    python语法学习第十一天--模块
    机器学习——交叉验证,GridSearchCV,岭回归
    机器学习——logistic回归,鸢尾花数据集预测,数据可视化
    机器学习入门——线性回归预测广告投入数据集
    凸优化,对偶问题与拉格朗日函数
    机器学习中的凸优化,凸集,凸函数的相关定义和理论
    调整数组顺序使奇数位于偶数前面
    leetcode| 329. 矩阵中的最长递增路径
  • 原文地址:https://www.cnblogs.com/yshyee/p/4349405.html
Copyright © 2020-2023  润新知