logo资料库

Aspose.Word使用说明文档.pdf

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
Aspose.Word使用说明文档 使用说明文档 一、前言 一、前言 刘志昂 2019/2/22 Aspose.Word是一款相当成熟的Word处理组件,使用他可以像真正在使用office一样,在代码里编辑Word文档,而且不需要在本 地安装Office支持。 二、构建文档 二、构建文档 1.快速上手 快速上手 Aspose.Word是一款商业软件(以下简称Aspose),因此在使用Aspose前,要先获得license授权。 为了方便演示,我们先定义一个注册方法。 private static final String LIC = "...";//license授权文本 public static void registeLicense() { InputStream licenseStream = new ByteArrayInputStream(LIC.getBytes()); License license = new License(); try { license.setLicense(licenseStream);//加载license } catch (Exception e) { e.printStackTrace(); } } 让我们从创建一个Word文档开始吧! /** * 使用Apsose.Word创建第一个Word文档 */ @Test public void test1() { registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Hello,Lain!"); doc.save(getTempFileName());//文件保存位置,会根据后缀名自动判断保存类型 } catch (Exception e) { e.printStackTrace(); } } 这里的 DocumentBuilder 可以理解为你在office里编辑时的光标,实际上它内部确实维护了一个游标。 writeln 方法和 write 方法的区别在于, writeln 在文本之后插入了一个段落终止符,相当于如下代码: builder.write("Hello,Lain!"); builder.insertBreak(BreakType.PARAGRAPH_BREAK);
打开生成的文件,可以看到我们刚刚输入的文字。 在一切开始之前,建议先阅读一下这篇文章,对Aspose的文档模型有一个整体的了解: http://w w w.cnblogs.com/asxinyu/p/3242754.html 2.为段落设置格式 为段落设置格式 话不多说,先上代码。 /** * 为段落设置格式 */ @Test public void test2() { registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("Hello,Lain!"); builder.getFont().setColor(Color.decode("#66ccff"));//设置颜色 builder.getFont().setBold(true);//设置粗体 builder.getFont().setItalic(true);//设置斜体 builder.getFont().setName("微软雅黑");//设置字体 builder.getFont().setHighlightColor(Color.gray);//设置背景高亮 builder.getFont().setUnderlineColor(Color.RED);//设置字体颜色 builder.getFont().setUnderline(Underline.DOUBLE);//设置下划线 /* * 缩进 */ builder.getParagraphFormat().setFirstLineIndent(30);//首行缩进 builder.getParagraphFormat().setLeftIndent(30);//缩进:文本之前 builder.getParagraphFormat().setRightIndent(30);//缩进:文本之后 /* * 行距: * AT_LEAST 最小值 * EXACTLY 固定值 * MULTIPLE 多倍行距 * 注:多倍行距的值以12为基准,12为一倍行距,24为两倍,以此类推 */ builder.getParagraphFormat().setLineSpacingRule(LineSpacingRule.MULTIPLE); builder.getParagraphFormat().setLineSpacing(24); builder.getParagraphFormat().setSpaceBefore(10);//段前,单位磅 builder.getParagraphFormat().setSpaceAfter(10);//段后,单位磅 /* * 对齐方式 * CENTER 居中对齐 * DISTRIBUTED 分散对齐 * JUSTIFY 两端对齐 * LEFT 左对齐 * RIGHT 右对齐 */ builder.getParagraphFormat().setAlignment(ParagraphAlignment.RIGHT); builder.getParagraphFormat().setBidi(false);//方向:true 从右向左 false 从左向右 builder.writeln("Present Day,Present Time!Ahhhhhhh"); doc.save(getTempFileName()); } catch (Exception e) { e.printStackTrace(); } }
打开你的Office Word,或WPS,右键点击 段落 ,你所能看到的所有设置在上面的代码中都能实现。 3.页面分隔 页面分隔 Word之中分页和分节看上去像是同样的效果,但实际上两者是完全不一样的,分页符只是将内容分割到下一页,但还是在同一节 里面。对页面进行设置,比如横纵向,页面大小等,都是对分节进行设置的,而不能单独对某一页。 让我们看Aspose中如何对文档设置分页分节: /** * 页面分隔符 */ @Test public void test3() { registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.writeln("This is the 1st section,1st Page"); builder.insertBreak(BreakType.PAGE_BREAK);//分页符 builder.writeln("This is the 1st section,2nd Page"); builder.insertBreak(BreakType.LINE_BREAK);//换行符 builder.insertBreak(BreakType.COLUMN_BREAK);//分栏符 builder.insertBreak(BreakType.SECTION_BREAK_CONTINUOUS);//连续分节符 builder.writeln("This is the 3rd section,1nd Page"); builder.writeln("连续分节符"); builder.insertBreak(BreakType.SECTION_BREAK_EVEN_PAGE);//偶数页分节符
builder.writeln("This is the 4th section,1nd Page"); builder.writeln("偶数页分节符"); builder.insertBreak(BreakType.SECTION_BREAK_ODD_PAGE);//奇数页分节符 builder.writeln("This is the 5th section,1nd Page"); builder.writeln("奇数页分节符"); builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);//下一页分节符 builder.writeln("This is the 6th section,1nd Page"); builder.writeln("下一页分节符"); builder.insertBreak(BreakType.SECTION_BREAK_NEW_COLUMN);//节的结尾 builder.writeln("This is the 7th section,1nd Page"); builder.writeln("节的结尾"); doc.save(getTempFileName()); } catch (Exception e) { e.printStackTrace(); } } 可以看到,囊括了Word中所有相关的操作: 4.页面设置 页面设置 下面的代码演示了如何对页面属性进行设置 /** * 页面设置 */ @Test public void test4() { registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.write("Present Day,Present Life!Ahhhhhhh"); builder.getPageSetup().setPaperSize(PaperSize.A4);//纸张大小 builder.getPageSetup().setLeftMargin(20);//设置边距 单位为磅 builder.getPageSetup().setRightMargin(10); builder.getPageSetup().setTopMargin(10); builder.getPageSetup().setBottomMargin(10); builder.getPageSetup().setTextOrientation(TextOrientation.DOWNWARD);//文字方向 builder.getPageSetup().setOrientation(Orientation.LANDSCAPE);//横纵向 PORTRAIT 纵向 LANDSCAPE 横向
doc.save(getTempFileName()); } catch (Exception e) { e.printStackTrace(); } } 对应的office中的功能: 5.设置页眉页脚 设置页眉页脚 /** * 设置页眉页脚 */ @Test public void test5() { registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.write("Hello,Lain!"); builder.insertBreak(BreakType.LINE_BREAK); builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);//移动到页眉 builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.writeln("Hello,Lain!"); builder.moveToDocumentEnd(); builder.writeln("Hello,Lain!"); builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);//移动到页脚 builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.getFont().setName("微软雅黑"); builder.write("第"); builder.insertField("PAGE", "");//当前页数 builder.write("页"); builder.write(" 共"); builder.insertField("NUMPAGES", "");//总页数 builder.write("页"); builder.moveToDocumentEnd(); builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.write("Hello,Lain!"); doc.save(getTempFileName()); } catch (Exception e) { e.printStackTrace(); } } 由Aspose的文档模型结构可知,页眉页脚是在section里面,和body并列,并不在正文中,所以在设置页眉页脚的时候要 先 moveToHeaderFooter ,写完内容后,再移到文档末尾 moveToDocumentEnd 。 在页眉中写内容,和在正文中一样,可以设置文字格式,颜色,等。 6.生成表格 生成表格
//表格 @Test public void test6() { registeLicense(); Document doc; try { doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.startTable(); builder.insertCell(); builder.getCellFormat().setWidth(100); builder.getFont().setName("华文正楷"); builder.getFont().setColor(Color.decode("#66ccff")); builder.getParagraphFormat().setLineSpacing(24); builder.write("Name"); builder.insertCell(); builder.getCellFormat().setWidth(200); builder.write("describe"); builder.endRow(); builder.insertCell(); builder.getCellFormat().setWidth(100); builder.write("Lain"); builder.insertCell(); builder.getCellFormat().setWidth(200); builder.write("Make Me Sad"); builder.endRow(); builder.endTable(); doc.save(getTempFileName()); } catch (Exception e) { e.printStackTrace(); } } 使用 Builder 插入表格,先 startTable ,然后插入单元格,使用 endRow 结束一行。可以通过 CellFormat 设置单元格格式,写入文 本时依旧可以设置段落格式以及文本样式。最后使用 endTable 结束一张表格的编写。 当有两张表格在一起的时候,注意中间要用换行符隔开,不然两个表格会合并为一个 7.插入图片 插入图片 /** * 插入图片 */ @Test public void test9() { BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB); image.getGraphics().drawString("Hello,Lain!", 120, 120); registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); builder.insertImage(image); doc.save(getTempFileName()); } catch (Exception e)
{ // TODO Auto-generated catch block e.printStackTrace(); } } 对段落设置居中,对图片同样有效 8.大纲级别 大纲级别 /导航导航 /生成目录 生成目录 @Test public void test8() { registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertTableOfContents("\\o \"1-9\" \\h \\z \\u");//参考微软官方office文档 builder.writeln(); builder.getParagraphFormat().setOutlineLevel(OutlineLevel.LEVEL_1); builder.writeln("一级"); builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.getParagraphFormat().setOutlineLevel(OutlineLevel.LEVEL_2); builder.writeln("二级"); builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE); builder.getParagraphFormat().setOutlineLevel(OutlineLevel.LEVEL_3); builder.writeln("三级"); builder.getParagraphFormat().setOutlineLevel(OutlineLevel.BODY_TEXT); builder.writeln("正文"); doc.updateFields(); doc.save(getTempFileName()); } catch (Exception e) { e.printStackTrace(); } } Word中插入目录,实际上也是插入的域代码, insertTableOfContents ,插入的是TOC,具体参数设置,可以参考Office官方文 档: https://support.office.com/zh-cn/article/域代码:toc(目录)域-1f538bc4-60e6-4854-9f64-67754d78d05c?ui=zh-CN&rs=zh- CN&ad=CN 三、从网页构建文档 三、从网页构建文档 Aspose有一特色功能,能够将html页面转换为Word文档输出。 使用起来也很方便: @Test public void test10() { String html = "

Hello,Lain!

";//Html内容 registeLicense(); try { Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.insertHtml(html); doc.save(getTempFileName()); } catch (Exception e) { e.printStackTrace(); }
} 在实际生活中,我们可以发现,有的时候复制网页上的内容,会把网页上的样式也一并复制过来,在粘贴的时候会有保留原格式 的选项,可以看出Word实际上就是用超文本标记语言实现的,因此能有这样的功能也不奇怪。 但也不是所有样式都能被顺利转换,就我们实际项目来说,目前发现的就有上下标不识别,横线不识别等。要想用这个功能进行 开发,得先把想要的doc样式用Aspose转换成Html,然后再转换回来看一下,如果能正确转换,就去生成的Html里找生效的元素。
分享到:
收藏