PDF管理控件Spire.PDF使用教程:如何向现有PDF文件添加页眉页脚

转帖|使用教程|编辑:李显亮|2019-07-31 09:37:08.943|阅读 102 次

概述:在Spire.Pdf命名空间下有一个PdfPageTemplateElement类,用于创建页眉\页脚,水印和印章模板。本文我们将学习到如何为PDF文件添加页眉页脚。

相关链接:

更多资源查看:Spire.XLS工作表教程 | Spire.Doc系列教程 | Spire.PDF系列教程


Spire.PDF是一个专业的PDF组件,能够独立地创建、编写、编辑、操作和阅读PDF文件,支持 .NET、Java、WPF和Silverlight。Spire.PDF的PDF API拥有丰富的功能,如安全设置(包括数字签名)、PDF文本/附件/图片提取、PDF文件合并/拆分、元数据更新、章节和段落优化、图形/图像描绘和插入、表格创建和处理、数据导入等等。>>下载Spire.PDF最新试用版

C# 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网址:http://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管理控件Spire.PDF书签教程:如何向现有PDF文件添加页眉页脚


C# 在现成 PDF 中添加页眉页脚

在现成的PDF页面中,坐标体系有以下设定:

  • 坐标原点是页面的左上角定点
  • X轴正半轴向右延伸,Y轴正半轴向下延伸

在页面的空白部分添加图片、文字或横线时,需要自己把握现有文档的边距,防止页眉页脚的内容覆盖到正文。

方法一:直接在现有文档绘制页眉页脚

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网址:http://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网址:http://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管理控件Spire.PDF书签教程:如何向现有PDF文件添加页眉页脚


如果你有任何问题或意见,可在下方评论区留言,点击资源列表查看更多教程资源~


*想要购买正版授权的朋友可以咨询在线客服哦~

扫描关注“慧聚IT”微信公众号,及时获取更多产品最新动态及最新资讯

1562572142.jpg



标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

文章转载自:E-iceblue中文网 http://www.e-iceblue.cn/spirepdf/add-header-and-footer-to-existing-pdf.html

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
title
title
相关厂商
相关产品
Spire.PDF for .NET

专业的PDF组件,能在.NET应用中独立操作PDF文件,为工厂智能化提供灵活的PDF功能需求。

购物车 在线客服 在线QQ 电话咨询
400-700-1020
反馈
在线客服系统
live chat