转帖|使用教程|编辑:李显亮|2019-07-31 09:37:08.943|阅读 1234 次
概述:在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@ke049m.cn
文章转载自: