Itext7生成pdf最全api总结

本文详细总结了使用Itext7生成PDF的API,包括显示中文、设置分辨率、布局(绝对布局与相对布局)、自动分页与页码生成、常用组件如Table、Paragraph和Image的使用,以及保存PDF至磁盘和生成文件流的方法。对于显示中文,需要引入自定义字体,并调整字体设置。布局部分解释了Itext7的坐标系和两种布局模式。通过示例代码演示了Table创建进度条、Paragraph文字样式调整以及Image插入。最后介绍了PDF的保存方式,包括保存到磁盘和返回文件流。
摘要由CSDN通过智能技术生成

Itext7生成pdf最全api总结

最近使用itext7生成pdf被折磨到崩溃,一是官方文档不全,网上文章基本都是基于老版本api的,已经完全不适用itext7版本;二是itext7的api和css很像,使用java写css很让人崩溃。把我用到的做一个总结。

显示中文

itext7在使用默认字体显示中文的时候,由于默认字库不支持中文,生成的pdf中的中文会显示空白,要解决这个问题需要自己引入字体。

  1. 下载一个中文字体,我这里用的是SourceHanSansCN.ttf(只用过ttf文件,不知道是否支持其他字体文件的格式)

  2. 加载中文字体

    InputStream inputStream = new FileInputStream(new File("SourceHanSansCN.ttf"));
    //第三个参数为embedded,是否为内置字体,这里是自己提供的所以传false
    PdfFont font = PdfFontFactory.createFont(IOUtils.toByteArray(inputStream), PdfEncodings.IDENTITY_H, false);
    
  3. 设置字体

    //默认是A4纸大小
    Document document = new Document(pdfDocument, new PageSize());
    document.setFont(font);
    

分辨率

大部分情况下,生成的pdf是有打印需求的,打印就涉及到pdf分辨率的问题。在itext中除了插入的图片外其他都是矢量图所以不必担心分辨率的问题,只需要保证插入图片的分辨率即可,在itext中生成图片的分辨率默认是72dpi,这里是需要做一些处理的,如下:

int defaultDpi = 72;
int targetDpi = 300;
Image test = new Image(ImageDataFactory.create("test.jpg"));
test.scale(defaultDpi/targetDpi, defaultDpi/targetDpi);

布局

Itext坐标系如下图,当使用绝对布局的时候需要计算元素距离左侧和下侧的长度,当使用相对布局的时候,元素则是自上往下排列。

坐标原点图

绝对布局
setFixedPosition(float left, float bottom, float width)
相对布局

使用相对布局时,不需要setFixedPosition,只需要设置距离上下左右的长度即可,这里感觉有点类似于css了。

setMarginLeft(float value);
setMarginRight(float value);
setMarginBottom(float value);
setMarginTop(float value);
setMargin(float commonMargin);

自动分页+生成页码

在使用绝对布局的时候,大部分情况下页面内容是固定大小的,位置也是固定的,分页也需要自己写代码来进行控制。但是如果pdf的内容不是固定的,这时候如果使用绝对布局就不是那么的灵活了,还需要自己计算元素的高度也设置绝对位置,这个时候我们选择使用相对布局则会更合适、简单一些。代码如下:

class PageEventHandler implements IEventHandler {
   
    private Document document;
    private PdfFont font;

    //由于需要统一和汉字的字体&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值