JasperPdf加后台加动态图片注意事项(踩过 的一些坑)

JasperPdf加动态图片注意事项(踩过的一些坑)

pdf模板工具:

​ TIBCO Jaspersoft® Studio - Visual Designer for JasperReports. 6.5.X

pdf图片各种的原因无法根据提供的动态路径打印出来,发现主要是以下几个问题

  1. 图片地址必须有访问权限(简单的说就是不登录可以直接访问图片资源,特别是shiro框架要做匿名访问设置)

  2. 对地址进行手动url编码以支持中文路径(/吐槽下JasperPdf对中文的支持)

3 基本路径

String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/"+request.getContextPath()
   +
  图片路径 :相对上面网络地址 (涉及中文的已经要进行url中的中文编码)
        //获取系统根路径
        String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/"+request.getContextPath();
        
        /*获取登录用户loginUser的图片地址(相对路径),并拼接成全url地址类似
        (http://192.168.134.53/upload/rose/rose24b10062-6235-4585-a7c3-eaa5082dc21c.jpg),
        对其中的中文进行Url转码*/
        String  urlImgPath= UrlEncodeCH.urlEncodeChinese(basePath + loginUser.getUserImgs()) ;
        //存入map,logo 为pdf模板的图片参数
        map.put("logo", urlImgPath);

           // 填充模板数据
			//获取模板
        FileInputStream in = new FileInputStream(session.getServletContext().getRealPath("/pdfJasper/shipping.jasper"));
			//list是存的其他user数据,可以忽略(设置为空),这里主要用到map
        JasperPrint jasperPrint = JasperFillManager.fillReport(in, map, new JRBeanCollectionDataSource(list));
        JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());

jsperpdf参数相关设置

JasperPdf加后台加动态图片注意事项(踩过 的一些坑)_第1张图片

缓存设置false,是为了方便测试,查看根据不同用户打印不同的图片效果,生产环境中要改下.

附: 只对中文进行url编码的工具类

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
*编码工具类
*/
public class UrlEncodeCH {
     public static String urlEncodeChinese(String url) {
     
    try {
     
        Matcher matcher = Pattern.compile("[\\u4e00-\\u9fa5]").matcher(url);
        String tmp = "";
        while (matcher.find()) {
     
            tmp = matcher.group();
            url = url.replaceAll(tmp, URLEncoder.encode(tmp, "UTF-8"));
        }
    } catch (UnsupportedEncodingException e) {
     
        e.printStackTrace();
    }
    return url;
}
}

你可能感兴趣的:(java)