小记使用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;