#

# 简单的写

import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;

import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) {
        // 1、创建Pdf文档
        try(
                PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\excelDemo/a.pdf"))
        ) {
            // 2、创建空白页面,必须包含页面,否则创建时候报错
            pdfDocument.addNewPage(PageSize.A4);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

# 列表

import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.List;
import com.itextpdf.layout.element.ListItem;
import com.itextpdf.layout.element.Paragraph;

import java.io.IOException;

public class Demo1 {
    public static void main(String[] args) {
        // 创建一个新的PDF文档,并连接到输出文件
        try(
                PdfDocument pdfDocument = new PdfDocument(new PdfWriter("D:\\excelDemo/a.pdf"))
        ) {
            // 向文档添加一个新的页面,设置页面大小为A4
            pdfDocument.addNewPage(PageSize.A4);

            // 创建一个文档对象,连接到PDF文档
            Document document = new Document(pdfDocument);

            // 创建一个PDF字体对象(使用Times Roman字体)
            PdfFont pdfFont = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);

            // 向文档添加一个段落,设置字体为之前创建的字体
            document.add(new Paragraph("iten is ").setFont(pdfFont));

            // 创建一个项目列表对象,并设置列表项目的缩进和符号
            List list = new List()
                    .setSymbolIndent(12)
                    //设置符号
                    .setListSymbol("-")
                    .setFont(pdfFont);

            // 向列表添加多个项目
            list.add(new ListItem("Never gonna give you up"))
                    .add(new ListItem("Never gonna let you down"))
                    .add(new ListItem("Never gonna run around and desert you"))
                    .add(new ListItem("Never gonna make you cry"))
                    .add(new ListItem("Never gonna say goodbye"))
                    .add(new ListItem("Never gonna tell a lie and hurt you"));
            // 将项目列表添加到文档
            document.add(list);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

# 图片

public class Demo1 {
    public static void main(String[] args) {
        try(
                PdfDocument writer = new PdfDocument(new PdfWriter("D:\\excelDemo/a.pdf"))
        ) {
            Document document = new Document(writer);

            // 创建一个图片对象,从给定的路径加载图片
            Image dog = new Image(ImageDataFactory.create("C:\\Users\\GaoLiang\\Pictures\\uTools_1687237919654.png"));
            // 创建一个段落对象,包含文本和图片
            Paragraph p = new Paragraph("The quick brown ")
                    .add(" jumps over the lazy ")
                    .add(dog);
            // 将段落添加到文档
            document.add(p);

            //Close document
            document.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

# 表格


import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;

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

public class Demo1 {

    public static void main(String[] args) {
        try(
                PdfDocument writer = new PdfDocument(new PdfWriter("D:\\excelDemo/a.pdf"))
        ) {
            // 初始化文档对象,设置页面大小为A4横向,以及边距
            Document document = new Document(writer, PageSize.A4.rotate());
            document.setMargins(20, 20, 20, 20);

            float[] tableColumnWidths = new float[]{5, 5, 5, 5};

            // 创建一个表格对象,并设置列宽
            Table table = new Table(tableColumnWidths);

            //百分之百的宽度
            table.setWidth(UnitValue.createPercentValue(100));

            //处理中文问题  
            PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);

            List<Student> studentList = getStudentList();
            List<String> headerLine = getHeaderLine();

            //向表格写内容
            processHeader(table, headerLine, font);
            process(table, studentList, font);

            document.add(table);
            //Close document
            document.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void processHeader(Table table, List<String> header, PdfFont font) {
        for (String s : header) {
            table.addHeaderCell(new Cell().add(new Paragraph(s)).setFont(font));
        }
    }

    public static void process(Table table, List<Student> line, PdfFont font) {
        for (Student student : line) {
            table.addCell(new Cell().add(new Paragraph(student.getName().toString())).setFont(font));
            table.addCell(new Cell().add(new Paragraph(student.getAge().toString())).setFont(font));
        }
    }

    public static List<String> getHeaderLine() {
        return Arrays.asList("姓名", "年龄");
    }

    public static List<Student> getStudentList() {
        List<Student> res = new ArrayList<>();
        res.add(new Student(18, "zs"));
        res.add(new Student(20, "lisi"));
        return res;
    }

    static class Student {
        private Integer age;
        private String name;

        public Student(Integer age, String name) {
            this.age = age;
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public String getName() {
            return name;
        }
    }

}