2019独角兽企业重金招聘Python工程师标准>>> hot3.png

有些时候我们需要读写excel和word,或者将文字转为pdf那我们应该怎么做呢?

如果需要读写excel需要添加包:

<!-- 操作excel --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency>

如果需要读写word需要添加包:

<!-- 操作word --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency>

如果需要操作pdf,需要添加pdf,需要添加:

<!-- pdf相关包 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><!-- 输出中文,还要引入下面itext-asian.jar包 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!-- 设置pdf文件密码,还要引入下面bcprov-jdk15on.jar包 --><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.54</version></dependency>

然后是如何在代码中操作excel:

/*** @author panmingshuai* @description * @Time 2018年4月2日  下午4:29:08**/
public class ExcelTest {@SuppressWarnings("resource")public static void main(String[] args) throws Exception {/*** 读取excel*/
//      FileInputStream in = new FileInputStream(new File("E:\\mz.xlsx"));//读取xlsx的excel
//      XSSFWorkbook workbook = new XSSFWorkbook(in);//读取xls的excel
//      HSSFWorkbook workbook = new HSSFWorkbook(in);//循环遍历excel表
//      for(int i=0; i<workbook.getNumberOfSheets(); i++){
//          XSSFSheet sheet = workbook.getSheetAt(i);
//          for(int j=0; j<=sheet.getLastRowNum(); j++){
//              XSSFRow row = sheet.getRow(j);
//              for(int k=0; k<row.getLastCellNum(); k++){
//                  XSSFCell cell = row.getCell(k);
//                  String dm = cell.toString();
//                  if(k == row.getLastCellNum()-1){
//                      System.out.println(dm);
//                  } else {
//                      System.out.print(dm);
//                  }
//              }
//          }
//      }//数值转换的方法
//      XSSFSheet sheet = workbook.getSheetAt(0);
//      XSSFRow row = sheet.getRow(0);
//      XSSFCell cell0 = row.getCell(0);
//      XSSFCell cell1 = row.getCell(1);
//      XSSFCell cell2 = row.getCell(2);
//      System.out.println(Double.valueOf(cell0.toString()) + 10);//浮点数
//      System.out.println(Math.round(Float.valueOf(cell1.toString()))+10);//整数
//      System.out.println(Math.round(Double.valueOf(cell2.toString()))+10);//长整型/*** 写入excel*/XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet();XSSFRow row0 = sheet.createRow(0);XSSFCell cell0 = row0.createCell(0);cell0.setCellValue("pan");XSSFCell cell1 = row0.createCell(1);cell1.setCellValue(123);XSSFCell cell2 = row0.createCell(2);cell2.setCellValue(123.2352545);//单元格合并和样式设置XSSFRow row1 = sheet.createRow(1);XSSFCell cell10 = row1.createCell(0);XSSFCell cell11 = row1.createCell(1);cell10.setCellValue("cell10");cell11.setCellValue("cell11");//为cell10设置样式XSSFCellStyle cellStyle = workbook.createCellStyle();//单元格样式Font fontStyle = workbook.createFont(); // 字体样式 fontStyle.setBold(true); // 加粗  fontStyle.setFontName("黑体"); // 字体  fontStyle.setFontHeightInPoints((short) 11); // 大小// 将字体样式添加到单元格样式中   cellStyle.setFont(fontStyle);  // 居中  cellStyle.setAlignment(HorizontalAlignment.CENTER);  //设置边框cellStyle.setBorderBottom(BorderStyle.THIN);  cellStyle.setBorderLeft(BorderStyle.THIN);  cellStyle.setBorderRight(BorderStyle.THIN);  cellStyle.setBorderTop(BorderStyle.THIN);  // 为cell10单元格添加样式cell10.setCellStyle(cellStyle); // 合并单元格  CellRangeAddress cra =new CellRangeAddress(1, 3, 1, 3); // 起始行, 终止行, 起始列, 终止列  sheet.addMergedRegion(cra);  //为cell11设置样式,因为这时已经合并,所以现在cell11的样式就是合并单元格的样式XSSFCellStyle cellStyle1 = workbook.createCellStyle();//单元格样式//水平居中cellStyle1.setAlignment(HorizontalAlignment.CENTER);//垂直居中cellStyle1.setVerticalAlignment(VerticalAlignment.TOP);cell11.setCellStyle(cellStyle1);// 使用RegionUtil类为合并后的单元格添加边框 ,如果不设置就只有左上角的那个合并前的单元格有上和左的边框线RegionUtil.setBorderBottom(1, cra, sheet); // 下边框  RegionUtil.setBorderLeft(1, cra, sheet); // 左边框  RegionUtil.setBorderRight(1, cra, sheet); // 有边框  RegionUtil.setBorderTop(1, cra, sheet); // 上边框 File file = new File("E://pan.xlsx");FileOutputStream out = FileUtils.openOutputStream(file);workbook.write(out);out.close();}
}

至于代码的意义,注释已经很详细了。

接下来是操作word:

/*** @author panmingshuai* @description* @Time 2018年4月2日 下午5:46:30**/
public class WordTest {@SuppressWarnings("resource")public static void main(String[] args) throws Exception {/*** 读取doc文档*/// FileInputStream in = FileUtils.openInputStream(new// File("E:\\qwe.doc"));// HWPFDocument doc = new HWPFDocument(in);// Range range = doc.getRange();// for(int i=0; i<range.numParagraphs(); i++){// System.out.println("---------------------------" +// range.getParagraph(i).text());// }// String docText = range.text();// System.out.println(docText);// in.close();/*** 读取docx文档*/// FileInputStream in = FileUtils.openInputStream(new// File("E:\\qwe.docx"));// XWPFDocument doc = new XWPFDocument(in);// for(XWPFParagraph paragraph : doc.getParagraphs()){// System.out.println("-------------" + paragraph.getText());// }// XWPFWordExtractor extractor = new XWPFWordExtractor(doc);// System.out.println(extractor.getText());/*** 写入docx文档*/XWPFDocument doc = new XWPFDocument();XWPFParagraph para = doc.createParagraph();//首行缩进para.setIndentationFirstLine(1000);// 一个XWPFRun代表具有相同属性的一个区域。XWPFRun run = para.createRun();run.setBold(true); // 加粗run.setText("加粗的内容");run = para.createRun();run.setColor("FF0000");run.setText("红色的字。");run = para.createRun();run.setFontSize(17);run.setText("17号的字");OutputStream os = FileUtils.openOutputStream(new File("E:\\qwe123.docx"));doc.write(os);os.close();/*** XWPFParagraph设置样式:* * * //setAlignment()指定应适用于此段落中的文本的段落对齐方式。CENTER LEFT...* //p1.setAlignment(ParagraphAlignment.LEFT);* //p1.setBorderBetween(Borders.APPLES);* //p1.setBorderBottom(Borders.APPLES);* //p1.setBorderLeft(Borders.APPLES);指定应显示在左边页面指定段周围的边界。* //p1.setBorderRight(Borders.ARCHED_SCALLOPS);指定应显示在右侧的页面指定段周围的边界。* //p1.setBorderTop(Borders.ARCHED_SCALLOPS);指定应显示上方一组有相同的一组段边界设置的段落的边界。这几个是对段落之间的格式的统一,相当于格式刷* //p1.setFirstLineIndent(99);//---正文宽度会稍微变窄* //p1.setFontAlignment(1);//---段落的对齐方式 1左 2中 3右 4往上 左 不可写0和负数* //p1.setIndentationFirstLine(400);//---首行缩进,指定额外的缩进,应适用于父段的第一行。* //p1.setIndentationHanging(400);//---首行前进,指定的缩进量,应通过第一行回到开始的文本流的方向上移动缩进从父段的第一行中删除。* //p1.setIndentationLeft(400);//---整段缩进(右移)指定应为从左到右段,该段的内容的左边的缘和这一段文字左边的距和右边文本边距和左段权中的那段文本的右边缘之间的缩进,*      如果省略此属性,则应假定其值为零。* //p1.setIndentationRight(400);//---指定应放置这一段,该段的内容从左到右段的右边缘的正确文本边距和右边文本边距和左段权中的那段文本的右边缘之间的缩进,*      如果省略此属性,则应假定其值为零。* //p1.setIndentFromLeft(400);//---整段右移* //p1.setIndentFromRight(400);* //p1.setNumID(BigInteger.TEN);* //p1.setPageBreak(true);//--指定当渲染此分页视图中的文档,这一段的内容都呈现在文档中的新页的开始。* //p1.setSpacingAfter(6);//--指定应添加在文档中绝对单位这一段的最后一行之后的间距。* //p1.setSpacingAfterLines(6);//--指定应添加在此线单位在文档中的段落的最后一行之后的间距。* //p1.setSpacingBefore(6);//--指定应添加上面这一段文档中绝对单位中的第一行的间距。* //p1.setSpacingBeforeLines(6);//--指定应添加在此线单位在文档中的段落的第一行之前的间距。* //p1.setSpacingLineRule(LineSpacingRule.AT_LEAST);//--指定行之间的间距如何计算存储在行属性中。* //p1.setStyle("");//--此方法提供了样式的段落,这非常有用.* //p1.setVerticalAlignment(TextAlignment.CENTER);//---指定的文本的垂直对齐方式将应用于此段落中的文本* //p1.setWordWrapped(true);//--此元素指定是否消费者应中断超过一行的文本范围,通过打破这个词 (打破人物等级) 的两行或通过移动到下一行 (在词汇层面上打破) 这个词的拉丁文字。* //XWPFRun r1=p1.createRun();//p1.createRun()将一个新运行追加到这一段* //setText(String value)或setText(String value,int pos)* //r1.setText(data);* //r1.setTextPosition(20);//这个相当于设置行间距的,具体这个20是怎么算的,不清楚,此元素指定文本应为此运行在关系到周围非定位文本的默认基线升降的量。*        不是真正意义上的行间距* //r1.setStrike(true);//---设置删除线的,坑人!!!* //r1.setStrikeThrough(true);---也是设置删除线,可能有细微的区别吧* //r1.setEmbossed(true);---变的有重影(变黑了一点)* //r1.setDoubleStrikethrough(true);---设置双删除线* //r1.setColor("33CC00");//---设置字体颜色 ★* //r1.setFontFamily("fantasy");* //r1.setFontFamily("cursive");//---设置ASCII(0 - 127)字体样式 * //r1.setBold(jiacu);//---"加黑加粗"* //r1.setFontSize(size);//---字体大小* //r1.setImprinted(true);//感觉与setEmbossed(true)类似,有重影* //r1.setItalic(true);//---文本会有倾斜,是一种字体?* //r1.setShadow(true);//---文本会变粗有重影,与前面两个有重影效果的方法感觉没什么区别* //r1.setSmallCaps(true);//---改变了  英文字母  的格式* //r1.setSubscript(VerticalAlign.BASELINE);//---valign垂直对齐的* //r1.setUnderline(UnderlinePatterns.DASH);//--填underline type设置下划线* //document.createTable(2, 2);//--创建一个制定行列的表* //document.enforceReadonlyProtection();//--强制执行制度保护* //r1.setDocumentbackground(doc, "FDE9D9");//设置页面背景色* //r1.testSetUnderLineStyle(doc);//设置下划线样式以及突出显示文本* //r1.addNewPage(doc, BreakType.PAGE);* //r1.testSetShdStyle(doc);//设置文字底纹*/}
}

然后是操作pdf:

/*** @author panmingshuai* @description * @Time 2018年4月3日  上午10:27:10**/
public class PdfTest {public static void main(String[] args) throws Exception {// 1、新建document对象Document document = new Document();// 2、建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。// 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("E:\\pan.pdf"));// 给PDF文件设置密码,需要引入bcprov-jdk15on.jar包//用户密码String userPassword = "123456";//拥有者密码(可以编辑pdf,例如插入页眉之类的)String ownerPassword = "pan";writer.setEncryption(userPassword.getBytes(), ownerPassword.getBytes(), PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128);//3、打开文档document.open();//4、PDF中设置段落样式,输出中文内容,必须引入itext-asian.jar//中文字体,解决中文不能显示问题BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//蓝色字体Font blueFont = new Font(bfChinese);blueFont.setColor(BaseColor.BLUE);//段落文本Paragraph paragraphBlue = new Paragraph("蓝色段落", blueFont);document.add(paragraphBlue);//绿色字体Font greenFont = new Font(bfChinese);greenFont.setColor(BaseColor.GREEN);//创建章节(会另起一页)Paragraph chapterTitle = new Paragraph("段落标题xxxx", greenFont);Chapter chapter1 = new Chapter(chapterTitle, 1);chapter1.setNumberDepth(0);Paragraph sectionTitle = new Paragraph("部分标题", greenFont);Section section1 = chapter1.addSection(sectionTitle);Paragraph sectionContent = new Paragraph("部分内容", blueFont);section1.add(sectionContent);//将章节添加到文章中document.add(chapter1);//5、添加图片//图片1Image image1 = Image.getInstance("E:\\123.jpg");//设置图片位置的x轴和y周image1.setAbsolutePosition(100f, 550f);//设置图片的宽度和高度image1.scaleAbsolute(200, 200);//将图片1添加到pdf文件中document.add(image1);//图片2Image image2 = Image.getInstance(new URL("http://b.hiphotos.baidu.com/image/pic/item/6159252dd42a28341d491d0057b5c9ea14cebfc9.jpg"));//设置图片位置的x轴和y周image2.setAbsolutePosition(100f, 300f);//设置图片的宽度和高度image2.scaleAbsolute(200, 200);//将图片2添加到pdf文件中document.add(image2);//6、添加表格://添加一个3列的表PdfPTable table = new PdfPTable(3); table.setWidthPercentage(100); // 宽度100%填充table.setSpacingBefore(10f); // 前间距table.setSpacingAfter(10f); // 后间距List<PdfPRow> listRow = table.getRows();//设置列宽float[] columnWidths = { 1f, 2f, 3f };table.setWidths(columnWidths);//行1PdfPCell cells1[]= new PdfPCell[3];PdfPRow row1 = new PdfPRow(cells1);//单元格cells1[0] = new PdfPCell(new Paragraph("111"));//单元格内容cells1[0].setBorderColor(BaseColor.BLUE);//边框颜色cells1[0].setPaddingLeft(20);//左填充20cells1[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中cells1[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中cells1[1] = new PdfPCell(new Paragraph("222"));cells1[2] = new PdfPCell(new Paragraph("333"));//行2PdfPCell cells2[]= new PdfPCell[3];PdfPRow row2 = new PdfPRow(cells2);cells2[0] = new PdfPCell(new Paragraph("444"));//把第一行添加到集合listRow.add(row1);listRow.add(row2);//把表格添加到文件中document.add(table);//添加有序列表com.itextpdf.text.List orderedList = new com.itextpdf.text.List(com.itextpdf.text.List.ORDERED);orderedList.add(new ListItem("Item one"));orderedList.add(new ListItem("Item two"));orderedList.add(new ListItem("Item three"));document.add(orderedList);//设置属性//标题document.addTitle("this is a title");//作者document.addAuthor("pan");//主题document.addSubject("this is subject");//关键字document.addKeywords("Keywords");//创建时间document.addCreationDate();//应用程序document.addCreator("pan.com");// 关闭文档document.close();//关闭书写器writer.close();}
}

完毕。

转载于:https://my.oschina.net/u/3534905/blog/1790752

java操作Excel、word和pdf相关推荐

