Java生成PDF的若干坑

本文首发于个人微信公众号《andyqian》,期待你的关注~

前言

  由于工作原因,使用Java生成大量的电子凭证,也就是PDF。在之前的文章中,有写过,如何通过Java生成PDF。这里就不再描述,写这篇文章主要是为了记录我在使用Java生成PDF过程中犯过的错,以及踩过的坑。

内存溢出

  之前在使用生成方案的时候,我们一开始采用的是《PD4ML》框架,这个框架相对来说,要小巧些。但是不足的是:它是闭源的。在批量生成PDF文件时会出现内存泄漏的现象。我们在分析内存原因时,都止步于下面这一段代码:

    private void createPdfByHtml(String html, File file) throws Exception{
        FileOutputStream fos = new FileOutputStream(file);  
        ...
        // 这一行
        pd4ml.render(sr, fos, new URL("http://"), "UTF-8");  
    }

因此,我们不得不考虑换一个第三方库。目前我们使用的是开源库《iText》,到目前为止,稳定运行。

(我们在选择第三方框架时,尽量选择开源的,因为在出现问题后,我们可以通过查看源代码分析,甚至可以修改源代码进行优化)。

字体路径

  这个问题是这样的,我们生成PDF时为了支持中文字体,需要通过路径加载指定的字体文件。而开发环境是windows,测试/生产环境均是Linux。字体放在

/resources/fonts/

因为:
1. 在Window下获取Thread.currentThread()为null值
2. 在Linux下获取this.class.getClass().getResource(“/”).getPath();获取为null

所以在加载路径时,我们通过下述方法进行了兼容处理。

  /**
     * 应用场景:
     * 1.在windows下,使用Thread.currentThread()获取路径时,出现空对象,导致不能使用
     * 2.在linux下,使用PdfUtils.class获取路径为null,
     * 获取字体路径
     * @return
     */
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要 网上购物商城系统是一个B/S结构的信息管理系统开发主要包括前台页面显 示层,后台数据库持久层,和基于JavaBean封装的业务逻辑层。对于前台页面,要求界面友好,简单实用。对于持久层,要求存储数据效率高,安全性高。对于 封装的业务逻辑,要求重用性高,代码效率高。 网上商城系统共分两个部分:前台用户部分和后台管理部份。在前台用户部分中包括用户在线注册、定购商品、浏览商品、查询商品信息等操作:后台管理部分包括:商品信息的管理、用户订单的管理、普通管理员的管理、客户的管理各种即时信息的发布管理。作为一个购物系统,系统的安全性和实现购物的方便性是 很重要的,在安全性方面,系统主要考虑了数据存储的安全性,以及用了用户注册和密码等措施没有使用到数字签名。用到的主要技术有JSPAJAX和JavaBean系统采用MySQL来设计数据库,使用MyEclipse开发平台。 本文主要介绍了个性化页面的背景及JavaBean+JSP系统的一般原理;阐述了整个个性化页面生成系统的系统结构及工作原理:分析了系统实现中的特殊性、难点和重点:设计实现了用户注册/登录、查询、购买;实现了管理员对网站的系 统管理:个性化页面动态生成--回显等程序模块;实现了TSP和HTML页面:分析 并解决了实现中的若干技术问题;建立了完整的实验网站,进行测试并分析结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值