小记使用NPOI创建World文档中的问题

1.创建 XWPFDocument 后 在 Write(fileStream) 时 报 NPOI.OpenXml4Net 未初始化

   查看源码发现 SetText 时保存的都是xml格式,所以当 SetText里面包含了XML特殊字符的时候就会存在这个问题(转义也不行,只能替换)

 

string SetTextValue(string text)
{
if (string.IsNullOrEmpty(text))
{
return "";
}

//return SecurityElement.Escape(text);//不行
return text.Replace("<", "(").Replace(">", ")");
// return "<![CDATA[" + text + "]]>";
}

2.设置标题:通过模板来设置

//创建新的word文档
doc = new XWPFDocument();
var newStyles = doc.CreateStyles();
using (var templateStream = new MemoryStream(Properties.Resources.template))
{
var template = new XWPFDocument(templateStream);
newStyles.SetStyles(template.GetCTStyle());
templateStream.Close();
template.Close();
}

 

//设置标题2

void GetParagraphOne( string tagname)
{
var gp = doc.CreateParagraph();
gp.Style = "3";
var 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 = 21;//5号字体
//gr.GetCTR().AddNewRPr().AddNewSzCs().val = 21;
//gr.GetCTR().AddNewRPr().AddNewB().val = true; //加粗
gr.SetText(SetTextValue(tagname));
}

 

3.页面边距设置:

//页面设置
var sectPr = new CT_SectPr();
sectPr.pgSz.w = 11906;
sectPr.pgSz.h = 16838;
sectPr.pgMar.left = (ulong) 400; //左边距
sectPr.pgMar.right = (ulong) 900; //右边距
sectPr.pgMar.top = "100";
sectPr.pgMar.bottom = "100";
doc.Document.body.sectPr = sectPr;

 

posted @ 2021-06-07 09:07  皑上雪  阅读(274)  评论(0编辑  收藏  举报