使用 Itext 生成PDF字节输出流并下载(不是保存在本地)

1.先将字节数组输出流转成的字符串


/**
 * @return 先将字节数组输出流转成的字符串
 */
public String generatePDF() {
    byte[] result=null;
    ByteArrayOutputStream baos = null;
    Document doc =null;
    PdfWriter.getInstance(document, new FileOutputStream(DEST));

    try {
        doc = new Document();// 可配其余4个参数,如(rectPageSize,60,60,60,60)页面边距
        baos = new ByteArrayOutputStream();//构建字节输出流
        PdfWriter.getInstance(doc,baos);//将PDF文档对象写入到流
        doc.open();
        // 解决中文问题
        BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);


        PdfPTable table = new PdfPTable(5)


        Font smallTitleFont = new Font(bfChinese, 15, Font.NORMAL);
        for (int aw = 0; aw < 10; aw++) {
            // 构建每一格
            table.addCell("cell");
        }
        document.add(table);

        if(doc != null){
            doc.close();
        }
        String result =new String(baos.toByteArray(), "ISO-8859-1");//转字符串设置编码
        result = java.net.URLEncoder.encode(result, "ISO-8859-1");//如果跨域需设置编码
        
    }catch(Exception e) {
        log.error("PDF异常", e);
    }finally{
        if(baos != null){
            try {
                baos.close();
            } catch (IOException e) {
                log.error("PDF异常", e);
            }
        }
    }

    return result;
}

2.使用response进行下载

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String result= generatePDF();//生成PDF方法,返回字节数组文件流转成的字符串
    result = java.net.URLDecoder.decode(result, "ISO-8859-1");//如果跨域需设置解码

    ByteArrayInputStream inStream = new ByteArrayInputStream(
            result.getBytes("ISO-8859-1"));
    // 设置输出的格式
    response.setContentType("bin");
    response.addHeader("Content-Disposition","attachment; filename=\"" + fileName+ ".zip\"");
    // 循环取出流中的数据
    byte[] b = new byte[2048];
    int len;
    try {

        while ((len = inStream.read(b)) > 0)
            response.getOutputStream().write(b, 0, len);

        inStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值