使用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...");}}
}