java操作excel实现图片水印

下载链接:http://download.csdn.net/detail/u012102536/9834232


jar包

java操作excel实现图片水印是不可能实现的  不过可以先添加背景图,再在背景图上填写代码


模板一:只有背景图

模板二:只有数据

模板三:二者合并





代码的一部分:

package com.ekingstar.zcgl.bean.waterPrint;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.poifs.filesystem.POIFSFileSystem;
public class copy2 {
    public static void main(String[] args) throws Exception {
       File file = new File("d:\\CW_JFKZXSJ.xls");
       String[][] result = getData(file, 1);
       int rowLength = result.length;
       for(int i=0;i<rowLength;i++) {
           for(int j=0;j<result[i].length;j++) {
              System.out.print(result[i][j]+"\t\t");
           }
           System.out.println();
       }
       




       
    }
    /**
     * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
     * @param file 读取数据的源Excel
     * @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
     * @return 读出的Excel中数据的内容
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static String[][] getData(File file, int ignoreRows)
           throws FileNotFoundException, IOException {
       List<String[]> result = new ArrayList<String[]>();
       int rowSize = 0;
       BufferedInputStream in = new BufferedInputStream(new FileInputStream(
              file));
       // 打开HSSFWorkbook
       POIFSFileSystem fs = new POIFSFileSystem(in);
       HSSFWorkbook wb = new HSSFWorkbook(fs);
       
       
       String filename0="d://test99.xls";
       
       HSSFWorkbook wb1 = new HSSFWorkbook(new FileInputStream(new File(filename0)));
       
       
       
       
       HSSFCell cell = null;
       for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
           HSSFSheet st = wb.getSheetAt(sheetIndex);
           HSSFSheet st1 = wb1.getSheetAt(sheetIndex);
           // 第一行为标题,不取
           for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
              HSSFRow row = st.getRow(rowIndex);
              HSSFRow row1 = st1.getRow(rowIndex);
              if (row == null) {
                  continue;
              }
              int tempRowSize = row.getLastCellNum() + 1;
              if (tempRowSize > rowSize) {
                  rowSize = tempRowSize;
              }
              String[] values = new String[rowSize];
              Arrays.fill(values, "");
              boolean hasValue = false;
              for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
                  String value = "";
                  cell = row.getCell(columnIndex);
                  if (cell != null) {
                     // 注意:一定要设成这个,否则可能会出现乱码
                     cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                     switch (cell.getCellType()) {
                     case HSSFCell.CELL_TYPE_STRING:
                         value = cell.getStringCellValue();
                         break;
                     case HSSFCell.CELL_TYPE_NUMERIC:
                         if (HSSFDateUtil.isCellDateFormatted(cell)) {
                            Date date = cell.getDateCellValue();
                            if (date != null) {
                                value = new SimpleDateFormat("yyyy-MM-dd")
                                       .format(date);
                            } else {
                                value = "";
                            }
                         } else {
                            value = new DecimalFormat("0").format(cell
                                   .getNumericCellValue());
                         }
                         break;
                     case HSSFCell.CELL_TYPE_FORMULA:
                         // 导入时如果为公式生成的数据则无值
                         if (!cell.getStringCellValue().equals("")) {
                            value = cell.getStringCellValue();
                         } else {
                            value = cell.getNumericCellValue() + "";
                         }
 。。。。。。


请下载我的资源    就一个java文件

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Here is an example of how you can add a watermark to an Excel file in Java using Apache POI: ``` import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class WatermarkExcel { public static void main(String[] args) throws Exception { String inputFile = "input.xlsx"; String outputFile = "output.xlsx"; FileInputStream in = new FileInputStream(inputFile); Workbook workbook = WorkbookFactory.create(in); Sheet sheet = workbook.getSheetAt(0); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("CONFIDENTIAL"); CellStyle style = workbook.createCellStyle(); Font font = workbook.createFont(); font.setColor(IndexedColors.GREY_50_PERCENT.getIndex()); font.setFontHeightInPoints((short) 48); font.setFontName("Arial"); style.setFont(font); style.setWrapText(true); style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); sheet.setDefaultColumnWidth(256 * 15); sheet.setDefaultRowHeightInPoints(256 * 15); for (int i = 0; i < sheet.getLastRowNum() + 1; i++) { row = sheet.getRow(i); if (row != null) { for (int j = 0; j < row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell != null) { cell.setCellStyle(style); } } } } FileOutputStream out = new FileOutputStream(outputFile); workbook.write(out); out.close(); workbook.close(); in.close(); } } ``` This code creates a watermark "CONFIDENTIAL" in the first row of the first sheet of the input Excel file. It uses Apache POI library to read the input Excel file, create the watermark and write the output Excel file. The watermark is created with a gray color, 48-point Arial font, centered both horizontally and vertically. ### 回答2: JAVA可以使用Apache POI库来操作Excel文件,实现Excel中生成水印。 首先,需要导入Apache POI库的相关jar包,并在代码中引入相关的类库。 下面是一个简单的示例代码,展示了如何在Excel文件中生成水印: ``` import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFPatriarch; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.Picture; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; public class ExcelWatermarkGenerator { public static void main(String[] args) throws Exception { String excelFilePath = "path/to/your/excel/file.xlsx"; String watermarkImagePath = "path/to/your/watermark/image.png"; InputStream inputStream = new FileInputStream(watermarkImagePath); BufferedImage watermarkImage = ImageIO.read(inputStream); Workbook workbook = new HSSFWorkbook(new FileInputStream(excelFilePath)); HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0); HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, 0, 0, 10, 10); anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE); ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); ImageIO.write(watermarkImage, "png", byteArrayOut); byte[] bytes = byteArrayOut.toByteArray(); int pictureIndex = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG); Picture picture = patriarch.createPicture(anchor, pictureIndex); picture.resize(); FileOutputStream fileOut = new FileOutputStream(excelFilePath); workbook.write(fileOut); fileOut.close(); System.out.println("水印生成成功!"); } } ``` 以上代码首先加载要生成水印Excel文件和水印图片,然后通过Apache POI操作Excel文件并创建一个画图器(HSSFPatriarch)对象。接下来,创建一个锚定器(HSSFClientAnchor)对象来定位水印的位置和大小。将水印图片写入字节数组输出流,并将该字节数组添加到Excel文件的picture集合中。最后,将修改后的Excel文件保存并关闭。 以上示例代码仅供参考,实际使用时可能需要根据具体需求进行修改。希望对你有所帮助! ### 回答3: 在Java中生成Excel水印的代码可以通过Apache POI库来实现。首先,我们需要导入Apache POI相关的包。 ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class ExcelWatermarkGenerator { public static void main(String[] args) { // 创建新的Excel工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表 XSSFSheet sheet = workbook.createSheet("Sheet1"); try { // 加载水印图片 File imageFile = new File("watermark.png"); byte[] byteArray = IOUtils.toByteArray(new FileInputStream(imageFile)); // 创建水印 XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 3, 5); XSSFDrawing drawing = sheet.createDrawingPatriarch(); XSSFPicture picture = drawing.createPicture(anchor, workbook.addPicture(byteArray, Workbook.PICTURE_TYPE_PNG)); picture.setAnchor(anchor); // 保存Excel文件 FileOutputStream fileOut = new FileOutputStream("watermark_excel.xlsx"); workbook.write(fileOut); fileOut.close(); System.out.println("水印生成成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码中,我们使用了XSSFWorkbook类来创建Excel工作簿,XSSFSheet类来创建工作表。通过文件输入流将水印图片加载到字节数组中,然后使用XSSFClientAnchor类和XSSFDrawing类来创建水印并将其添加到工作表中。最后,使用FileOutputStream将工作簿保存为Excel文件。 请确保你已经在项目中添加了Apache POI的相关依赖,以便代码能够正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值