使用C#的 PdfDocument 实现 PDF 页眉页脚的编辑

1. 引用库:

using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Layout;

2. 对 PDF 中页面使用 PdfCanvas 进行操作

(1)删除页眉/页脚区域

canvas.SetFillColor(iText.Kernel.Colors.ColorConstants.WHITE).
            Rectangle(20, pageSize.GetTop() - 100, pageSize.GetWidth() - 40, 100).
            Fill();

(2)添加页眉/页脚

canvas.BeginText();
canvas.SetFillColorRgb(0, 0, 0);
canvas.SetFontAndSize(PdfFontFactory.CreateFont(), 14);
canvas.MoveText(100, pageSize.GetTop() - 90);
canvas.ShowText("How are you?");
canvas.EndText();

(3)光标点注意事项

        MoveText 之后,当前光标发生变动。如何不好计算,可以再次执行 BeginText。

3. 完整代码

using System;
using System.Windows.Forms;
using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Layout;

namespace WindowsFormsApp1
{
    public partial class PdfOperate : Form
    {
        public PdfOperate()
        {
            InitializeComponent();
        }

        private void btnOpenPdf_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog()
            {
                Title = "Choose PDF...",
                Filter = "Pdf文件|*.pdf;",
            };
            dlg.ShowDialog();
            if (string.IsNullOrEmpty(dlg.FileName)) return;

            string inputPath = dlg.FileName;
            string outPath = "D:\\Document\\CMP\\APC\\资料\\out.pdf";

            using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPath), new PdfWriter(outPath)))
            {
                Document document = new Document(pdfDoc);
                int pageNum = pdfDoc.GetNumberOfPages();

                for (int i = 1; i < pageNum; i++)
                {
                    PdfPage page = pdfDoc.GetPage(i);
                    Rectangle pageSize = page.GetPageSize();
                    PdfCanvas canvas = new PdfCanvas(page);

                    //删除页眉区域
                    canvas.SetFillColor(iText.Kernel.Colors.ColorConstants.WHITE).
                                Rectangle(20, pageSize.GetTop() - 100, pageSize.GetWidth() - 40, 100).
                                Fill();
                    //删除页脚区域
                    canvas.SetFillColor(iText.Kernel.Colors.ColorConstants.WHITE).
                                Rectangle(20, 0, pageSize.GetWidth() - 40, 100).
                                Fill();

                    //添加页眉
                    canvas.BeginText();
                    canvas.SetFillColorRgb(0, 0, 0);
                    canvas.SetFontAndSize(PdfFontFactory.CreateFont(), 14);
                    canvas.MoveText(100, pageSize.GetTop() - 90);
                    canvas.ShowText("Research on APC in the semiconductor CMP industry");
                    canvas.EndText();

                    //添加页脚
                    canvas.BeginText();     //下面的点位以页面左下角为原点
                    canvas.MoveText(pageSize.GetWidth() / 2, 50);
                    canvas.ShowText("2025/08/04");

                    canvas.SetFontAndSize(PdfFontFactory.CreateFont(), 12);
                    canvas.MoveText(pageSize.GetWidth() / 2 - 50, 0);   //没有 BeginText,则以前面的最后点位为原点进行偏移
                    canvas.ShowText($"{i}");
                    canvas.EndText();
                }
            }
            MessageBox.Show("completed...");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值