<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.11</version>
</dependency>
public class PdfFontUtil {
private PdfFontUtil(){}
/**
* 段落样式获取
*/
public static Paragraph getParagraph (String content, Font font,Integer alignment){
Paragraph paragraph = new Paragraph(content,font) ;
if (alignment != null && alignment >= 0){
paragraph.setAlignment(alignment);
}
return paragraph ;
}
/**
* 图片样式
*/
public static Image getImage (String imgPath,float width,float height) throws Exception {
Image image = Image.getInstance(imgPath);
image.setAlignment(Image.MIDDLE);
if (width > 0 && height > 0){
image.scaleAbsolute(width, height);
}
return image ;
}
/**
* 表格生成
*/
public static PdfPTable getPdfPTable01 (int numColumns,float totalWidth) throws Exception {
// 表格处理
PdfPTable table = new PdfPTable(numColumns);
// 设置表格宽度比例为%100
table.setWidthPercentage(100);
// 设置宽度:宽度平均
table.setTotalWidth(totalWidth);
// 锁住宽度
table.setLockedWidth(true);
// 设置表格上面空白宽度
table.setSpacingBefore(10f);
// 设置表格下面空白宽度
table.setSpacingAfter(10f);
// 设置表格默认为无边框
table.getDefaultCell().setBorder(0);
table.setPaddingTop(50);
table.setSplitLate(false);
return table ;
}
/**
* 表格内容
*/
public static PdfPCell getPdfPCell (Phrase phrase){
return new PdfPCell (phrase) ;
}
/**
* 表格内容带样式
*/
public static void addTableCell (PdfPTable dataTable,Font font,List<String> cellList){
for (String content:cellList) {
dataTable.addCell(getParagraph(content,font,-1));
}
}
}
public class PdfPage01 {
// 基础配置
private static String PDF_SITE = "G:\\file\\PDF页面.pdf" ;
private static String FONT = "G:/file/Fonts/Simhei.ttf";
private static String PAGE_TITLE = "PDF数据导出报告" ;
// 基础样式
private static Font TITLE_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,20, Font.BOLD);
private static Font NODE_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,15, Font.BOLD);
private static Font BLOCK_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,13, Font.BOLD, BaseColor.BLACK);
private static Font INFO_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,12, Font.NORMAL,BaseColor.BLACK);
private static Font CONTENT_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
private static void createPdfPage () throws Exception {
// 创建文档
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(PDF_SITE));
document.open();
// 报告标题
document.add(PdfFontUtil.getParagraph(PAGE_TITLE,TITLE_FONT,1)) ;
document.add(PdfFontUtil.getParagraph("\n商户名称:XXX科技有限公司",INFO_FONT,-1)) ;
document.add(PdfFontUtil.getParagraph("\n生成时间:2021-09-02\n\n",INFO_FONT,-1)) ;
// 报告内容
// 段落标题 + 报表图
document.add(PdfFontUtil.getParagraph("城市数据分布统计",NODE_FONT,-1)) ;
document.add(PdfFontUtil.getParagraph("\n· 可视化图表\n\n",BLOCK_FONT,-1)) ;
// 设置图片宽高
float documentWidth = document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin();
float documentHeight = documentWidth / 580 * 320;
document.add(PdfFontUtil.getImage("F:\\file-type\\myChart.jpg",documentWidth-80,documentHeight-80)) ;
// 数据表格
document.add(PdfFontUtil.getParagraph("\n· 数据详情\n\n",BLOCK_FONT,-1)) ;
PdfPTable dataTable = PdfFontUtil.getPdfPTable01(6,500) ;
// 设置表格
List<String> tableHeadList = tableHead () ;
List<List<String>> tableDataList = getTableData () ;
PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableHeadList);
for (List<String> tableData : tableDataList) {
PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableData);
}
document.add(dataTable);
document.add(PdfFontUtil.getParagraph("\n· 报表描述\n\n",BLOCK_FONT,-1)) ;
document.add(PdfFontUtil.getParagraph("数据报告可以监控每天的推广情况," +
"可以针对不同的数据表现进行分析,以提升推广效果。",CONTENT_FONT,-1)) ;
document.newPage() ;
document.close();
writer.close();
}
private static List<List<String>> getTableData (){
List<List<String>> tableDataList = new ArrayList<>() ;
for (int i = 0 ; i < 3 ; i++){
List<String> tableData = new ArrayList<>() ;
tableData.add("浙江"+i) ;
tableData.add("杭州"+i) ;
tableData.add("276"+i) ;
tableData.add("33.3%") ;
tableData.add("33.3%") ;
tableData.add("33.3%") ;
tableData.add("33.3%") ;
tableData.add("33.3%") ;
tableDataList.add(tableData) ;
}
return tableDataList ;
}
private static List<String> tableHead (){
List<String> tableHeadList = new ArrayList<>() ;
tableHeadList.add("省份") ;
tableHeadList.add("城市") ;
tableHeadList.add("数量") ;
tableHeadList.add("百分比") ;
tableHeadList.add("百分比") ;
tableHeadList.add("百分比") ;
tableHeadList.add("百分比2") ;
tableHeadList.add("百分比1") ;
return tableHeadList ;
}
public static void main(String[] args) throws Exception {
createPdfPage () ;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://lebron.blog.csdn.net/article/details/125587911
内容来源于网络,如有侵权,请联系作者删除!