您的位置:首页 > 数码常识数码常识

java(iText)工具包生成PDF(Javaitext)

2025-05-12人已围观

java(iText)工具包生成PDF(Javaitext)
  PDF操作类库 iTextiText是一个非常著名的能够快速产生PDF文件的Java类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合

  JavaitextPDF操作类库 iText

  iText的更新变化很大,早期版本在PDF样式上可能会有瑕疵,所有我使用的最新的5.5.6包

  1.添加Maven依赖

  itext核心包 和xmlworder字体包

  2.直接生成pdf

  非常简单,用文字创建段落等即可,设置好字体、间距、对齐方式等等即可,弄个Hello World 的例子。

  3.字体

  我们项目文书字体比较特殊,比如用到了宋体(99%都这个吧)、华文仿宋(安装office后自带)、仿宋_GB2312等,于是就研究了一下pdf字体,网上有很多方法使用中文字体,其实5.0版以后的iText加入字体还是很方便的。

  xmlworker的XMLWorkerFontProvider提供了很方便的获取字体方法:

  1.注册一个文件夹,里面有哪些字体都可以,比如我demo中的字体

  2.使用getFont(字体名)即可获得,不过字体名从哪来的呢

  4.页眉页脚

  iText5中并没有之前版本HeaderFooter对象设置页眉和页脚,可以利用PdfPageEvent来完成页眉页脚的设置工作。

  PdfPageEvent提供了几个pdf在创建时的事件,页眉页脚就是在每页加载完写入的。

  每一页加个页码还是很简单的,但是总页码就麻烦了,iText是流模式的写入内容,只有写到最后,才能知道有多少页,那么显示总页数就麻烦了,不过麻烦不代表不可能。

  其实iText仅在调用释放模板方法后才将PdfTemplate写入到OutputStream中,否则对象将一直保存在内存中,直到关闭文档。

  所以我们可以在最后关闭文档前,使用PdfTemplate写入总页码。可以理解成先写个占位符,然后统一替换。

  还是HelloWorld例子:

  5转pdf

  结果还不错,虽然可以满足我们的要求,但是比较复杂,动态创建一个个的表格和内容过于繁琐,方法太粗暴了,用户 的文档内容或格式变化,就要修改程序了。

  先创建html,然后转换成pdf,demo如下:

  此处使用了XmlWorker,XmlWorker也是iText官方的,目前和iText版本一起更新,可以讲XHTML转换成pdf,支持大部分样式和标签,是大部分哦,不是全部。

  目前我们就用的这个方式,写好html文档,使用时动态替换html中的标记位,然后生成pdf。

  使用XHTML转pdf要注意的地方:

  1. html中不指定字体,则默认使用英文字体,中文会不显示;

  2. html中指定的字体必须是英文名称;如宋体:font-family:SimSun;正确 font-family:宋体;则错误,竟然unicode也不行。

  3. html中不能指定自定义字体(比如上文中的方正兰亭黑),但是itext一般操作系统的字体都支持,如果ubuntu上没有微软雅 黑,可以从windows下拷贝雅黑字体Yahei.ttf 放进来ubuntu上/usr/share/fonts/路径。

  4. pdf中添加图片也非常简单,例如:<img src='http://sjzlt.cn/shuma/d:/1.jpg'/>,就可以了。

  5. XHTML不是HTML,所以任何标签都要完整结束,比如<br>错误,必须<br/>才行。

  写一个html模版很简单,需要对html和css熟练,调生成的样式部分比较麻烦(比如文字多了会切掉,不切会影响整体样式,表格线有粗有细,xmlworker不支持全部css等),一般A4纸都是厘米单位的,html中最好也使用厘米,处理简单点。

  上面就是小居数码小编今天给大家介绍的关于(Javaitext)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。

  94%的朋友还想知道的:

  python常用的可视化工具有哪些(python的可视化工具包有哪些)

  传统数据分析工具包括(什么是常用的数据分析工具)

  mysql图形工具包括(mysql图形化管理工具有哪些)

  手机adb解锁使用教程(adb调试工具包怎么用)



  154710
 

很赞哦! ()

随机图文