里面包含了表格,图片还有一些文字格式设置,
1、jar包
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext-rtf</artifactId>
<version>2.1.7</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2、后台代码
public static void main(String[] args) {
String filePath = exportDoc(request, barImgPath, session);
}
public String exportDoc(HttpServletRequest request, String path1, HttpSession session) {
try {
// 设置纸张大小
Document document = new Document(PageSize.A4);
//生成图片的地址
String basePath = HTTP_URL_LOCATION;
String wordPath = basePath + "anyWord/";
String pieImgPath = basePath + "echartsImg/";
String todayFolder = FileUtils.getDailyFilePath();
File path = new File(wordPath + todayFolder);
File piePath = new File(pieImgPath + todayFolder);
if (!path.exists()) {
path.mkdirs();
}
if (!piePath.exists()) {
piePath.mkdirs();
}
long wordName = System.nanoTime();
long pieImgName1 = System.nanoTime();
String filePath = wordPath + todayFolder + wordName + ".doc";
String piePath1 = pieImgPath + todayFolder + pieImgName1 + ".png";
File file = new File(filePath);
RtfWriter2.getInstance(document, new FileOutputStream(file));
document.open();
// 设置中文字体
BaseFont bfChinese = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI,
BaseFont.NOT_EMBEDDED);
// 标题字体风格
Font titleFont = new Font(bfChinese, 15, Font.BOLD);
Paragraph title = new Paragraph("健康档案重复建档情况分析");
// 设置标题格式对齐方式
title.setAlignment(Element.ALIGN_CENTER);
title.setFont(titleFont);
document.add(title);
//二级标题风格
Font secondFont = new Font(bfChinese, 12, Font.BOLD);
//正文字体风格
Font zwFont = new Font(bfChinese, 10);
String secondTitle = "一、基本情况";
Paragraph secondStyle = new Paragraph(secondTitle);
// 正文格式左对齐
secondStyle.setAlignment(Element.ALIGN_LEFT);
secondStyle.setFont(secondFont);
// 离上一段落空的行数
secondStyle.setSpacingBefore(20);
// 设置第一行空的列数
secondStyle.setFirstLineIndent(4);
document.add(secondStyle);
//String zlContent = word.getZlContent(request);
xx xx= (xx) session.getAttribute("xx");
List<xx> resultList = xx
.xx(xx);
Table table = new Table(5);
Cell cell = new Cell("header");
//单元格水平对齐方式
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//单元格垂直对齐方式
cell.setVerticalAlignment(Element.ALIGN_CENTER);
cell.setHeader(true);
table.addCell("1");
table.addCell("2");
table.addCell("3");
table.addCell("4");
table.addCell("5");
String zlContent = "11" + resultList.size() + "22";
String jdzsContent = "33";
String tjgcfContent = "44";
DefaultPieDataset pie1 = new DefaultPieDataset();
int countyCount = 0;
for (xx xx: resultList) {
String cityName = xx.getOrgName();
zlContent += cityName + ",";
jdzsContent += cityName + ":" + xx.getCount() + ",";
tjgcfContent += cityName + ":" + xx.getTargeta() + ",";
pie1.setValue(cityName, Integer.parseInt(xx.getTargeta()));
String cityCode = xx.getTypeCode();
List<ss> countyList = xx
.xx(xx);
cell = new Cell(ss.getOrgName());
int rospanCount = countyList.size() + 1;
cell.setRowspan(rospanCount);
//单元格水平对齐方式
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
//单元格垂直对齐方式
cell.setVerticalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
table.addCell("总计");
table.addCell(xx.getOpDate());
table.addCell(xx.getCount());
table.addCell(xx.getTargeta());
for (xx xx: countyList) {
table.addCell(xx.getOrgName());
table.addCell(xx.getOpDate());
table.addCell(xx.getCount());
table.addCell(xx.getss());
}
countyCount += countyList.size();
}
EchartsToImg.createPieChart(pie1, piePath1, "12");
zlContent += "13" + countyCount + "14";
Paragraph zlStyle = new Paragraph(zlContent);
zlStyle.setAlignment(Element.ALIGN_LEFT);
zlStyle.setFont(zwFont);
zlStyle.setSpacingBefore(20);
zlStyle.setFirstLineIndent(4);
document.add(zlStyle);
//表格
document.add(table);
//指标标题
String zbTitle = "34";
Paragraph zbStyle = new Paragraph(zbTitle);
zbStyle.setAlignment(Element.ALIGN_LEFT);
zbStyle.setFont(secondFont);
zbStyle.setSpacingBefore(20);
document.add(zbStyle);
//指标1小标题
Paragraph xyStyle = new Paragraph("1、45");
xyStyle.setAlignment(Element.ALIGN_LEFT);
xyStyle.setFont(zwFont);
xyStyle.setSpacingBefore(20);
xyStyle.setFirstLineIndent(4);
document.add(xyStyle);
//指标1文字分析
Paragraph xykxStyle = new Paragraph(jdzsContent);
xykxStyle.setAlignment(Element.ALIGN_LEFT);
xykxStyle.setFont(zwFont);
xykxStyle.setSpacingBefore(20);
xykxStyle.setFirstLineIndent(4);
document.add(xykxStyle);
//指标1图片
// 添加图片 Image.getInstance即可以放路径又可以放二进制字节流
Image img1 = Image.getInstance(path1);
img1.setAbsolutePosition(0, 0);
img1.setAlignment(Image.ALIGN_CENTER);// 设置图片显示位置
img1.scalePercent(70);// 表示显示的大小为原尺寸的50%
// img.scaleAbsolute(60, 60);// 直接设定显示尺寸
// img.scalePercent(25, 12);//图像高宽的显示比例
// img.setRotation(30);//图像旋转一定角度
document.add(img1);
//指标2小标题
Paragraph kfxtStyle = new Paragraph("2、67");
kfxtStyle.setAlignment(Element.ALIGN_LEFT);
kfxtStyle.setFont(zwFont);
kfxtStyle.setSpacingBefore(20);
kfxtStyle.setFirstLineIndent(4);
document.add(kfxtStyle);
//指标2文字分析
Paragraph kfStyle = new Paragraph(tjgcfContent);
kfStyle.setAlignment(Element.ALIGN_LEFT);
kfStyle.setFont(zwFont);
kfStyle.setSpacingBefore(20);
kfStyle.setFirstLineIndent(4);
document.add(kfStyle);
//指标2图片
Image img2 = Image.getInstance(piePath1);
img2.setAbsolutePosition(0, 0);
img2.setAlignment(Image.ALIGN_CENTER);// 设置图片显示位置
img2.scalePercent(70);// 表示显示的大小为原尺寸的50%
document.add(img2);
document.close();
return filePath;
} catch (FileNotFoundException e) {
e.printStackTrace();
return "";
} catch (BadElementException e) {
e.printStackTrace();
return "";
} catch (MalformedURLException e) {
e.printStackTrace();
return "";
} catch (DocumentException e) {
e.printStackTrace();
return "";
} catch (IOException e) {
e.printStackTrace();
return "";
}
}