pom文件包:

        <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.5</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency><!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl --><dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version><exclusions><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion></exclusions></dependency>

JavaDome代码:

package dome;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import jxl.*;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.*;
import java.util.UUID;/*** @projectName testDome* @date 2022/6/13 16:03*/
public class excelToPdfDome {public static void main(String[] args) {String excelFilePath = "D:\\testDome\\11111111111.xls";excel2PdfAdWaterMark(excelFilePath,"仅供测试使用,不得对外传阅");}/*** @Description : Excel to PDF 并添加水印* @Date   : 2022/6/13 16:09* @param descExcelFilePath excel的路径地址* @param waterMarkName 水印文案**/public static void excel2PdfAdWaterMark(String descExcelFilePath, String waterMarkName){FileInputStream fileInputStream = null;InputStream inputStream = null;String descExcelToPdfFilePath = descExcelFilePath.replace(".xls", ".pdf");try {fileInputStream = new FileInputStream(descExcelFilePath);byte[] bytes = IOUtils.toByteArray(fileInputStream);inputStream = new ByteArrayInputStream(bytes);// jxl excel 转换为excelString tempFile = excelToPaf(descExcelFilePath);IOUtils.closeQuietly(inputStream);IOUtils.closeQuietly(fileInputStream);// 添加水印waterMark(tempFile, descExcelToPdfFilePath, waterMarkName);// 删除临时文件FileUtils.deleteQuietly(new File(tempFile));} catch (Exception e) {e.printStackTrace();} finally {IOUtils.closeQuietly(inputStream);IOUtils.closeQuietly(fileInputStream);}}/*** @param inputFile 你的PDF文件地址* @param outputFile 添加水印后生成PDF存放的地址* @param waterMarkName 你的水印* @return 是否添加成功*/public static boolean waterMark(String inputFile,String outputFile, String waterMarkName) {try {PdfReader reader = new PdfReader(inputFile);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));//这里的字体设置比较关键,这个设置是支持中文的写法// 使用系统字体BaseFont base = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);int total = reader.getNumberOfPages() + 1;PdfContentByte under;Rectangle pageRect = null;for (int i = 1; i < total; i++) {pageRect = stamper.getReader().getPageSizeWithRotation(i);// 计算水印X,Y坐标float x = pageRect.getWidth()/2;float y = pageRect.getHeight()/2+100;under = stamper.getUnderContent(i);under.saveState();PdfGState gs = new PdfGState();// 设置透明度为0.6gs.setFillOpacity(0.6f);under.setGState(gs);under.restoreState();under.beginText();// 水印字体大小under.setFontAndSize(base, 35);under.setTextMatrix(60, 60);// 颜色under.setColorFill(BaseColor.GRAY);// 水印文字成30度角倾斜,你可以随心所欲的改你自己想要的角度under.showTextAligned(Element.ALIGN_CENTER, waterMarkName,  x,  y, 45);// 添加水印文字under.endText();under.setLineWidth(1f);under.stroke();}stamper.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}public static String excelToPaf(String filePath) throws Exception {String tempFilePath = File.createTempFile(UUID.randomUUID().toString(), ".pdf").getAbsolutePath();Document document = new Document(PageSize.A4,0,0,50,0);PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(tempFilePath));Workbook workbook = null;PdfPTable table = null;//字体设置/** 由于itext不支持中文,所以需要进行字体的设置,我这里让itext调用windows系统的中文字体,* 找到文件后,打开属性,将文件名及所在路径作为字体名即可。*///创建BaseFont对象,指明字体,编码方式,是否嵌入//这里的字体设置比较关键,这个设置是支持中文的写法BaseFont baseFont = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED,false);// 使用系统字体try {workbook= Workbook.getWorkbook(new File(filePath));Sheet sheet = workbook.getSheet(0);int column=sheet.getColumns();table = new PdfPTable(column); // 实际创建的列数int[] widths = new int[column];for(int j=0;j<column;j++){CellView columnView = sheet.getColumnView(j);widths[j] = columnView.getSize();}table.setWidths(widths); // 适配excel宽度PdfPCell cell1;for(int i=0;i<sheet.getRows();i++){ // 行for(int j=0;j<sheet.getColumns();j++){ // 列boolean flag = false;Cell cell=   sheet.getCell(j, i);String str = cell.getContents();Font font= null;if(str != null && !"".equals(str) ){int boldWeight = cell.getCellFormat().getFont().getBoldWeight();//创建Font对象,将基础字体对象,字体大小,字体风格if(boldWeight == 700){ // 700:粗体font = new Font(baseFont,13, Font.BOLD);}else {// 400或其他 非粗体font = new Font(baseFont,13, Font.NORMAL);}}else{font = new Font(baseFont,13, Font.NORMAL);}flag = isMergeRegionsContainsCell(i, j, table, sheet, str, font);if(!flag){table.addCell(getPDFCell(str,font));}}}} catch (Exception e) {e.printStackTrace();} finally {workbook.close();document.open();document.add(table); // 将表格加入到文档中,并写入pdf文件document.close();writer.close();}return tempFilePath;}//获取指定内容与字体的单元格private static PdfPCell getPDFCell(String string, Font font) {//创建单元格对象,将内容与字体放入段落中作为单元格内容PdfPCell cell = new PdfPCell(new Paragraph(string, font));cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置最小单元格高度cell.setMinimumHeight(20);return cell;}/*** 单元格是否在合并区域内:true 在 false 不在* @param r* @param c* @param table* @param sheet* @param str* @param font* @return*/private static boolean isMergeRegionsContainsCell(int r, int c, PdfPTable table, Sheet sheet, String str, Font font){Range[] ranges = sheet.getMergedCells();PdfPCell cell1 = null;for(Range range : ranges){    //合并的单元格判断和处理if(c >= range.getTopLeft().getColumn() && c <= range.getBottomRight().getColumn()&& r >= range.getTopLeft().getRow() && r <= range.getBottomRight().getRow()){if(str == null || "".equals(str)){return true;}int rowNum = range.getBottomRight().getRow() - range.getTopLeft().getRow()+1;int colNum = range.getBottomRight().getColumn() - range.getTopLeft().getColumn()+1;if(rowNum > colNum){cell1 = mergeRow(str, font, rowNum);cell1.setColspan(colNum);table.addCell(cell1);}else {cell1 = mergeCol(str, font, colNum);cell1.setRowspan(rowNum);table.addCell(cell1);}return true;}}return false;}//合并行的静态函数private static PdfPCell mergeRow(String str, Font font, int i) {//创建单元格对象,将内容及字体传入PdfPCell cell = new PdfPCell(new Paragraph(str, font));//设置单元格内容居中cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//将该单元格所在列包括该单元格在内的i行单元格合并为一个单元格cell.setRowspan(i);return cell;}//合并列的静态函数private static PdfPCell mergeCol(String str, Font font, int i) {PdfPCell cell = new PdfPCell(new Paragraph(str, font));cell.setMinimumHeight(25);cell.setHorizontalAlignment(Element.ALIGN_CENTER);cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//将该单元格所在行包括该单元格在内的i列单元格合并为一个单元格cell.setColspan(i);return cell;}}

Excel 转 PDF 并添加水印相关推荐

