转帖|使用教程|编辑:李显亮|2019-07-31 09:37:08.943|阅读 1158 次
概述:在Spire.Pdf命名空间下有一个PdfPageTemplateElement类,用于创建页眉\页脚,水印和印章模板。本文我们将学习到如何为PDF文件添加页眉页脚。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
更多资源查看:Spire.XLS工作表教程 | Spire.Doc系列教程 | Spire.PDF系列教程
Spire.PDF是一个专业的PDF组件,能够独立地创建、编写、编辑、操作和阅读PDF文件,支持 .NET、Java、WPF和Silverlight。Spire.PDF的PDF API拥有丰富的功能,如安全设置(包括数字签名)、PDF文本/附件/图片提取、PDF文件合并/拆分、元数据更新、章节和段落优化、图形/图像描绘和插入、表格创建和处理、数据导入等等。>>下载Spire.PDF最新试用版
在Spire.Pdf命名空间下有一个PdfPageTemplateElement类,用于创建页眉\页脚,水印和印章模板。在该模板上创建好页眉页脚等信息后,即可应用到PDF文档,使现有的页面出现相应信息。
static void Main(string[] args) { //创建PDF文档 PdfDocument doc = new PdfDocument(); //指定页面大小 doc.PageSettings.Size = PdfPageSize.A4; //将页边距设置为0 doc.PageSettings.Margins = new PdfMargins(0); //创建PdfMargins对象,指定期望设置的页边距 PdfMargins margins = new PdfMargins(40, 60, 40, 60); //在文档模板的顶部和底部应用页眉页脚模板 doc.Template.Top = CreateHeaderTemplate(doc, margins); doc.Template.Bottom = CreateFooterTemplate(doc, margins); //在文档模板的左右部分应用空白模板 doc.Template.Left = new PdfPageTemplateElement(margins.Left, doc.PageSettings.Size.Height); doc.Template.Right = new PdfPageTemplateElement(margins.Right, doc.PageSettings.Size.Height); //在文档中添加两页并写入文字 PdfPageBase page1 = doc.Pages.Add(); PdfPageBase page2 = doc.Pages.Add(); PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("华文楷体", 15f, FontStyle.Bold), true); page1.Canvas.DrawString("正文开始的地方...", font, PdfBrushes.Black, 0, 0); page2.Canvas.DrawString("正文开始的地方...", font, PdfBrushes.Black, 0, 0); //保存文档 doc.SaveToFile("HeaderAndFooter.pdf"); } //创建页眉模板 static PdfPageTemplateElement CreateHeaderTemplate(PdfDocument doc, PdfMargins margins) { //获取页面大小 SizeF pageSize = doc.PageSettings.Size; //创建PdfPageTemplateElement对象headerSpace,即作页眉模板 PdfPageTemplateElement headerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Top); headerSpace.Foreground = false; //声明x,y两个float型变量 float x = margins.Left; float y = 0; //在headerSpace中绘制图片 PdfImage headerImage = PdfImage.FromFile(@"C:\logo.png"); float width = headerImage.Width / 3; float height = headerImage.Height / 3; headerSpace.Graphics.DrawImage(headerImage, x, margins.Top - height - 2, width, height); //在headerSpace中绘制线段 PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f); headerSpace.Graphics.DrawLine(pen, x, y + margins.Top - 2, pageSize.Width - x, y + margins.Top - 2); //返回headerSpace return headerSpace; } // 创建页脚模板 static PdfPageTemplateElement CreateFooterTemplate(PdfDocument doc, PdfMargins margins) { //获取页面大小 SizeF pageSize = doc.PageSettings.Size; //创建PdfPageTemplateElement对象footerSpace,即页脚模板 PdfPageTemplateElement footerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Bottom); footerSpace.Foreground = false; //声明x,y两个float型变量 float x = margins.Left; float y = 0; //在footerSpace中绘制线段 PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f); footerSpace.Graphics.DrawLine(pen, x, y, pageSize.Width - x, y); //在footerSpace中绘制文字 y = y + 5; PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", 10f, FontStyle.Bold), true); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left); String footerText = "成都冰蓝科技有限公司\n电话:028-81705109\n网址://www.e-iceblue.cn"; footerSpace.Graphics.DrawString(footerText, font, PdfBrushes.Black, x, y, format); //在footerSpace中绘制当前页码和总页码 PdfPageNumberField number = new PdfPageNumberField(); PdfPageCountField count = new PdfPageCountField(); PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.Black, "第{0}页/共{1}页", number, count); compositeField.StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top); SizeF size = font.MeasureString(compositeField.Text); compositeField.Bounds = new RectangleF(pageSize.Width - x - size.Width, y, size.Width, size.Height); compositeField.Draw(footerSpace.Graphics); //返回footerSpace return footerSpace; }
在现成的PDF页面中,坐标体系有以下设定:
在页面的空白部分添加图片、文字或横线时,需要自己把握现有文档的边距,防止页眉页脚的内容覆盖到正文。
方法一:直接在现有文档绘制页眉页脚
static void Main(string[] args) { //加载一个测试文档 PdfDocument existingPdf = new PdfDocument(); existingPdf.LoadFromFile(@"C:\test.pdf"); //调用DrawHeader方法在现有文档添加页眉 DrawHeader(existingPdf); //调用DrawFooter方法在现有文档添加页脚 DrawFooter(existingPdf); //保存文档 existingPdf.SaveToFile("output.pdf"); } //在页面上方空白部位绘制页眉 static void DrawHeader(PdfDocument doc) { //获取页面大小 SizeF pageSize = doc.Pages[0].Size; //声明x,y两个float型变量 float x = 90; float y = 20; for (int i = 0; i < doc.Pages.Count; i++) { //在每一页的指定位置绘制图片 PdfImage headerImage = PdfImage.FromFile(@"C:\logo.png"); float width = headerImage.Width / 3; float height = headerImage.Height / 3; doc.Pages[i].Canvas.DrawImage(headerImage, x, y, width, height); //在每一页的指定位置绘制横线 PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f); doc.Pages[i].Canvas.DrawLine(pen, x, y + height + 2, pageSize.Width - x, y + height + 2); } } //在页面下方空白部位绘制页脚 static void DrawFooter(PdfDocument doc) { //获取页面大小 SizeF pageSize = doc.Pages[0].Size; //声明x,y两个float型变量 float x = 90; float y = pageSize.Height - 72; for (int i = 0; i < doc.Pages.Count; i++) { //在每一页的指定位置绘制横线 PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f); doc.Pages[i].Canvas.DrawLine(pen, x, y, pageSize.Width - x, y); //在每一页的指定位置绘制文字 y = y + 5; PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", 10f, FontStyle.Bold), true); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left); String footerText = "成都冰蓝科技有限公司\n电话:028-81705109\n网址://www.e-iceblue.cn"; doc.Pages[i].Canvas.DrawString(footerText, font, PdfBrushes.Black, x, y, format); //在每一页的指定位置当前页码和总页码 PdfPageNumberField number = new PdfPageNumberField(); PdfPageCountField count = new PdfPageCountField(); PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.Black, "第{0}页/共{1}页", number, count); compositeField.StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top); SizeF size = font.MeasureString(compositeField.Text); compositeField.Bounds = new RectangleF(pageSize.Width - x - size.Width, y, size.Width, size.Height); compositeField.Draw(doc.Pages[i].Canvas); } }
方法二:通过模板功能添加页眉页脚
static void Main(string[] args) { //加载一个测试文档 PdfDocument existingPdf = new PdfDocument(); existingPdf.LoadFromFile(@"C:\test.pdf"); //创建新的PDF文档 PdfDocument newPdf = new PdfDocument(); //设置页面大小 newPdf.PageSettings.Size = existingPdf.Pages[0].Size; //将页边距设置为0 newPdf.PageSettings.Margins = new PdfMargins(0); //创建PdfMargins对象,指定期望设置的页边距 //期望边距需小于或等于现有文档的实际边距,否则页眉页脚可能覆盖主体内容 PdfMargins margins = new PdfMargins(90, 72, 90, 72); //在新建文档的顶部和底部应用页眉页脚模板 newPdf.Template.Top = CreateHeaderTemplate(newPdf, margins); newPdf.Template.Bottom = CreateFooterTemplate(newPdf, margins); //在新建文档的左右部分应用空白模板 newPdf.Template.Left = new PdfPageTemplateElement(margins.Left, newPdf.PageSettings.Size.Height); newPdf.Template.Right = new PdfPageTemplateElement(margins.Right, newPdf.PageSettings.Size.Height); for (int i = 0; i < existingPdf.Pages.Count; i++) { //添加页面到新建文档,并将现有文档当做模板绘制到新页面 newPdf.Pages.Add().Canvas.DrawTemplate(existingPdf.Pages[i].CreateTemplate(), new PointF(-margins.Left, -margins.Top)); } //保存文档 newPdf.SaveToFile("output.pdf"); } //创建页眉模板 static PdfPageTemplateElement CreateHeaderTemplate(PdfDocument doc, PdfMargins margins) { //获取页面大小 SizeF pageSize = doc.PageSettings.Size; //创建PdfPageTemplateElement对象headerSpace,即作页眉模板 PdfPageTemplateElement headerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Top); headerSpace.Foreground = false; //声明x,y两个float型变量 float x = margins.Left; float y = 0; //在headerSpace中绘制图片 PdfImage headerImage = PdfImage.FromFile(@"C:\logo.png"); float width = headerImage.Width / 3; float height = headerImage.Height / 3; headerSpace.Graphics.DrawImage(headerImage, x, margins.Top - height - 2, width, height); //在headerSpace中绘制横线 PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f); headerSpace.Graphics.DrawLine(pen, x, y + margins.Top - 2, pageSize.Width - x, y + margins.Top - 2); //返回headerSpace return headerSpace; } //创建页脚模板 static PdfPageTemplateElement CreateFooterTemplate(PdfDocument doc, PdfMargins margins) { //获取页面大小 SizeF pageSize = doc.PageSettings.Size; //创建PdfPageTemplateElement对象footerSpace,即页脚模板 PdfPageTemplateElement footerSpace = new PdfPageTemplateElement(pageSize.Width, margins.Bottom); footerSpace.Foreground = false; //声明x,y两个float型变量 float x = margins.Left; float y = 0; //在footerSpace中绘制横线 PdfPen pen = new PdfPen(PdfBrushes.Gray, 0.5f); footerSpace.Graphics.DrawLine(pen, x, y, pageSize.Width - x, y); //在footerSpace中绘制文字 y = y + 5; PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", 10f, FontStyle.Bold), true); PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Left); String footerText = "成都冰蓝科技有限公司\n电话:028-81705109\n网址://www.e-iceblue.cn"; footerSpace.Graphics.DrawString(footerText, font, PdfBrushes.Black, x, y, format); //在footerSpace中绘制当前页码和总页码 PdfPageNumberField number = new PdfPageNumberField(); PdfPageCountField count = new PdfPageCountField(); PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.Black, "第{0}页/共{1}页", number, count); compositeField.StringFormat = new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top); SizeF size = font.MeasureString(compositeField.Text); compositeField.Bounds = new RectangleF(pageSize.Width - x - size.Width, y, size.Width, size.Height); compositeField.Draw(footerSpace.Graphics); //返回footerSpace return footerSpace; }
如果你有任何问题或意见,可在下方评论区留言,点击资源列表查看更多教程资源~
*想要购买正版授权的朋友可以哦~
扫描关注“慧聚IT”微信公众号,及时获取更多产品最新动态及最新资讯
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自: