NPOI 操作word 创建页眉页脚,页眉中插入图片

本文介绍如何使用NPOI库在Word文档中插入页眉和页脚,包括纯文本和图片的插入方法。通过代码示例展示了如何创建页眉页脚关系,并设置页眉中的图片和页脚的文字内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用NPOI操作word,在制作页眉页脚中有个特殊的需求,在页眉中插入图片,在网上查找许久,终于是有个可以实现在也没中插入图片,但是是以inline方式在页眉中,这种方式不能很好的满足图片位置的调整,需要修改源码,加上可以设置锚点的方式插入图片(还没有实现,实现了再来记录

1,在页眉中插入图片所使用的NPOI版本是 https://download.youkuaiyun.com/download/dengxt/10824550

结果图如上:

2,非插入图片,页眉页脚都是文字

XWPFDocument m_Docx = new XWPFDocument();//创建文档
m_Docx.Document.body.sectPr = new CT_SectPr();
CT_SectPr m_SectPr = m_Docx.Document.body.sectPr;
       
//创建页脚
CT_Ftr m_ftr = new CT_Ftr();

m_ftr.AddNewP().AddNewR().AddNewT().Value = "我是页脚";
//创建页脚关系(footern.xml)
XWPFRelation Frelation = XWPFRelation.FOOTER;
XWPFFooter m_f = (XWPFFooter)m_Docx.CreateRelationship(Frelation, XWPFFactory.GetInstance(), m_Docx.FooterList.Count + 1);

//设置页脚
m_f.SetHeaderFooter(m_ftr);
CT_HdrFtrRef m_HdrFtr1 = m_SectPr.AddNewFooterReference();

m_HdrFtr1.type = ST_HdrFtr.@default;
m_HdrFtr1.id = m_f.GetPackageRelationship().Id;

//创建页眉
CT_Hdr m_Hdr = new CT_Hdr();
m_Hdr.AddNewP().AddNewR().AddNewT().Value = "我是页眉";//页眉内容
//创建页眉关系(headern.xml)
XWPFRelation Hrelation = XWPFRelation.HEADER;
XWPFHeader m_h = (XWPFHeader)m_Docx.CreateRelationship(Hrelation, XWPFFactory.GetInstance(), m_Docx.HeaderList.Count);
//设置页眉
m_h.SetHeaderFooter(m_Hdr);
CT_HdrFtrRef m_HdrFtr2 = m_SectPr.AddNewHeaderReference();
m_HdrFtr2.type = ST_HdrFtr.@default;
m_HdrFtr2.id = m_h.GetPackageRelationship().Id;


//保存文件
string docPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "DocxWord");
if (!Directory.Exists(docPath)) { Directory.CreateDirectory(docPath); }
string fileName = string.Format("{0}.doc", DateTime.Now.ToString("yyyyMMddHHmmssfff"));
FileStream out1 = new FileStream(Path.Combine(docPath, fileName), FileMode.Create);
m_Docx.Write(out1);
out1.Close();

3,页眉插入图片,页脚文字

XWPFDocument m_Docx = new XWPFDocument();
m_Docx.Document.body.sectPr = new CT_SectPr();

CT_SectPr m_SectPr = m_Docx.Document.body.sectPr;

//创建页脚
CT_Ftr m_ftr = new CT_Ftr();
m_ftr.AddNewP().AddNewR().AddNewT().Value = "im yejiao";//页脚内容

//创建页脚关系(footern.xml)
XWPFRelation Frelation = XWPFRelation.FOOTER;
XWPFFooter m_f = (XWPFFooter)m_Docx.CreateRelationship(Frelation, XWPFFactory.GetInstance(), m_Docx.FooterList.Count + 1);
 //设置页脚
m_f.SetHeaderFooter(m_ftr);
CT_HdrFtrRef m_HdrFtr1 = m_SectPr.AddNewFooterReference();
m_HdrFtr1.type = ST_HdrFtr.@default;
m_HdrFtr1.id = m_f.GetPackageRelationship().Id;

//创建页眉
CT_Hdr m_Hdr = new CT_Hdr();
// m_Hdr.AddNewP().AddNewR().AddNewT().Value = "im yemei";//页眉内容
//创建页眉关系(headern.xml)
XWPFRelation Hrelation = XWPFRelation.HEADER;
XWPFHeader m_h = (XWPFHeader)m_Docx.CreateRelationship(Hrelation, XWPFFactory.GetInstance(), m_Docx.HeaderList.Count);
//设置页眉
m_h.SetHeaderFooter(m_Hdr);
CT_HdrFtrRef m_HdrFtr2 = m_SectPr.AddNewHeaderReference();
m_HdrFtr2.type = ST_HdrFtr.@default;
m_HdrFtr2.id = m_h.GetPackageRelationship().Id;



m_Docx.Document.body.sectPr = new CT_SectPr();
m_SectPr = m_Docx.Document.body.sectPr;
//页面设置A4横向
//m_SectPr.pgSz.w = (ulong)16838;
//m_SectPr.pgSz.h = (ulong)11906;


// Add the picture + relationship
FileStream pictureData = null;
pictureData = new FileStream("../../image/3.jpeg", FileMode.Open, FileAccess.Read);


//设置页眉
m_h.SetHeaderFooter(m_Hdr);
m_h.AddPicture(pictureData, (int)PictureType.JPEG, "3.jpeg", 7000000, 1000000);
CT_HdrFtrRef m_HdrFtr = m_SectPr.AddNewHeaderReference();
m_HdrFtr.type = ST_HdrFtr.@default;
m_HdrFtr.id = m_h.GetPackageRelationship().Id;

//保存文件到磁盘WinForm  
string docPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "DocxWord");
if (!Directory.Exists(docPath)) { Directory.CreateDirectory(docPath); }
string fileName = string.Format("{0}.doc", DateTime.Now.ToString("yyyyMMddHHmmssfff"));
FileStream out1 = new FileStream(Path.Combine(docPath, fileName), FileMode.Create);
m_Docx.Write(out1);
out1.Close();

收集的使用NPOI操作word的文档,还是比较适用的文档 https://download.youkuaiyun.com/download/dengxt/10823924

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值