  1. linux下安装OpenOffice及使用java调用OpenOffice转换word、Excel为pdf并添加水印

    一.linux下安装OpenOffice OpenOffice是Apache的一款开源的软件,我主要是用来转换office文档成pdf文件,并给其添加水印等. (1)下载安装包 进入主题,首先我们需要 ...

  2. java操作word、excel、pdf 下载添加水印

    1.pdf添加水印 pom文件引入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>i ...

  3. java给图片、word、ppt、excel、pdf添加水印

    java给图片.word.ppt.excel.pdf添加水印 使用poi.itextpdf.imageio等技术 只支持高版本的office,即支持docx.pptx.xlsx 给word添加水印遇到 ...

  4. python给word添加水印_python 批量给 word,excel,ppt 或 pdf 文件添加水印

    python 批量给 word 或 pdf 文件添加水印 更新 20200310 更新 README,对于中文显示为方块的问题,需使用宋体(simsun.ttc).黑体(simhei.ttf)等字体. ...

  5. keil如何添加h文件_如何给PDF文件添加水印?分享给PDF批量加水印的方法

    如何给PDF文件添加水印?在处理一些重要的商业文件中,很多人害怕文件内容被抄袭盗用,就会在文件中添加水印,其中包括Word.Excel.PPT.图片.PDF等多种不同的文件.那如果是PDF文件,你知道 ...

