700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Aspose.Words for Java实现Word的操作(创建 合并单元格 样式修改 动态插入数据)

Aspose.Words for Java实现Word的操作(创建 合并单元格 样式修改 动态插入数据)

时间:2023-03-20 23:23:12

相关推荐

Aspose.Words for Java实现Word的操作(创建 合并单元格 样式修改 动态插入数据)

前言:对于Aspose.Words这个实用的插件,网上相关资料很多都是.NET,C#的写法,很少有JAVA相关的,而且比较乱,因客户需求导出Word内嵌表格功能,我才开始研究,查阅了很多大佬的资料,外加自己查看官方API手册,最终完成完善.下面分享给大家,有问题的可以评论告知多多支持!
下面以菜鸟程序员的视角带大家学习这个实用的功能.

1. 引入Maven坐标,本插件收费,但是办法总比困难多,大佬们自行百度解决.

2. 写授权配置,后续有用.

3. 这是鉴权代码,请在输出word的那个类开头添加.

InputStream is = DocTransformUtil.class.getClassLoader().getResourceAsStream("license-word.xml");License aposeLic = new License();aposeLic.setLicense(is);

4. 下面用于生成Word的一些常见方法展示

入门,简单的示例

Document doc = new Document();//新建一个空白文档DocumentBuilder builder = new DocumentBuilder(doc);doc.Save("文件保存的全路径");

这里面的`builder`相当于一个画笔,提前给他规定样式,然后他就能根据你的要求画出你想画的Word。这里的画笔使用的是就近原则,当上面没有定义了builder的时候,会使用默认的格式,当上面定义了某个格式的时候,使用最近的一个(即最后一个改变的样式)

设定Word页面的样式

builder.getPageSetup().setPaperSize(PaperSize.A4)//A4纸builder.getPageSetup().setOrientation(Orientation.PORTRAIT)//方向builder.getPageSetup().setVerticalAlignment(PageVerticalAlignment.TOP) //垂直对准builder.getPageSetup().setLeftMargin(42)//页面左边距builder.getPageSetup().setRightMargin(42)//页面右边距

写入一段文字

//获取ParagraphFormat对象,关于行的样式基本都在这里ParagraphFormat ph = builder.getParagraphFormat();//文字对齐方式ph.setAlignment(ParagraphAlignment.CENTER) ;// 单倍行距 = 12 , 1.5 倍 = 18ph.setLineSpacing(12);//获取Font对象,关于文字的大小,颜色,字体等等基本都在这个里面Aspose.Words.Font font = builder.Font;//字体大小font.Size = 22;//是否粗体font.Bold = false;//下划线样式,None为无下划线font.Underline = Underline.None;//字体颜色font.Color = Color.Black;//C#的颜色font.Color = System.Drawing.ColorTranslator.FromHtml("#3b3131");//自定义颜色//设置字体font.NameFarEast = "宋体";//添加文字builder.Write("添加的文字");//添加回车builder.Writeln();//添加文字后回车builder.Writeln("添加的文字后回车");

添加图片

builder.InsertImage("图片绝对地址");builder.InsertImage("图片绝对地址", 80, 80);//可以控制图片的宽高

添加表格

//开始添加表格Table table = builder.startTable();//开始添加第一行,并设置表格行高RowFormat rowf = builder.getRowFormat();rowf.setHeight(40) ;// ....这里rowf可以有很多的设置//插入一个单元格builder.insertCell();//设置单元格是否水平合并builder.getCellFormat().setHorizontalMerge(CellMerge.NONE) ;//设置单元格是否垂直合并,None为不合并builder.getCellFormat().setVerticalMerge(CellMerge.NONE);//设置单元格宽builder.getCellFormat().setWidth(40) ;//单元格垂直对齐方向builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER);//单元格水平对齐方向builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);builder.getCellFormat().setFitText(true);//单元格内文字设为多行(默认为单行,会影响单元格宽)//单元格内添加文字builder.write("这是第一行第一个单元格");builder.InsertCell();builder.getCellFormat().setWidth(-1);//当不需要规定这个单元格的宽度的时候,设置成-1,会是自动宽度builder.write("这是第一行第二个单元格");//结束第一行builder.endRow();//结束表格builder.endTable();//设置这个表格的上下左右,内部水平,垂直的线为白色(当背景为白色的时候就相当于隐藏边框了)table.setBorder(BorderType.LEFT, LineStyle.DOUBLE, 1, Color.WHITE, false);table.setBorder(BorderType.TOP, LineStyle.DOUBLE, 1, Color.WHITE, false);table.setBorder(BorderType.RIGHT, LineStyle.DOUBLE, 1, Color.WHITE, false);table.setBorder(BorderType.BOTTOM, LineStyle.DOUBLE, 1, Color.WHITE, false);table.setBorder(BorderType.VERTICAL, LineStyle.DOUBLE, 1, Color.WHITE, false);

