C# 添加PDF页眉/页脚的示例代码

作者:无名 - C#教程 -

概述

页眉页脚是一篇完整、精致的文档的重要组成部分。在页眉页脚处,可以呈现的内容很多,如公司名称、页码、工作表名、日期、图片,如LOGO、标记等。在下面的文章中,将介绍如何在PDF中添加页眉页脚。通过代码测试,添加页眉页脚可以分两种情况来实现效果:

1.通过添加新的一页,在新建的页面上来添加页眉页脚

2.通过给现有文档直接添加页眉页脚

下面将根据这两种情况介绍具体的C#代码操作

使用工具

Free Spire.PDF for .NET 4.3(社区版)

示例代码(供参考)

1.新建一页来添加页眉页脚

1.1 添加页眉

【C#】

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;

namespace AddHeader_PDF
{
  class Program
  {
    static void Main(string[] args)
    {
      //新建一个PdfDocument类对象,并添加一页
      PdfDocument pdf = new PdfDocument();
      PdfPageBase page = pdf.Pages.Add();

      //设置margin
      PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
      PdfMargins margin = new PdfMargins();
      margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
      margin.Bottom = margin.Top;
      margin.Left = unitCvtr.ConvertUnits(4.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
      margin.Right = margin.Left;

      //调用AddHeader()方法添加页眉
      AddHeader(pdf, PdfPageSize.A4, margin);

      //保存并打开文档
      pdf.SaveToFile("PDF页眉.pdf");
      System.Diagnostics.Process.Start("PDF页眉.pdf");
    }

    static void AddHeader(PdfDocument doc, SizeF pageSize, PdfMargins margin)
    {
      //初始化一个PdfPageTemplateElement对象,用于创建页眉
      PdfPageTemplateElement headerSpace = new PdfPageTemplateElement(pageSize.Width, margin.Top);
      headerSpace.Foreground = true;
      doc.Template.Top = headerSpace;

      //在页眉部分绘入文字
      PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", 10f), true);
      PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Right);
      String headerText = "WORLD TRADE ORGANIZATION, WTO \n THE INTERNATIONAL ORGANIZATION THAT REGULATES INTERNATIONAL TRADE";
      float x = PdfPageSize.A4.Width;
      float y = 0;
      headerSpace.Graphics.DrawString(headerText, font, PdfBrushes.Black, x, y, format);

      //在页眉部分绘入图片
      PdfImage headerImage = PdfImage.FromFile(@"C:\Users\Administrator\Desktop\1.png");
      float width = headerImage.Width / 2;
      float height = headerImage.Height / 3;
      headerSpace.Graphics.DrawImage(headerImage, 0, 0, width, height);

    }
  }
}

页眉添加效果:

1.2添加页脚

【C#】

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
using Spire.Pdf.AutomaticFields;

namespace AddFooter_PDF
{
  class Program
  {
    static void Main(string[] args)
    {
      //新建一个PdfDocument类对象,添加一页
      PdfDocument doc = new PdfDocument();
      PdfPageBase page = doc.Pages.Add();

      //设置margin
      PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
      PdfMargins margin = new PdfMargins();
      margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
      margin.Bottom = margin.Top;
      margin.Left = unitCvtr.ConvertUnits(4.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
      margin.Right = margin.Left;

      //调用AddFooter()方法添加页脚
      AddFooter(doc, PdfPageSize.A4, margin);

      //调用AddPageNumber()方法添加页码
      AddPageNumber(doc, margin);

      //保存并打开文档
      doc.SaveToFile("PDF页脚.pdf");
      System.Diagnostics.Process.Start("PDF页脚.pdf");
    }

    static void AddFooter(PdfDocument doc, SizeF pageSize, PdfMargins margin)
    {
      //初始化一个PdfPageTemplateElement对象,用于创建页脚
      PdfPageTemplateElement footerSpace = new PdfPageTemplateElement(pageSize.Width, margin.Bottom);
      footerSpace.Foreground = true;
      doc.Template.Bottom = footerSpace;

      //在页脚部分绘入文字
      PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", 10f), true);
      PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center);
      String headerText = "Website : www.wto.org";
      float x = PdfPageSize.A4.Width / 2;
      float y = 0;
      footerSpace.Graphics.DrawString(headerText, font, PdfBrushes.Black, x, y, format);
    }
    static void AddPageNumber(PdfDocument doc, PdfMargins margin)
    {
      //添加页码到页脚部分
      foreach (PdfPageBase page in doc.Pages)
      {
        PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Left);
        int x1 = Convert.ToInt32(page.Canvas.ClientSize.Width / 2);
        int y1 = Convert.ToInt32(page.Canvas.ClientSize.Height - margin.Bottom + 20);
        Rectangle bounds = new Rectangle(x1, y1, 20, 20);
        PdfPageNumberField field = new PdfPageNumberField();
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", 10f), true);
        field.Font = font;
        field.StringFormat = format1;
        field.Brush = PdfBrushes.Black;
        field.Bounds = bounds;
        field.Draw(page.Canvas);
      }

    }
  }
}