  1. java操作Excel、PDF文件

    java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...

  2. java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)

    Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...

  3. java关于对于word或者pdf文件的批量下载实现,其中包括(Java实现创建word文档模板,根据模板导出word文档)

    本次需求是,pdf是表格类型的文件,我这里使用了word模板进行处理.但由于是多个文件一起导出,因此全部放到一个目录底下进行打包下载. ## 整体思路 /*** 下载思路:* 1.查询出数据后:* 2 ...

  4. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  5. java操作excel

    使用Java操作excel可以使用两种方式: 关于表格导入导出,市面上比较知名的开源就是 Apache 的POI 和 阿里巴巴的 EasyExcel了.EasyExcel 也是对 POI 的改进和封装 ...

  6. Java开发中word转pdf那件事

    事件背景 由于项目需要,最新开始研究起word转pdf了,本以为应该是一件很简单的事情,网络上应该已经有很成熟的解决方案了,毕竟在电脑上使用wps或office操作只需要另存为pdf即可,结果一顿百度 ...

  7. 关于java中实现word转pdf

    1.java中实现word转pdf几种方式如下 1.使用jacob(Java COM Bridge)操作offfice的方式,基于这种方式无论是水印还是格式都可以完美转换:但是这个方式都只是基于win ...

  8. java excel类库,jExcelApi Java 操作 Excel 的类库

