import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class MSExcelManager {
/*
* Excel文档
*/
private HSSFWorkbook workBook;
private HSSFSheet sheet;
private HSSFRow row = null;
private HSSFCell cell = null;
private short encoding = HSSFWorkbook.ENCODING_UTF_16;
private int cellType = HSSFCell.CELL_TYPE_STRING;
private HSSFCellStyle titleStyle;
private HSSFCellStyle titleStyle1;
private HSSFCellStyle titleStyle2;
private HSSFCellStyle tableStyle;
private HSSFCellStyle contentStyle;
private HSSFCellStyle footStyle;
private Region region;
private HSSFPalette palette;
public MSExcelManager() {
workBook = new HSSFWorkbook();
sheet = workBook.createSheet();
workBook.setSheetName(0, "在线专家监控日志", encoding);
sheet.setVerticallyCenter(true);
sheet.setDefaultColumnWidth((short) 10);
// sheet.setDefaultRowHeightInPoints(21.75f);
palette = getColorStyle();
titleStyle = getTitleStyle();
titleStyle1 = getTitleStyle((short) 9);
titleStyle2 = getTitleStyle((short) 10);
tableStyle = getTableStyle();
contentStyle = getContentStyle();
footStyle = getFootStyle();
}
public static void test() {
String filePath = "F:\\workspace\\webapp\\template\\telpate_test.xls";
FileInputStream fis;
try {
fis = new FileInputStream(filePath);
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
// Iterate over each row in the sheet
Iterator rows = sheet.rowIterator();
HSSFRow row = null;
for (; rows.hasNext();) {
row = (HSSFRow) rows.next();
System.out.println("Row #" + row.getRowNum());
// Iterate over each cell in the row and print out the cell"s
// content
Iterator cells = row.cellIterator();
HSSFCell cell = null;
for (; cells.hasNext();) {
cell = (HSSFCell) cells.next();
System.out.println("Cell #" + cell.getCellNum() + " "
+ cell.getCellStyle());
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
default:
System.out.println("unsuported sell type");
break;
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// test();
List<ExpertConsult> vistorList = new ArrayList<ExpertConsult>();
ExpertConsult expertConsult11 = null;
for (int i = 1; i <= 17; i++) {
expertConsult11 = new ExpertConsult();
expertConsult11.setTimePoint("08:30");
expertConsult11.setTimePointTotal(2 * i);
vistorList.add(expertConsult11);
}
List<ExpertConsult> expertList = new ArrayList<ExpertConsult>();
ExpertConsult expertConsult1 = null;
for (int i = 1; i <= 12; i++) {
expertConsult1 = new ExpertConsult();
expertConsult1.setId(i);
expertConsult1.setName("张三四" + i);
expertConsult1.setLoginTime("2011-01-04 12:30:47");
expertConsult1.setLoginOutTime("2011-01-04 13:30:59");
expertConsult1.setAllNum(10);
expertConsult1.setReplyNum(3);
expertConsult1.setUnreplyNum(7);
expertList.add(expertConsult1);
}
MSExcelManager msExcel = new MSExcelManager();
String path = "F:\\workspace\\webcallSYWG6.0\\webapp\\template\\export\\"
+ new Date().getTime() + ".xls";
msExcel.write(msExcel.exportExcel(vistorList, expertList, null), path);
}
public HSSFPalette getColorStyle() {
HSSFPalette palette = workBook.getCustomPalette();
palette.setColorAtIndex((short) 9, (byte) (182), (byte) (221),
(byte) (232));
palette.setColorAtIndex((short) 10, (byte) (252), (byte) (213),
(byte) (180));
return palette;
}
/**
* 第一行的样式
*
* @return
*/
public HSSFCellStyle getFirstStyle() {
HSSFCellStyle style = workBook.createCellStyle();
HSSFFont font = workBook.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 18);// 设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
style.setWrapText(true);
style.setFont(font);
return style;
}
/**
* 标题行样式
*
* @return
*/
public HSSFCellStyle getTitleStyle() {
HSSFCellStyle style = workBook.createCellStyle();
HSSFFont font = workBook.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 12);// 设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上线居中
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true);
style.setFont(font);
return style;
}
/**
* 蓝色样式
*
* @return
*/
public HSSFCellStyle getTitleStyle(short index) {
HSSFCellStyle style = workBook.createCellStyle();
HSSFFont font = workBook.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 12);// 设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上线居中
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true);
style.setFont(font);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(index);
return style;
}
/**
* 表格样式
*
* @return
*/
public HSSFCellStyle getTableStyle() {
HSSFCellStyle style = workBook.createCellStyle();
HSSFFont font = workBook.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 12);// 设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上线居中
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true);
style.setFont(font);
return style;
}
/**
* 文本样式
*
* @return
*/
public HSSFCellStyle getContentStyle() {
HSSFCellStyle style = workBook.createCellStyle();
HSSFFont font = workBook.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上线居中
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true);
style.setFont(font);
return style;
}
/**
* 底部,签名样式
*
* @return
*/
public HSSFCellStyle getFootStyle() {
HSSFCellStyle style = workBook.createCellStyle();
HSSFFont font = workBook.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 11);// 设置字体大小
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
style.setFont(font);
return style;
}
public void createRow(int currentRow, int rowNum, int colNum,
HSSFCellStyle style) {
for (int rowIndex = currentRow; rowIndex < rowNum; rowIndex++) {
row = sheet.createRow(rowIndex);
for (short cellIndex = 0; cellIndex < colNum; cellIndex++) {
cell = row.createCell(cellIndex);
cell.setEncoding(encoding);
if (style != null) {
cell.setCellStyle(style);
}
cell.setCellType(cellType);
cell.setCellValue("");
}
}
}
public HSSFRow getRow(int rowIndex) {
return sheet.getRow(rowIndex);
}
public void setValue(int rowIndex, int colIndex, String value,
HSSFCellStyle style, int type) {
HSSFRow row = sheet.getRow(rowIndex);
HSSFCell cell = row.getCell((short) colIndex);
cell.setCellType(type);
if (style != null) {
cell.setCellStyle(style);
}
cell.setCellValue(value);
}
public int getLastRowNum() {
return sheet.getLastRowNum();
}
public void mergedRegion(int rowFrom, int colFrom, int rowTo, int colTo) {
region = new Region(rowFrom, (short) colFrom, rowTo, (short) colTo);
sheet.addMergedRegion(region);
}
public String getTitle() {
StringBuffer title = new StringBuffer();
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
String weekStr[] = new String[] { "日", "一", "二", "三", "四", "五", "六" };
title.append("监控日志——专家在线(");
title.append(year + "年");
title.append(month + "月");
title.append(day + "日 周");
title.append(weekStr[week] + ")");
return title.toString();
}
/**
* 报表导出excel格式
*
* @param vistorList
* @param expertList
* @return
*/
public HSSFWorkbook exportExcel(List<ExpertConsult> vistorList,
List<ExpertConsult> expertList, String title) {
// 创建标题行,1行10列
createRow(0, 1, 10, getFirstStyle());
getRow(0).setHeightInPoints((short) 35);
// 合并标题行
mergedRegion(0, 0, 0, 9);
// 填充标题行
if (title == null || title.equals("")) {
setValue(0, 0, getTitle(), null, cellType);
} else {
setValue(0, 0, title, null, cellType);
}
// 创建访客表格,6行10列
createRow(1, 7, 10, tableStyle);
// 合并首列
mergedRegion(1, 0, 6, 0);
// 设置标题行
setValue(1, 0, "在线\n人数\n登记", titleStyle, cellType);
setValue(1, 1, "时间", titleStyle, cellType);
setValue(1, 2, "08:30", titleStyle1, cellType);
setValue(1, 3, "09:00", titleStyle1, cellType);
setValue(1, 4, "09:30", titleStyle1, cellType);
setValue(1, 5, "10:00", titleStyle1, cellType);
setValue(1, 6, "10:30", titleStyle1, cellType);
setValue(1, 7, "11:00", titleStyle1, cellType);
setValue(1, 8, "11:30", titleStyle1, cellType);
setValue(1, 9, "12:00", titleStyle1, cellType);
setValue(2, 1, "人数", titleStyle, cellType);
setValue(3, 1, "时间", titleStyle, cellType);
setValue(3, 2, "12:30", titleStyle1, cellType);
setValue(3, 3, "13:00", titleStyle1, cellType);
setValue(3, 4, "13:30", titleStyle1, cellType);
setValue(3, 5, "14:00", titleStyle1, cellType);
setValue(3, 6, "14:30", titleStyle1, cellType);
setValue(3, 7, "15:00", titleStyle1, cellType);
setValue(3, 8, "15:30", titleStyle1, cellType);
setValue(3, 9, "16:00", titleStyle1, cellType);
setValue(4, 1, "人数", titleStyle, cellType);
setValue(5, 1, "时间", titleStyle, cellType);
setValue(5, 2, "16:30", titleStyle1, cellType);
setValue(5, 3, "17:00", titleStyle1, cellType);
setValue(5, 4, "17:30", titleStyle1, cellType);
setValue(5, 5, "18:00", titleStyle1, cellType);
setValue(5, 6, "18:30", titleStyle1, cellType);
setValue(5, 7, "19:00", titleStyle1, cellType);
setValue(5, 8, "19:30", titleStyle1, cellType);
setValue(5, 9, "20:00", titleStyle1, cellType);
setValue(6, 1, "人数", titleStyle, cellType);
ExpertConsult vistor = null;
// 动态设置统计访客人数
if (vistorList != null && !vistorList.isEmpty()) {
for (int i = 0; i < vistorList.size(); i++) {
vistor = vistorList.get(i);
setValue(i / 8 * 2 + 2, (i % 8 + 2), vistor.getTimePointTotal()
+ "", contentStyle, cellType);
}
}
// 创建在线专家表格,1行10列
createRow(7, 8, 10, tableStyle);
int lastRowNum = getLastRowNum();
// 设置标题行
setValue(lastRowNum, 0, "专家\n考核", titleStyle, cellType);
setValue(lastRowNum, 1, "姓名", titleStyle2, cellType);
setValue(lastRowNum, 2, "上线时间", titleStyle2, cellType);
setValue(lastRowNum, 3, "下线时间", titleStyle2, cellType);
setValue(lastRowNum, 4, "提答数量", titleStyle2, cellType);
setValue(lastRowNum, 5, "回答数量", titleStyle2, cellType);
setValue(lastRowNum, 6, "回答率", titleStyle2, cellType);
setValue(lastRowNum, 7, "回答质量", titleStyle2, cellType);
setValue(lastRowNum, 8, "实际回答时间", titleStyle2, cellType);
if (expertList != null && !expertList.isEmpty()) {
createRow(8, 8 + expertList.size(), 10, tableStyle);
} else {
createRow(8, 9, 10, tableStyle);
}
lastRowNum = getLastRowNum();
// 合并首列
mergedRegion(7, 0, lastRowNum, 0);
for (int i = 7; i <= lastRowNum; i++) {
// 合并尾列
mergedRegion(i, 8, i, 9);
}
int totalAllNum = 0;
int totalReplyNum = 0;
double totalReplyRate = 0.00d;
NumberFormat percentFormat = NumberFormat.getPercentInstance();
percentFormat.setMaximumIntegerDigits(2);
percentFormat.setMaximumFractionDigits(2);
ExpertConsult expert = null;
// 动态设置在线专家信息
if (expertList != null && !expertList.isEmpty()) {
for (int i = 0; i < expertList.size(); i++) {
expert = expertList.get(i);
String loginTime = expert.getLoginTime();
if (loginTime == null || loginTime.equals("")) {
loginTime = "--";
} else {
loginTime = loginTime.substring(11, 16);
}
String loginOutTime = expert.getLoginOutTime();
if (loginOutTime == null || loginOutTime.equals("")) {
loginOutTime = "--";
} else {
loginOutTime = loginOutTime.substring(11, 16);
}
setValue(8 + i, 1, expert.getName(), contentStyle, cellType);
setValue(8 + i, 2, loginTime, contentStyle, cellType);
setValue(8 + i, 3, loginOutTime, contentStyle, cellType);
setValue(8 + i, 4, expert.getAllNum() + "", contentStyle,
cellType);
setValue(8 + i, 5, expert.getReplyNum() + "", contentStyle,
cellType);
BigDecimal b = new BigDecimal(expert.getReplyRate());
double bb = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
setValue(8 + i, 6, bb + "%",contentStyle, cellType);
totalAllNum += expert.getAllNum();
totalReplyNum += expert.getReplyNum();
}
}
if (totalAllNum > 0) {
totalReplyRate = (double) totalReplyNum / (double) totalAllNum
* 100;
}
BigDecimal b = new BigDecimal(totalReplyRate);
totalReplyRate = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
// 创建统计部分
createRow(lastRowNum + 1, lastRowNum + 5, 10, tableStyle);
// lastRowNum = getLastRowNum();
mergedRegion(lastRowNum + 1, 0, lastRowNum + 4, 0);
mergedRegion(lastRowNum + 1, 1, lastRowNum + 2, 3);
mergedRegion(lastRowNum + 1, 4, lastRowNum + 2, 6);
mergedRegion(lastRowNum + 1, 7, lastRowNum + 2, 9);
mergedRegion(lastRowNum + 3, 1, lastRowNum + 4, 3);
mergedRegion(lastRowNum + 3, 4, lastRowNum + 4, 6);
mergedRegion(lastRowNum + 3, 7, lastRowNum + 4, 9);
setValue(lastRowNum + 1, 0, "回答\n问题\n情况", titleStyle, cellType);
setValue(lastRowNum + 1, 1, "当天提问总量", titleStyle2, cellType);
setValue(lastRowNum + 1, 4, "当天回答总量", titleStyle2, cellType);
setValue(lastRowNum + 1, 7, "回答率", titleStyle2, cellType);
setValue(lastRowNum + 3, 1, totalAllNum + "", contentStyle, cellType);
setValue(lastRowNum + 3, 4, totalReplyNum + "", contentStyle, cellType);
setValue(lastRowNum + 3, 7, totalReplyRate + "%", contentStyle,
cellType);
lastRowNum = getLastRowNum();
createRow(lastRowNum + 1, lastRowNum + 6, 10, footStyle);
mergedRegion(lastRowNum + 2, 5, lastRowNum + 2, 6);
setValue(lastRowNum + 2, 5, "责任编辑签名:", footStyle, cellType);
setValue(lastRowNum + 2, 7, "(日)", footStyle, cellType);
mergedRegion(lastRowNum + 3, 5, lastRowNum + 3, 6);
setValue(lastRowNum + 3, 7, "(夜)", footStyle, cellType);
mergedRegion(lastRowNum + 5, 5, lastRowNum + 5, 6);
setValue(lastRowNum + 5, 5, "日期:", footStyle, cellType);
setValue(lastRowNum + 5, 7, "年", footStyle, cellType);
setValue(lastRowNum + 5, 8, "月", footStyle, cellType);
setValue(lastRowNum + 5, 9, "日", footStyle, cellType);
return workBook;
}
public void write(HSSFWorkbook workBook, String path) {
FileOutputStream fos;
try {
fos = new FileOutputStream(path);
workBook.write(fos);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 大小: 95.6 KB
分享到:
相关推荐
2. **创建Excel模板**: 使用Microsoft Excel设计好所需的模板,可以包含各种格式(如文本、数字、日期、公式、条件格式等)、样式(字体、颜色、边框、填充)和图表。 3. **读取模板**: 在Java代码中,使用`...
- 表格样式:使用POI提供的方法可以设置表格、行和单元格的样式,如边框、字体、颜色等。 - 动态更新:如果数据是动态的,你需要确保在每次生成Word文档时都更新图表和表格。 - 错误处理:处理可能出现的异常,如...
然而,在特定情况下,使用POI的事件驱动模式可能会遇到读取问题,特别是当处理由Java代码直接创建而未经软件如Microsoft Excel或WPS Excel保存的Excel文件时。 问题的核心在于两个方面: 1. 动态获取rId:在Excel...
在Java中,我们可以使用Apache POI来创建、读取和修改Excel工作簿。 1. **读取Excel数据**: 使用Apache POI,我们首先需要导入相应的库,如`poi-ooxml`和`poi-ooxml-schemas`。接着,创建一个`Workbook`对象,...
Java POI是一个强大的库,主要用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在Java编程中,使用POI库可以实现自动化操作,例如读取、创建、修改和展示这些文件。在这个场景中,我们关注的是如何...
创建Excel文件可能需要使用如`xlsx`、`js-xlsx`等JavaScript库。 5. **文件下载**:在浏览器环境下,不能直接创建本地文件。但可以通过创建一个`Blob`对象,然后创建一个URL引用,利用`a`标签的`download`属性触发...
在提供的压缩包文件"java将table表格导成excl文档"中,很可能包含了实现这个功能的Java代码示例。通过查看和学习这些代码,你可以更好地理解如何将JSP表格转换为Excel的实际操作。记住,为了确保代码的安全性和兼容...
在读取Excel文件时,你需要使用Apache POI库解析文件,然后将数据传递给SmartTable。这个过程涉及到解析工作簿、工作表,以及将单元格数据转换为适合表格显示的格式。 ```java // 读取Excel文件 FileInputStream ...
在Java开发中,Apache POI 是一个非常重要的库,它允许开发者处理Microsoft Office格式的文件,包括Word(.doc和.docx)、Excel(.xls和.xlsx)和PowerPoint(.ppt和.pptx)。本教程将专注于使用Apache POI进行Word...
3. **动态适配**:通过规则配置,系统能适应不同Excel样式和数据类型的变化,无需每次修改代码。 二、导入规则表设计 1. **数据导入表规则(data_import_table_rule)**: - ID:主键,用于唯一标识一条规则。 - ...
接着,他们可以使用Paragraph、Table、Font等对象来添加文本、表格和样式。例如,使用Paragraph.add()方法插入文本,Table.addCell()方法添加单元格,Font.setFamily()方法设置字体。为了导出数据,开发者可能会遍历...
在Java编程中,Apache POI库是一个非常流行的API,它允许开发者读取、创建和修改Microsoft Office格式的文件,包括Excel。本篇文章将详细介绍如何利用Apache POI来分多个sheet导出Excel文件。 首先,我们需要引入...
它引入了一种基于模板的方法,使得动态创建和更新Excel文件变得简单,类似于我们在HTML和JSP中使用JSTL标签的方式。 2. **Apache POI简介**: Apache POI是Apache软件基金会的一个开源项目,提供了API来读写...
Apache POI库是Java开发者用来处理Microsoft Office格式文件(如Word、Excel)的一个强大工具,尤其在读取和写入Word文档方面表现优秀。本教程将深入探讨如何使用Apache POI实现Java中导出符合特定模板格式的Word...
本篇文章将详细讲解如何使用JavaServer Pages(JSP)来读取Excel文件中的数据,并以表格的形式在网页上展示,同时考虑字体和背景的样式。 首先,我们需要了解JSP的基础知识。JSP是一种基于Java的动态网页技术,允许...
可以使用Apache POI库等Java库来直接生成Excel文件,提供更复杂的格式控制和功能。 下面是一个简单的JSP页面导出到Excel的示例: ```java response.setContentType("application/vnd.ms-excel"); response.set...
5. **生成Excel文件内容**:可以使用Apache POI库,这是一个强大的Java API,专门用于操作Microsoft Office格式的文件,包括Excel。通过POI,我们可以创建`HSSFWorkbook`对象,然后创建工作表(`HSSFSheet`),再在...
对于复杂的样式,可能需要使用JavaScript库如jQuery或现代前端框架如React、Vue等来增强交互性和动态性。 7. **WPS、DOC、DOCX的兼容性**:WPS是金山软件推出的办公软件,其文档格式与微软的Word高度兼容。Apache ...
本实例将探讨如何使用Java技术来创建和导出Word文档。主要涉及的技术栈包括Apache POI库,它是一个强大的API,允许开发者处理Microsoft Office格式的文件,包括Word(.doc和.docx)。 Apache POI提供了HSSF和XSSF两...
3. **添加内容**:通过`Paragraph`、`Table`等对象,向PDF文档中添加文本、表格等元素。iText提供了丰富的API来控制样式和布局。 4. **创建PDF writer**:使用`PdfWriter`实例将文档写入输出流,通常为HTTP响应流。...