代码拉取完成,页面将自动刷新
说明:2.8.0版本
请附上调用代码,方便排查问题,谢谢
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import wiki.xsx.core.pdf.component.XEasyPdfComponent;
import wiki.xsx.core.pdf.component.table.XEasyPdfCell;
import wiki.xsx.core.pdf.component.table.XEasyPdfRow;
import wiki.xsx.core.pdf.component.table.XEasyPdfTable;
import wiki.xsx.core.pdf.doc.XEasyPdfDefaultFontStyle;
import wiki.xsx.core.pdf.doc.XEasyPdfDocument;
import wiki.xsx.core.pdf.doc.XEasyPdfPage;
import wiki.xsx.core.pdf.doc.XEasyPdfPositionStyle;
import wiki.xsx.core.pdf.handler.XEasyPdfHandler;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.util.List;
import java.util.*;
public class TestDemo {
public static void main(String[] args) {
testWritePdf();
}
public static void testWritePdf() {
List<PdfModel<?>> list = new ArrayList<>();
PdfModel<WbDTO2> table = new PdfModel<>();
table.setType(PdfContentType.TABLE);
List<WbDTO2> dataList = new ArrayList<>();
for (int i = 0; i < 120; i++) {
dataList.add(WbDTO2.builder().deviceId("deviceId-" + i).deviceName("设备" + (i + 1))
.localName("南山区金证大楼/" + (i + 1) + "楼").type("虚拟设备").productKey("kt")
.productId("productId-" + i).build());
}
table.setTableData(dataList);
list.add(table);
write(list, PDRectangle.A4);
}
/**
* 导出PDF
*
* @param dataList 数据
* @param rectangle 纸张大小,默认A4
* @author 杨昌海
* @date 2022/5/19
*/
public static void write(List<PdfModel<?>> dataList, PDRectangle rectangle) {
//todo 支持指定换页
rectangle = rectangle == null ? PDRectangle.A4 : rectangle;
List<XEasyPdfComponent> components = new ArrayList<>();
for (PdfModel<?> pdfModel : dataList) {
XEasyPdfComponent component = null;
switch (pdfModel.getType()) {
case TABLE:
component = createTable(pdfModel.getTableData(), rectangle);
break;
default:
break;
}
if (component != null) {
components.add(component);
}
}
XEasyPdfPage page = XEasyPdfHandler.Page.build(rectangle, components);
XEasyPdfDocument document = XEasyPdfHandler.Document.build(page);
document.save("./utilsPdf.pdf").close();
}
private static <T> XEasyPdfTable createTable(List<T> data, PDRectangle rectangle) {
List<XEasyPdfRow> rows = new ArrayList<>();
List<XEasyPdfCell> header = new ArrayList<>();
int column = 0;
float columnWith = 0;
for (T datum : data) {
Class<?> aClass = datum.getClass();
Field[] fields = aClass.getDeclaredFields();
if (column == 0) {
for (Field field : fields) {
field.setAccessible(true);
PdfTableProperty annotation = field.getAnnotation(PdfTableProperty.class);
if (annotation != null) {
column++;
}
}
columnWith = rectangle.getWidth() / column;
for (Field field : fields) {
field.setAccessible(true);
PdfTableProperty annotation = field.getAnnotation(PdfTableProperty.class);
if (annotation != null) {
String title = annotation.title();
header.add(XEasyPdfHandler.Table.Row.Cell.build(columnWith)
.addContent(XEasyPdfHandler.Text.build(title))
.setFontSize(16F)
.setDefaultFontStyle(XEasyPdfDefaultFontStyle.BOLD)
.setHorizontalStyle(XEasyPdfPositionStyle.LEFT)
);
}
}
//表头
rows.add(XEasyPdfHandler.Table.Row.build(header));
}
List<XEasyPdfCell> cells = new ArrayList<>();
for (Field field : fields) {
field.setAccessible(true);
Object value = null;
try {
value = field.get(datum);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
value = value == null ? "" : value;
cells.add(XEasyPdfHandler.Table.Row.Cell.build(columnWith)
.addContent(XEasyPdfHandler.Text.build(value.toString()))
.setHorizontalStyle(XEasyPdfPositionStyle.LEFT)
);
}
rows.add(XEasyPdfHandler.Table.Row.build(cells));
}
return XEasyPdfHandler.Table.build(rows);
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class PdfModel<T> {
/**
* 内容类型,默认文本
*/
private PdfContentType type = PdfContentType.TEXT;
/**
* type为TABLE表格的业务数据
*/
private List<T> tableData;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class WbDTO2 {
@PdfTableProperty(title = "设备名称")
private String deviceName;
@PdfTableProperty(title = "设备id")
private String deviceId;
@PdfTableProperty(title = "产品名称")
private String productName;
@PdfTableProperty(title = "产品标识")
private String productKey;
@PdfTableProperty(title = "产品ID")
private String productId;
@PdfTableProperty(title = "设备位置")
private String localName;
@PdfTableProperty(title = "描述")
private String type;
}
/**
* PDF table表格注解
*
* @author 杨昌海
* @date 2022/5/18
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface PdfTableProperty {
/**
* 表头名称
*/
String title();
}
enum PdfContentType {
//内容格式
//表格
TABLE,
//表单
FORM,
//文本
TEXT,
//图片
IMAGE,
//分隔符/横线
LINE,
//二维码
BAR_CODE,
//水印
WATERMARK,
;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
请使用v2.8.2版本
登录 后才可以发表评论