怎么做传奇网站,企业网站首页,网站建设合理化建议方案,聚来宝网站建设一、需求描述
我们知道#xff0c;有时在word中需要同时存在不同的节#xff0c;部分页面需要竖向、部分页面需要横向。本文就是用java调用apache poi来实现用代码生成上述效果。下图是本文实现的效果#xff0c;供各位看官查阅#xff0c;本文以一篇课文为例#xff0c;…一、需求描述
我们知道有时在word中需要同时存在不同的节部分页面需要竖向、部分页面需要横向。本文就是用java调用apache poi来实现用代码生成上述效果。下图是本文实现的效果供各位看官查阅本文以一篇课文为例共三页插入了两个“下一页分节符”其中第一页为纵向第二页为横向第三页为纵向。接下来请看具体实现思路和示例代码。本文示例代码仅供学习交流切勿直接用于生产环境。 文本需求的实现效果图 二、实现思路 1.Apache POI的分页符
关于分页符首先想到的是XWPFRun类的addBreak方法经查阅API文档发现addBreak的入参BreakType枚举一共有三种类型的可以选择,分别是COLUMN分栏、PAGE分页、TEXT_WRAPPING下一行。由此可见无法通过addBreak的方式添加“下一页分节符”。
2.关于Office Open XML
根据微软网站显示“Open XML 是可由不同平台上的多个应用程序自由实现的字处理文档、演示文稿和电子表格的开放式标准。 Open XML 旨在如实表示用 Microsoft Office 应用程序定义的二进制格式进行编码的现有字处理文档、演示文稿和电子表格。”而Apache POI的jar包中poi-ooxml前缀的jar提供了通过Open XML的方式处理Word的方法。所以可以使用操作xml的方式生成“下一页分节符”。
在WPS office中插入下一页分节符后将word另存为xml通过xml编辑器\阅读器查看xml代码可以初步得出控制“下一页分节符”的元素是sectPr控制页面尺寸及方向的元素是pgSz。因此调用新增sectPr和pgSz的方法即可实现下一页分节符。
w:body
w:p
w:pPr
w:sectPr
w:pgSz w:w11906 w:h16838/
w:pgMar w:top1440 w:right1800 w:bottom1440 w:left1800 w:header851 w:footer992 w:gutter0/
w:cols w:space425 w:num1/
w:docGrid w:typelines w:linePitch312 w:charSpace0/
/w:sectPr
/w:pPr
w:r
w:t崇祯五年十二月余住西湖。大雪三日湖中人鸟声俱绝。是日更定矣余挐一小舟拥毳衣炉火独往湖心亭看雪。雾凇沆砀天与云与山与水上下一白。湖上影子惟长堤一痕、湖心亭一点、与余舟一芥、舟中人两三粒而已。/w:t
/w:r
/w:p
w:p
w:r
w:t到亭上有两人铺毡对坐一童子烧酒炉正沸。见余大惊喜曰“湖中焉得更有此人”拉余同饮。余强饮三大白而别。问其姓氏是金陵人客此。及下船舟子喃喃曰“莫说相公痴更有痴似相公者”/w:t
/w:r
w:bookmarkStart w:id0 w:name_GoBack/
w:bookmarkEnd w:id0/
/w:p
w:sectPr
w:pgSz w:w16838 w:h11906 w:orientlandscape/
w:pgMar w:top1800 w:right1440 w:bottom1800 w:left1440 w:header851 w:footer992 w:gutter0/
w:cols w:space425 w:num1/
w:docGrid w:typelines w:linePitch312 w:charSpace0/
/w:sectPr
/w:body
3.插入下一页分节符的实现
以下是在Apache POI中简单地实现插入下一页分节符的一种方法。
CTBody body document.getDocument().getBody();
CTPPr ctpPr1 body.addNewP().addNewPPr();
CTSectPr ctSectPr1 ctpPr1.addNewSectPr(); 下一页分节符的实现效果 4.设置页面方向及尺寸的实现
以下是在Apache POI中设置页面尺寸的一种方法。宽高值的单位约为1/20磅。以下宽高值为横向A4纸的宽高值。
CTPageSz pageSize ctSectPr.addNewPgSz();
pageSize.setOrient(STPageOrientation.LANDSCAPE);// 设置页面方向
pageSize.setW(BigInteger.valueOf(16838)); // 设置页面宽度
pageSize.setH(BigInteger.valueOf(11906)); // 设置页面高度 下一页分节符和设置页面横向的实现效果 三、代码示例
代码中实现了在一个空白文档中创建了三个段落通过新增两个sectPr元素实现插入两个“下一页分节符”新增了一个自定义的全局sectPr控制第三页的尺寸方向其中第一页和最后一页是纵向纸张第二页是横向纸张。从呈现效果上来描述第一页书写了课文的上半部分第二页书写了课文的下半部分并设置纸张横向第三页书写了课文的译文纸张纵向。
以下是代码示例受限于个人编程水平此代码仅能说明实现需求的代码未对生产环境的种种情况加以考虑各位看官切莫直接用于生产环境。如有错误欢迎批评指正。
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;public class TestWord1 {public static void main(String[] args) {try {create(测试分页符号2.docx);} catch (IOException e) {e.printStackTrace();}}public static void create(String path) throws IOException {XWPFDocument document new XWPFDocument();FileOutputStream out new FileOutputStream(new File(path));// 创建第一段XWPFParagraph paragraph1 document.createParagraph();XWPFRun run1 paragraph1.createRun();run1.setText(崇祯五年十二月余住西湖。大雪三日湖中人鸟声俱绝。是日更定矣余挐一小舟拥毳衣炉火独往湖心亭看雪。 雾凇沆砀天与云与山与水上下一白。湖上影子惟长堤一痕、湖心亭一点、与余舟一芥、舟中人两三粒而已。);//创建CTSectionPr对象第一个分节符CTBody body document.getDocument().getBody();body.addNewP().addNewPPr().addNewSectPr();// 创建第二段XWPFParagraph paragraph2 document.createParagraph();XWPFRun run2 paragraph2.createRun();run2.setText(到亭上有两人铺毡对坐一童子烧酒炉正沸。见余大惊喜曰“湖中焉得更有此人”拉余同饮。余强饮三大白而别。问其姓氏 是金陵人客此。及下船舟子喃喃曰“莫说相公痴更有痴似相公者);//创建一个空白段CTPPr ctpPr2 body.addNewP().addNewPPr();// 创建CTSectionPr对象第二个分节符CTSectPr ctSectPr2 ctpPr2.addNewSectPr();// 创建页尺寸对象CTPageSz pageSize2 ctSectPr2.addNewPgSz();// 设置页面方向和尺寸pageSize2.setOrient(STPageOrientation.LANDSCAPE);pageSize2.setW(BigInteger.valueOf(16838)); // 设置页面宽度pageSize2.setH(BigInteger.valueOf(11906)); // 设置页面高度// 创建第三段最后一个分节符之后的内容XWPFParagraph paragraph3 document.createParagraph();XWPFRun run3 paragraph3.createRun();run3.setText(译文译文译文译文译文译文译文译文译文译文译文译文译文译文译文译文 译文译文译文译文译文译文译文译文译文译文译文译文译文译文译文 译文译文译文译文译文译文译文译文译文译文译文译文译文译文译文 译文译文译文译文译文译文译文译文译文译文译文译文译文译文译文 译文译文译文译文译文译文译文译文译文译文译文译文译文译文译文);CTSectPr globalSectPr body.addNewSectPr();CTPageSz globalPageSize globalSectPr.addNewPgSz();globalPageSize.setOrient(STPageOrientation.PORTRAIT);body.setSectPr(globalSectPr);document.write(out);out.close();System.out.println(path 成功生成);}}说明经过实践若需要最后一节末尾不带分节符需要不在段落后新增sectPr而是在body中新增并在新增的sectPr上设置页面尺寸并将该尺寸用于body的sectPr。