java生成pdf文件

发布于:2025-07-06 ⋅ 阅读:(18) ⋅ 点赞:(0)

1.依赖

    <dependency>
      <groupId>com.itextpdf</groupId>
      <artifactId>itext-core</artifactId>
      <version>8.0.4</version>
      <type>pom</type>
    </dependency>

2.代码

package org.example;


import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.io.source.ByteArrayOutputStream;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.Style;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.layout.element.*;
import com.itextpdf.layout.properties.BorderRadius;
import com.itextpdf.layout.properties.HorizontalAlignment;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

public class App {
    public static void setCell1(Table table,int row,String name, float font,boolean color,boolean bold){
        Style style1 = new Style().setPaddingLeft(2).setPaddingTop(0);
        Paragraph gg = new Paragraph(name).addStyle(style1).setFontSize(font);
        if(bold){
            gg.setBold();
        }
        if(color){
            gg.setBold().setFontColor(new DeviceRgb(0, 0, 255));
        }
        table.addCell(new Cell(row,2).add(gg).setBorder(Border.NO_BORDER));
    }

    public static void main(String[] args) throws Exception{
        String name="a"+".pdf";
        PdfDocument pdfDocument = new PdfDocument(new PdfWriter(name));
        Document document = new Document(pdfDocument);
        float[] col = {133, 160,107};
        Table table = new Table(col)
                .setHorizontalAlignment(HorizontalAlignment.CENTER)
                .setWidth(350)
                .setBorder(new SolidBorder(1))
                .setFont(PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H"));
        // 设置左边图片头像
        ImageData imageData ;
        String url="C:\\Users\\Administrator\\Desktop\\1.PNG";
        try {
            imageData= ImageDataFactory.create(url);
        } catch (Exception e) {
            File file = new File(url);
            BufferedImage read = ImageIO.read(file);
            ByteArrayOutputStream baStream = new ByteArrayOutputStream();
            ImageIO.write(read, "jpg", baStream);
            imageData = ImageDataFactory.create(baStream.toByteArray());

        }
        Image image = new Image(imageData);
        Cell cell = new Cell(4, 1);
        cell.setPaddingLeft(10);
        image.setWidth(96);
        image.setHeight(96);
        image.setBorderRadius(new BorderRadius(5));
        cell.add(image);
        cell.setBorder(Border.NO_BORDER);
        table.addCell(cell);

        //
        String mName="材料名称:水泥";
        String mNo="识别编号:sbhlb1025";
        String mUnit="箱:包:袋(1:10:100)";
        String mType="材料分类:养护材料";

        setCell1(table,1,mName,16,false,true);
        setCell1(table,1,mNo,11,false,false);
        setCell1(table,1,mUnit,11,true,false);
        setCell1(table,1,mType,11,false,false);
        String spec="尺寸:L 4320mm * W 310mm * D 85mm * T 4mm";
        setCell1(table,1,spec,11,false,false);
        Image image1 = new Image(ImageDataFactory.create("C:\\Users\\Administrator\\Desktop\\1.PNG"));
        Cell cell1 = new Cell(1, 1);
        cell1.setHeight(65);
        cell1.setWidth(65);
        image1.setWidth(60);
        image1.setHeight(60);
        image1.setMarginRight(5);
        image1.setMarginBottom(5);
        image1.setHorizontalAlignment(HorizontalAlignment.RIGHT);

        cell1.add(image1);
        cell1.setBorder(Border.NO_BORDER);
        table.addCell(cell1);
        int total=4;
        // 把元素添加到文档里,每页展示三个卡片信息,超过三个另起一页
        for (int i = 0; i < total; i++) {
            document.add(table);
            document.add(new Paragraph(" "));
            if (i > 0 && (i % 3 == 2)) {
                document.add(new AreaBreak());

            }
        }
        //删除最后一页的空白页
        if(total%3==0){
            int lastPage = document.getPdfDocument().getNumberOfPages();
            document.getPdfDocument().removePage(lastPage);
        }
        document.close();
    }
}

3.效果

4.说明

代码中有两处使用图片路径,注意切换成对应的路径。