表格的合并单元格

注意:最重要的是不用忘记开始表格,开始一行,结束一行,结束表格里面的设置可以根据个人需要修改,也可以不写使用默认的

表格的合并单元格

//横向合并单元格builder.CellFormat.setHorizontalMerge = CellMerge.None;builder.getCellFormat().setHorizontalMerge (CellMerge.FIRST);builder.CellFormat.setHorizontalMerge = CellMerge.Previous;//纵向合并单元格builder.getCellFormat().setVerticalMerge(CellMerge.NONE);builder.getCellFormat().setVerticalMerge(CellMerge.FIRST);builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS);

备注:NONE为不合并,FIRST为要合并的单元格,PREVIOUS为和FIRST标记的单元格合并,并且以FIST标记的单元格为主,PREVIOUS标记的单元格不需要写入内容,自己测试下就懂了

5.按以上方法生成自己需要的word后,可以选择导入本地或者浏览器下载2种方式满足不同需求.

通过IO流写入本地

String outPath = "D:\\ceshi.docx";String path = outPath.substring(0, outPath.lastIndexOf(File.separator));File file = new File(path);if (!file.exists()) {//创建文件夹file.mkdirs();}file = new File(outPath);// 新建一个空白pdf文档FileOutputStream os = new FileOutputStream(file);//接下来这里是创建文档,省略N字..................doc.save(os, SaveFormat.HTML);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,os.close();//关流

通过IO流实现浏览器下载到本地

//Word文档输出流OutputStream outputStream1 = null;//下载输出流OutputStream outputStream = null;//下载输入流InputStream inputStream = null;//创建临时文件File wordFile = File.createTempFile("tempWord", ".docx");outputStream1 = new FileOutputStream(wordFile);//接下来这里是创建文档,省略N字..................//保存文档数据到Word文档输出流outputStream1doc.save(outputStream1, SaveOptions.createSaveOptions(SaveFormat.DOCX));//生成docx文件//生成Word文档之后,关闭输入流outputStream1.close();//文件下载// response.reset();//慎用,reset()用于重置,但是在重置的时候也会清空相关数据,例如session存的信息response.setContentType("application/msword");response.setCharacterEncoding("UTF-8");long timelong = System.currentTimeMillis();String time = String.valueOf(timelong);response.addHeader("Content-Disposition", "attachment;filename=\"" + time +".docx" +"\"");response.flushBuffer();outputStream = response.getOutputStream();//输出文件----另外说下IOUtils工具类是package press.utils;inputStream = new FileInputStream(wordFile);IOUtils.copy(inputStream, outputStream);//关闭流IOUtils.closeQuietly(inputStream);IOUtils.closeQuietly(outputStream);//关闭程序时,删除临时文件wordFile.delete();

6.注意事项

关流

//关流这是必须要做的,推荐大家这样关流,首先try{}内包裹的业务代码创建流后需要关闭,最后还需要在finally{}内判断关流.try{//这里写业务代码} catch (Exception e) {e.printStackTrace();} finally {//关闭所有的流try {if (outputStream != null) {outputStream.close();}} catch (IOException e1) {e1.printStackTrace();}}

调整单元格样式,关闭表格自适应宽度.

//这是我写的过程中遇到的问题,调表格样式的时候,改的宽度总是达不到要求,刚开始我使用的是

builder.getCellFormat().setFitText(true);

这个导致只关闭了一个单元格自适应,但是其他单元格还是自适应,这样导致样式始终不符合预期.

//解决方案---这是创建表格刚开始的语句Table table = builder.startTable();//然后调用table.autoFit(AutoFitBehavior.FIXED_COLUMN_WIDTHS);

最后:大家一起交流学习进步,加油!

//Aspose.Words for Java官方API手册在线地址/words/java/com.aspose.words/Document

Aspose.Words for Java实现Word的操作(创建 合并单元格 样式修改 动态插入数据)并浏览器下载或本地导出

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。