避免Word在Apache POI生成的.doc开头显示空白页
Posted
技术标签:
【中文标题】避免Word在Apache POI生成的.doc开头显示空白页【英文标题】:Avoid Word displaying blank page at the beginning of .doc generated by Apache POI 【发布时间】:2018-12-04 21:38:53 【问题描述】:我在一个 Java 项目中使用 Apache POI。我在横向页面上工作过,代码如下:
private void changeOrientation (XWPFDocument document, String orientation)
CTDocument1 doc = document.getDocument ();
CTBody body = doc.getBody ();
CTSectPr section = body.addNewSectPr ();
XWPFParagraph para = document.createParagraph ();
CTP ctp = para.getCTP ();
CTPPr br = ctp.addNewPPr ();
br.setSectPr (section);
CTPageSz pageSize;
if (section.isSetPgSz ())
pageSize = section.getPgSz ();
else
pageSize = section.addNewPgSz ();
pageSize.setOrient (STPageOrientation.LANDSCAPE);
if (orientation.equals ( "landscape"))
pageSize.setOrient (STPageOrientation.LANDSCAPE);
pageSize.setW (BigInteger.valueOf (842 * 20));
pageSize.setH (BigInteger.valueOf (595 * 20));
else
pageSize.setOrient (STPageOrientation.PORTRAIT);
pageSize.setH (BigInteger.valueOf (842 * 20));
pageSize.setW (BigInteger.valueOf (595 * 20));
创建文档后调用该方法
private void dipl()
XWPFDocument document = new XWPFDocument ();
String landscape = "landscape";
changeOrientation (document, landscape);
// ......
问题是 Word 在横向页面之前的文档开头显示空白纵向页面。 那么,如何避免创建空白页呢?
【问题讨论】:
我相信它来自body.AddNewSectPr
。一个文档已经包含一个部分 - 默认部分。如果您添加另一个并将其格式化为“下一页”类型,您将得到一个空白页...
【参考方案1】:
Word
文档的默认部分属性仅在正文中设置,而不在段落中设置。如果部分属性在段落中,则这是附加部分的属性,例如,如果文档包含横向格式的部分和纵向格式的部分。
创建仅具有横向格式信纸大小的Word
文档的最小工作示例是:
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
public class CreateWordLandscape
public static void main(String[] args) throws Exception
XWPFDocument document= new XWPFDocument();
CTDocument1 ctDocument = document.getDocument();
CTBody ctBody = ctDocument.getBody();
CTSectPr ctSectPr = (ctBody.isSetSectPr())?ctBody.getSectPr():ctBody.addNewSectPr();
CTPageSz ctPageSz = (ctSectPr.isSetPgSz())?ctSectPr.getPgSz():ctSectPr.addNewPgSz();
ctPageSz.setOrient(STPageOrientation.LANDSCAPE);
//paper size letter
ctPageSz.setW(java.math.BigInteger.valueOf(Math.round(11 * 1440))); //11 inches
ctPageSz.setH(java.math.BigInteger.valueOf(Math.round(8.5 * 1440))); //8.5 inches
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
run.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
FileOutputStream out = new FileOutputStream("CreateWordLandscape.docx");
document.write(out);
out.close();
document.close();
【讨论】:
以上是关于避免Word在Apache POI生成的.doc开头显示空白页的主要内容,如果未能解决你的问题,请参考以下文章
使用apache的POI API 生成word文档(docx)时,怎么将一段文字设置成为大纲标题,如设置成标题1
Java Apache POI 读取 Word (.doc) 文件并获取使用的命名字符样式
使用java Apache poi 根据word模板生成word报表
使用 POI 读取 Word 中的书签替换书签内容(doc和docx)