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