Java 使用i Text 生成 pdf


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

pom.xml

// 创建一个Document对象(pdf文档) A4纸张大小
Document document = new Document(PageSize.A4);
// 建立一个书写器(Writer)与document对象关联
PdfWriter.getInstance(document, new FileOutputStream("D:\\Test.pdf"));
// 打开文档
document.open();

// 向文档中输入一个内容 
document.add(new Paragraph("Hello World"));

// 关闭文档
document.close();


  image.png

pdf文档中添加内容

全局字体设置

// 段落
Paragraph paragraph = new Paragraph("Hello I Text 5", titlefont);
//设置文字居中 0靠左 1,居中 2,靠右
paragraph.setAlignment(1);
//设置左缩进
paragraph.setIndentationLeft(12);
//设置右缩进
paragraph.setIndentationRight(12);
//设置首行缩进
paragraph.setFirstLineIndent(24);
//行间距
paragraph.setLeading(20f);
//设置段落上空白
paragraph.setSpacingBefore(5f);
//设置段落下空白
paragraph.setSpacingAfter(10f);

直线/点线

// 超链接
Anchor anchor = new Anchor(new Paragraph("超链接", titlefont));
anchor.setReference("www.baidu.com");

图片

// 创建一个包含5列的表格
PdfPTable table = new PdfPTable(5);
// 创建一个宽度比例表格
PdfPTable table = new PdfPTable(new float[]{10, 12, 12, 10, 10});
// 表格最大像素
table.setTotalWidth(maxWidth);
// 锁定宽度
table.setLockedWidth(true);
// 水平居中
table.setHorizontalAlignment(Element.ALIGN_CENTER);
// 表格边框 配合 单元格设置
table.getDefaultCell().setBorder(1);

// 创建单元格
PdfPCell cell = new PdfPCell();
// 垂直对齐设置
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
// 水平对齐设置
cell.setHorizontalAlignment();
// 合并单元格
cell.setColspan(1);
// 合并单元格
cell.setRowspan(1);
// 内容
cell.setPhrase(new Phrase(value, font));
// 边框设置
cell.setBorder(Rectangle.NO_BORDER);
// 背景颜色设置
cell.setBackgroundColor(baseColor);

// 将单元格加入表格
table.addCell(cell)
    
// 表格添加图片
Image image = Image.getInstance("http://devb2b.hosjoy.com/img/hosjoy_logo48@2x.595a425a.png");
image.setAlignment(Image.ALIGN_LEFT);
Phrase listOfDots = new Phrase();
// 位置设置
listOfDots.add(new Chunk(image, 0, 0));
// 表格添加图片
table.addCell(listOfDots);    

页眉页脚 和 水印

继承 PdfPageEventHelper

package com.example.demo.pdf;

import java.util.ArrayList;
import java.util.List;

import lombok.Data;

/**
 * Product
 *
 * @author wangjun
 */
@Data
public class Product {
    private String productName;

    private String productCode;

    private Integer price;

    private String color;
    private String remark;

    public Product() {
    }

    public Product(String productName, String productCode, Integer price, String color, String remark) {
        this.productName = productName;
        this.productCode = productCode;
        this.price = price;
        this.color = color;
        this.remark = remark;
    }


    public List<Product> getProductList() {

      List<Product> products = new ArrayList<>();
        for(int i=1;i<100;i++){
            Product product1 = new Product("产品"+i, "cp"+i, 120+i, "红色"+i, "大卖"+i);
            products.add(product1);
        }
        Product product = new Product();
        product.setColor("222");
        products.add(product);
        return products;
    }
}

// 页眉页脚

package com.example.demo.pdf;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.itextpdf.text.Anchor;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.DottedLineSeparator;
import com.itextpdf.text.pdf.draw.LineSeparator;

import lombok.extern.slf4j.Slf4j;

/**
 * 标题
 *
 * @author wangjun
 */

// 启动Spring Boot项目访问 /api/download-pdf


  image.png

加密:
writer.setEncryption("pwd".getBytes(), "ownerPassword".getBytes(), PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
itext 5.5.13 版本需要引入依赖

 >
            >org.bouncycastle>
            >bcprov-jdk15on>
            >1.49>
        >
        >
            >org.bouncycastle>
            >bcpkix-jdk15on>
            >1.49>
        >



https://www.jianshu.com/p/2c895ab46bf1