    jExcelApi Java 操作 Excel 的类库 Java Excel API(JXL)是一个成熟,开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作.这个项目基于GPL ...

  9. java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网

    Java操作Excel/Jakarta POI API/data/Jakarta POI API.doc Java操作Excel/Jakarta POI API/jar/poi-3.0.2-FINAL ...

  10. java操作excel表

    文章分类:Java编程 http://developers.sun.com.cn/blog/functionalca/entry/java读写excel简介 JAVA EXCEL API简介 Java ...

最新文章

  1. react-native(五)生成App
  2. Spark实战系列目录
  3. sqlyong 删除数据能否撤回_数据结构知识点总结
  4. Mac安装RocketMQ和可视化控制台教程
  5. linux双网卡架设FTP,LINUX系统上架设FTP服务器
  6. python应用题_Python简单应用题
  7. 车辆及其应用的车载语音识别显示方法及系统与流程
  8. android 浏览器 内核版本,Android集成三方浏览器之X5内核
  9. 快手AI技术副总裁郑文:为什么说AI是短视频平台的核心能力
  10. 我的CSDN账号被偷了
  11. java自定义对象集合排序
  12. linux date英文日期、星期简写说明(中文对照)
  13. es文件浏览器android看不到文件,es文件浏览器搜索不到电脑解决办法 es文件浏览器找不到电脑...
  14. 《国际贸易术语解释通则》概述中关于2000年通则的主要内容
  15. matlab2017b和2018a,Matlab 2018a 比2017b有哪些改进?
  16. 信创舆情一线--工信部开展APP侵害用户权益专项整治行动
  17. 信息系统安全策略的概念与内容
  18. 汉诺塔问题及时间复杂度推导
  19. [PDA開發]獲得PDA的ip地址與機器名稱
  20. python教程:上下文管理器详细教程

热门文章

  1. tinymce富文本数学公式插件
  2. 运维(34) K8s使用
  3. 【Redis】hmdp关注取关、共同关注、关注推送功能实现
  4. 前端渲染服务端渲染总结
  5. 金蝶K3 11.0-K3HR系统在Win2003环境的设置指南
  6. 一键关闭wi-fi蓝牙捷径_如何在Windows中使用键盘或桌面快捷方式打开或关闭Wi-Fi...
  7. 【Python百分制转五分制】
  8. 2015年百度校园招聘笔试题
  9. 模仿百度校园招聘流程【HTML】
  10. BAPI修改工单状态