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