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.说明
代码中有两处使用图片路径,注意切换成对应的路径。