NPOI创建DOCX常用操作
1、 创建文档
XWPFDocument m_Docx = new XWPFDocument();
2、 页面设置
//1‘=1440twip=25.4mm=72pt(磅point)=96px(像素pixel)
//1px(像素pixel)=0.75pt(磅point)
// A4:W=11906 twip=8.269''=210mm,h=16838twip=11.693''=297mm
//A5:W=8390 twip=5.827''=148mm,h=11906 twip=8.269''=210mm
//A6:W=5953 twip=4.134''=105mm,h=8390twip=5.827''=1148mm
//16k195mmX270mm:
//16k184mmX260mm:
//16k197mmX273mm:
CT_SectPr m_SectPr = newCT_SectPr();
//页面设置A4横向
m_SectPr.pgSz.w = (ulong)16838;
m_SectPr.pgSz.h = (ulong)11906;
m_Docx.Document.body.sectPr = m_SectPr;
3、 创建段落
1) XWPFParagraph gp = m_Docx.CreateParagraph();
2) CT_Pm_p = m_Docx.Document.body.AddNewP();
m_p.AddNewPPr().AddNewJc().val = ST_Jc.center;//段落水平居中
XWPFParagraph gp = newXWPFParagraph(m_p, m_Docx); //创建XWPFParagraph
4、 段首行缩进
gp.IndentationFirstLine=(int)100;
可以用一个函数计算
protected int Indentation(Stringfontname, int fontsize, int Indentationfonts, FontStylefs)
{
//字显示宽度,用于段首行缩进
//字号与fontsize关系
//初号(0号)=84,小初=72,1号=52,2号=44,小2=36,3号=32,小3=30,4号=28,
//小4=24,5号=21,小5=18,6号=15,小6=13,7号=11,8号=10
Graphicsm_tmpGr = this.CreateGraphics();
m_tmpGr.PageUnit = GraphicsUnit.Point;
SizeF size = m_tmpGr.MeasureString("好", new Font(fontname,fontsize * 0.75F, fs));
return (int)size.Width* Indentationfonts * 10;
}
gp.IndentationFirstLine= Indentation("宋体", 21, 2, FontStyle.Regular);//段首行缩进2字符
5、 行距设置
//单倍为默认值(240twip)不需设置,1.5倍=240X1.5=360twip,2倍=240X2=480twip
m_p.AddNewPPr().AddNewSpacing().line = "400";//行距固定20磅
m_p.AddNewPPr().AddNewSpacing().lineRule= ST_LineSpacingRule.exact;
6、 创建RUN
1) XWPFRun gr= gp.CreateRun();
gr.GetCTR().AddNewRPr().AddNewRFonts().ascii = "黑体";
gr.GetCTR().AddNewRPr().AddNewRFonts().eastAsia = "黑体";
gr.GetCTR().AddNewRPr().AddNewRFonts().hint = ST_Hint.eastAsia;
gr.GetCTR().AddNewRPr().AddNewSz().val = (ulong)44;//2号字体
gr.GetCTR().AddNewRPr().AddNewSzCs().val = (ulong)44;
gr.GetCTR().AddNewRPr().AddNewB().val = true;//加粗
gr.GetCTR().AddNewRPr().AddNewColor().val= "red";//字体颜色
gr.SetText("DOCX表");
2) CT_R= m_p.AddNewR();
7、 创建表
1) 创建表
有两种方法:
a.方法1
XWPFTabletable = m_Docx.CreateTable(1, 1);//创建1行1列表
CT_Tblm_CTTbl = m_Docx.Document.body.GetTblArray()[0];//获得文档第一张表
b.方法2
CT_Tblm_CTTbl = m_Docx.Document.body.AddNewTbl();
XWPFTabletable = new XWPFTable(m_CTTbl,m_Docx);//创建1行1列表
2) 表水平居中
m_CTTbl.AddNewTblPr().jc = new CT_Jc();
m_CTTbl.AddNewTblPr().jc.val = ST_Jc.center;//表在页面水平居中
3) 表宽度
m_CTTbl.AddNewTblPr().AddNewTblW().w = "2000";//表宽度
m_CTTbl.AddNewTblPr().AddNewTblW().type = ST_TblWidth.dxa;
4) 表定位
//若tblpXSpec、tblpX同时存在,则tblpXSpec优先tblpX;
//若tblpYSpec、tblpY同时存在,则tblpYSpec优先tblpY;
m_CTTblPr.tblpPr = new CT_TblPPr();//表定位
m_CTTblPr.tblpPr.tblpX = "4003";//表左上角坐标
m_CTTblPr.tblpPr.tblpY = "365";
//m_CTTblPr.tblpPr.tblpXSpec = ST_XAlign.center;// tblpXSpec优先