IText.jar导出pdf

引入jar包

		<dependency>
             <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
		    <version>5.5.13.3</version>
		</dependency>

使用itext导出pdf文件,因为国内itext的文档太少了,所以一些个常用的api做说明:

	1.生成pdf封面
	2.生成pdf,目录
	3.生成pdf,目录跳转
	4.生成pdf,页眉页脚
	5.解决pdf的图片排序,乱序问题。
	6.解决pdf字体问题
	7.itext常用api介绍

1.生成pdf封面

		封面就不赘述了,很简单,使用Chapter ,给图片和内容,添加到chapter中,并且给chapter,放入document中,就可以实现封面

2.生成pdf,目录

下面展示一些 内联代码片

        //添加章节目录
        Chapter indexChapter = new Chapter(new Paragraph("目录", pdfFont.getCnFont()), 0);
        indexChapter.setNumberDepth(-1);                              // 设置数字深度
        int num = 1;
        for (Map.Entry<String, Integer> index : footer.getIndex().entrySet()) {
            String keyValue = index.getKey();
            String[] str = keyValue.split("\\.");
            String desc = str[str.length - 1];

            Chunk chunk = new Chunk(keyValue, pdfFont.getCnFont());
            chunk.setLocalGoto(desc);// 点击目录,跳转到指定锚点
            Paragraph paragraph = new Paragraph(chunk);
            if (num == 1) {
                paragraph.setSpacingBefore(20);
                num++;
            }
            //加入点点
            paragraph.add(new Chunk(new DottedLineSeparator()));
            //加入页码
            paragraph.add(new Chunk((index.getValue() + 2) + ""));

            indexChapter.add(paragraph);
        }

        document.add(indexChapter);

在这里插入图片描述

3.生成pdf,目录跳转

				Chunk chunk = new Chunk("我是标题,标题标题:" + i, pdfFont.getCnFont());
                chunk.setLocalDestination(" " + chunk.getContent());// 设置锚点,点击标题跳转到指定锚点
                chapter = new Chapter(new Paragraph(chunk), i);

4.生成pdf,页眉页脚

		// 设置页眉
        try {
            PdfPTable table = new PdfPTable(2);
            table.setTotalWidth(PageSize.A4.getWidth() - 80);
            table.setWidths(new int[]{80, 18});
            table.setLockedWidth(true);
            table.getDefaultCell().setFixedHeight(-10);
            table.getDefaultCell().setBorder(Rectangle.BOTTOM);
            table.getDefaultCell().setBorderWidth(0.5f);
            table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);

            PdfPCell cell = new PdfPCell(new Phrase("我是页眉!!", boldFont));
            cell.setBorder(Rectangle.BOTTOM);
            cell.setPaddingTop(2);
            cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(cell);

            PdfPCell cell1 = new PdfPCell(new Phrase("我是页眉1111!!", boldFont));
            cell1.setBorder(Rectangle.BOTTOM);
            cell1.setPaddingTop(2);
            cell1.setHorizontalAlignment(Element.ALIGN_RIGHT);
            table.addCell(cell1);
            // 将页眉写到document中,位置可以指定,指定到下面就是页脚
            table.writeSelectedRows(0, -1, 40, PageSize.A4.getHeight() - 20, writer.getDirectContent());
            
			 // 将页眉写到document中,位置可以指定,指定到下面就是页脚
            // table.writeSelectedRows(0, -1, 40, 20, writer.getDirectContent());  页脚设置,指定在页脚生成
        } catch (Exception de) {
            throw new ExceptionConverter(de);
        }

5.解决pdf的图片排序,乱序问题。

如果出现图片乱序问题,可以使用PdfPTable,强制设置内容位置

6.解决pdf字体问题

        this.baseFontCn = BaseFont.createFont("C:\\sourcejar/Global_Pro_light.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
	指定使用包含汉字的字体。

7.itext常用api介绍

	BaseFont  	指定字体
	Font 			字体样式,颜色,粗体,大小
	Chapter 		章节,可以设置于上一页强制换页,或者不换页
	Paragraph  	段落,每个段落之间会换行
	Phrase			短句,包含块
	Chunk  		块,段落中的块
	PdfPTable 	表格
	PdfPCell		单元格

	PdfPTable table = new PdfPTable(2);  // 设置表格列数
	table.setTotalWidth(PageSize.A4.getWidth() - 80);//表格宽度
	table.setWidths(new int[]{80, 18});// 表格每列的比例
	table.setLockedWidth(true);// 锁定宽度
	table.getDefaultCell().setFixedHeight(-10); 
	table.getDefaultCell().setBorder(Rectangle.BOTTOM); // 单元格,底部显示边框
	table.getDefaultCell().setBorderWidth(0.5f);// 边框宽度
	table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);// 单元格对其方式

    PdfPCell cell3 = new PdfPCell(new Paragraph(String.valueOf(writer.getPageNumber()), fontDetail));
    cell3.setBorder(Rectangle.TOP);
    cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell3);

导出pdf,dome.java
https://download.csdn.net/download/qq_30594137/86438310

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值