页脚添加效果:

2.给现有PDF文档添加页眉页脚

【C#】

using Spire.Pdf;
using Spire.Pdf.AutomaticFields;
using Spire.Pdf.Graphics;
using System;
using System.Drawing;

namespace PdfHeader
{
  class Program
  {
    static void Main(string[] args)
    {
      //加载一个测试文档
      PdfDocument existingPdf = new PdfDocument();
      existingPdf.LoadFromFile("Test.pdf");

      //调用DrawHeader方法在现有文档添加页眉
      DrawHeader(existingPdf);

      //调用DrawFooter方法在现有文档添加页脚
      DrawFooter(existingPdf);

      //保存并打开文档
      existingPdf.SaveToFile("output.pdf");
      System.Diagnostics.Process.Start("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("logo.png");
        float width = headerImage.Width / 7;
        float height = headerImage.Height / 7;
        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 = " Website\n https://g20.org/";
        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);
      }
    }
  }
}

测试效果:

注意事项

安装之后,添加引用Spire.PDF.dll文件到项目程序即可,dll文件可在安装路径下的Bin文件夹中获取。

以上是本次关于C#添加PDF页眉页脚的全部内容,两种情况中的示例方法,可以选择参考使用。

IT人知识库 原文链接:http://www.itpeo.net/12809/520373.html





微信小程序支付C#后端源码

本文实例为大家分享了微信小程序支付C#后端源码,供大家参考,具体内容如下 using System; using S... ...

rfedfre

C#利用VS中插件打包并发布winfrom程序

本文为大家分享了C#利用VS中插件打包并发布winfrom程序,供大家参考,具体内容如下 1.先在VS 的扩展更新中搜索... ...

C#实现金额转换成中文大写金额

本文实例为大家分享了C#金额转换成中文大写金额的具体代码,供大家参考,具体内容如下 /// <summary&... ...

rfedfre

C# WPF 父控件通过使用可视化树找到子控件的示例代码

在我们使用WPF设计前台界面时,经常会重写数据模板,或者把控件放到数据模板里。但是一旦将控件放到数据模板中,在后台就没有... ...

C#实现ini文件读写操作

本文实例为大家分享了C#语言实现ini文件读写操作的具体代码,供大家参考,具体内容如下 1、ini文件是什么? 见百度百... ...

rfedfre

C# 7.0中解构功能详解

本文为大家分享了C# 7.0中的解构功能,供大家参考,具体内容如下 解构元组   C#7.0新增了诸多功能,其中有一项是... ...

C#获取日期的星期名称实例代码

具体代码如下所示: private string GetWeekName(DayOfWeek week) {... ...

rfedfre

C#中字段、属性、只读、构造函数赋值、反射赋值的问题

C#中字段、属性和构造函数赋值的问题提出问题如下所述: 首先提出几个问题: 1、如何实现自己的注入框架? 2、字段和自动... ...

WPF实现控件拖动的示例代码

实现控件拖动的基本原理是对鼠标位置的捕获,同时根据鼠标按键的按下、释放确定控件移动的幅度和时机。 简单示例: 在... ...

rfedfre

WPF 在image控件用鼠标拖拽出矩形的实现方法

今天有小伙伴问我一个问题,在image控件用鼠标拖拽出矩形,本文告诉大家如何使用鼠标画出矩形 做出来的效果先请大家看一下... ...

C#怎么生成唯一订单号

本文实例为大家分享了C#生成唯一订单号的具体代码,供大家参考,具体内容如下 根据GUID+DateTime.Now.Ti... ...

C# 中用 Sqlparameter 的两种用法

新建一个表: create table abc ( id int IDENTITY(1,1) NOT NULL, n... ...

C#中sqlDataRead 的三种方式遍历读取各个字段数值的方法

数据库的查询分析器中写上如下代码: create table studentname ( id int prim... ...

c# WinForm 窗体之间传值的几种方式(小结)

前言 小编最近维护一个Winfrom窗体,是项目中CS端的主窗体,很多子窗体需要从主窗体获取值,同时子窗体还需要给主窗... ...

rfedfre

C# WPF 通过委托实现多窗口间的传值的方法

在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多... ...

rfedfre

自定义WPF窗体形状的实战记录

介绍 你好WPF爱好者。 随着WPF等统一API语言的发明,丰富用户界面变得非常容易。 创建丰富的用户界面只是一个想法... ...

深入浅析c#静态多态性与动态多态性

C# 多态性 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的... ...

rfedfre

C#程序中类数量对程序启动的影响详解

前言 最近我在项目写了几万行代码,小伙伴担心会让程序启动速度变慢,所以本渣就来做测试。 本渣使用了代码创建器,创建了 1... ...

rfedfre

Unity色子的投掷和点数的获得详析

前言 前几天需要一个色子的投掷并且获得朝上点数的Unity脚本,在网上找了很多,都是一个模子刻出来的。 对于2018版的... ...

rfedfre

C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题

正文  #方法一:使用string.Contains方法   string.Contains是大小写敏感的,如... ...