  6. java为word、excel、pdf、ppt、图片添加图片水印(文字水印同理)

    使用idea开发,所需依赖如下: spire的下载.使用,代码中会给出网址.idea中选中右键,添加为库即可使用 <!--使用spire,导入的jar--> <dependency& ...

  7. Java WORD转换PDF 并添加水印 (附赠jar提取链接)

    Java WORD转换PDF 并添加水印 直接上代码 实现功能 docx文档转换为PDF 转换之后排版不混乱 使用工具(Jar包) aspose-words-15.8.0-jdk16.jar(用于PD ...

  8. keil如何添加h文件_如何给PDF文件添加水印?分享给PDF批量加水印的方法-PDF ——快科技(驱动之家旗下媒体)-...

    如何给PDF文件添加水印?在处理一些重要的商业文件中,很多人害怕文件内容被抄袭盗用,就会在文件中添加水印,其中包括Word.Excel.PPT.图片.PDF等多种不同的文件.那如果是PDF文件,你知道 ...

  9. java pdf水印排布问题_Java实现pdf文件添加水印,铺满全页。

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/duan1309/article/details/81232300 因项目需要将word文件(.doc ...

  10. 网页上符号显示成方框_如何在word、PPT、Excel以及PDF中添加带√的方框

    办公的时候,我们接触到的是各种不同格式的文档,那么关于他们的编辑,大家又了解多少呢?比如说,在文档中添加带√的方框,应该如何添加? 今天这里就分享Word.PPT.Excel以及PDF的添加方法,希望 ...

最新文章

  1. 看完这篇缓存双写分析,你面试不再有问题呢~
  2. 窗体内元素遍历-通用方法(DevExpress 中BarManager的遍历)
  3. python break -else 语句
  4. linux 脚本 数字运算符,Shell 基本运算符
  5. 小身材大用途,用PrimusUI驾驭你的页面
  6. python tkinter linux,用于Python和Tkinter的Linux上的字体管理
  7. 【java】Java泛型
  8. 北大、清华计算机课程资源集
  9. Matlab画图命令介绍
  10. 电缆直径和电缆流过电流计算以及对照表
  11. php公众号后台,微信公众号后台管理系统
  12. 学生用计算机如何解方程,学生党必备神器!一键解方程计算器App
  13. 干货 | 华为内部几近满分的项目管理PPT
  14. 某些特殊悼念日的时候,让个人网页风格变黑灰色
  15. 【干货】github上十二款最著名的Android播放器开源项目
  16. banner设圆角_com.youth.banner.Banner 使用glide加载圆角图片无效
  17. OpenHarmony hdc_std无反应的解决办法
  18. LSTM Networks应用于股票市场探究
  19. Windows系统图片不显示缩略图如何解决
  20. 《写给大家看的设计书》《写给大家看的色彩书》《点石成金》《形式感》学习笔记...

热门文章

  1. 计算机常用压缩软件有哪些,电脑用什么解压缩软件比较好?
  2. 浅析智慧城市顶层设计的相关概念
  3. 京东图书爬虫可视化项目
  4. 趣味python编程之经典俄罗斯方块
  5. 使用百度云API进行人脸对比
  6. Thinkpad自修壁纸 2019
  7. 想自学单片机和c语言,单片机想入门应该怎么学?请记住以下几点
  8. malloc函数说明
  9. linux服务器查sn,命令查看服务器SN号
  10. 104种木马手工清除方法